2015-11-27 2 views
4

Я делаю анализ настроений по данным twitter, используя python NLTK. Мне нужен словарь, который содержит + ve и -ve полярности слов. Я прочитал так много всего о sentiwordnet, но когда я использую его для своего проекта, он не дает эффективных и быстрых результатов. Я думаю, что я не использую его правильно. Может ли кто-нибудь сказать мне правильный способ его использовать? Вот шаги, которые я сделал до сих пор:Использование nltk Sentiwordnet с python

  1. лексического анализ твитов
  2. POS мечение лексем
  3. проходящей каждые тег для sentinet

Я использую пакет NLTK для токенизации и мечения , См часть моего кода ниже:

import nltk 
from nltk.stem import * 
from nltk.corpus import sentiwordnet as swn 

tokens=nltk.word_tokenize(row) #for tokenization, row is line of a file in which tweets are saved. 
tagged=nltk.pos_tag(tokens) #for POSTagging 

for i in range(0,len(tagged)): 
    if 'NN' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'n'))>0: 
      pscore+=(list(swn.senti_synsets(tagged[i][0],'n'))[0]).pos_score() #positive score of a word 
      nscore+=(list(swn.senti_synsets(tagged[i][0],'n'))[0]).neg_score() #negative score of a word 
    elif 'VB' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'v'))>0: 
      pscore+=(list(swn.senti_synsets(tagged[i][0],'v'))[0]).pos_score() 
      nscore+=(list(swn.senti_synsets(tagged[i][0],'v'))[0]).neg_score() 
    elif 'JJ' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'a'))>0: 
      pscore+=(list(swn.senti_synsets(tagged[i][0],'a'))[0]).pos_score() 
      nscore+=(list(swn.senti_synsets(tagged[i][0],'a'))[0]).neg_score() 
    elif 'RB' in tagged[i][1] and len(swn.senti_synsets(tagged[i][0],'r'))>0: 
      pscore+=(list(swn.senti_synsets(tagged[i][0],'r'))[0]).pos_score() 
      nscore+=(list(swn.senti_synsets(tagged[i][0],'r'))[0]).neg_score() 

В конце я буду расчета, сколько твитов являются положительными и сколько твитов являются отрицательными. Где я ошибаюсь? Как его использовать? И есть ли какой-либо другой подобный словарь, который прост в использовании?

+0

Я не совсем понимаю, в чем проблема. Скорость? – b3000

+0

нет. У меня около 4000 твитов. Используя sentiwordnet, я получаю только 10 положительных и 18 отрицательных твитов, что, конечно, не является правильным результатом. и скорость курса также является проблемой, но основной проблемой является эффективность. Есть ли ошибка в кодировании? – jeny

+2

Снабжение с помощью сенсорной сети меньше, чем шумный ввод, который вы получаете от твитов, вам нужно нормализовать слова из настоящих твитов в соответствии с sentiwordnet, например. 'u're -> you + are' и т. д. – alvas

ответ

3

Да, есть другие лексиконы, которые вы можете использовать. Вы можете найти небольшой список лексиконов здесь: http://sentiment.christopherpotts.net/lexicons.html#resources Кажется, мнение Bing Liu Lexicon довольно прост в использовании.

Помимо ссылки на те лексиконы, что веб-сайт является очень хорошим учебником по анализу настроений.

Смежные вопросы