Skip to content
This repository has been archived by the owner on Aug 7, 2020. It is now read-only.

A repository for the Modern Java Technologies Course @ FMI

Notifications You must be signed in to change notification settings

Ivaylo-Georgiev/Sentiment-Analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

Movie Review Sentiment Analyzer

Sentiment Analysis е процесът по алгоритмично идентифициране и категоризиране на мнения, изразени в свободен текст, особено за да се определи дали отношението на автора към конкретна тема, продукт и т.н. е позитивно, негативно или неутрално.

Machine Learning е особено нашумяло в наши дни направление в компютърните науки, което изучава класове от алгоритми, които "се учат" от данни. Такъв тип алгоритми работят, като изграждат модел от примерни входни данни и използват този модел, за да правят предсказания или взимат решения.

Sentiment analyzer-ът за филмови отзиви, автоматично определя степента на позитивност на даден отзив в свободен текст.

Например, алгоритъмът би определил отзива:

"Dire disappointment: dull and unamusing freakshow"

като твърдо негативен, докато отзивът:

"Immersive ecstasy: energizing artwork!"

ще се класифицира като еднозначно позитивен.

Данните, от които ще "учи" алгоритъмът, са множество от 8,529 филмови отзива (ревюта), за които отношението на автора е било оценено от човек по скала от 0 до 4 със следната семантика:

рейтинг семантика
0 negative
1 somewhat negative
2 neutral
3 somewhat positive
4 positive

Използваният data set е от сайта Rotten Tomatoes, използван наскоро за престижния Кaggle machine learning competition.

Данните са налични в текстовия файл reviews.txt, като всеки ред от файла започва с рейтинг, следван от интервал и текста на отзива, например:

4 The performances are an absolute joy .

Напълно е очаквано в подобен real-life data set да има typos, жаргонни или направо несъществуващи думи.

Има обаче едно множество от често срещани в свободен текст думи, които носят твърде малко семантика: определителни членове, местоимения, предлози, съюзи и т.н. Такива думи се наричат stopwords и много алгоритми, свързани с обработка на естествен език (NLP, natural language processing), ги игнорират - т.е. премахват ги от съответните входни текстове, защото внасят "шум", т.е. намаляват качеството на резултата. Няма еднозначна дефиниция (или речник) коя дума е stopword в даден език. Алгоритъмът ползва списъка от 174 stopwords в английския език, записани по една на ред в текстовия файл stopwords.txt, заимстван от сайта ranks.nl.

Алгоритъм

Обучение:

  1. Изчитат се отзивите в reviews.txt
  2. Изчислява се sentiment score на всяка дума като средно аритметично (без закръгляване) на всички рейтинги, в които участва дадената дума. Дума е последователност от малки и главни латински букви и цифри с дължина поне един символ. Думите са case-insensitive, т.е. "Movie", "movie" и "movIE" се третират като една и съща дума. Един отзив се състои от думи, разделени с разделители: интервали, табулации и препинателни знаци - въобще всеки символ, който не е буква или цифра. Stopwords се игнорират, т.е. не се взимат под внимание.

Разпознаване:

  1. По даден текст на отзив се изчислява неговият sentiment score като средно аритметично (без закръгляване) на sentiment scores на всяка дума в отзива. Дефиницията на дума е същата като по-горе, и stopwords отново се игнорират. Игнорират се също всички (непознати) думи, за които алгоритъмът не е обучен, т.е. не се срещат нито веднъж в reviews.txt. Sentiment score на отзив, в който не се съдържа нито една дума с известен sentiment score (състои се само от непознати думи и/или stopwords), се приема за -1.0 (unknown).

Data set-ът от ревюта може да се разширява. Това допринася за допълнителна точност при меренето на sentiment във времето. При добавяне на нови ревюта и оценки, се преизчислява sentiment-a на думите от ревюто.

About

A repository for the Modern Java Technologies Course @ FMI

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages