Использование nltk Sentiwordnet с питоном

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

  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()

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

2 ответа

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

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

рассчитать настроение

alist = [all_tokens_in_doc]

totalScore = 0

count_words_included = 0

for word in all_words_in_comment:

    synset_forms = list(swn.senti_synsets(word[0], word[1]))

    if not synset_forms:

        continue

    synset = synset_forms[0] 

    totalScore = totalScore + synset.pos_score() - synset.neg_score()

    count_words_included = count_words_included +1

final_dec = ''

if count_words_included == 0:

    final_dec = 'N/A'

elif totalScore == 0:

    final_dec = 'Neu'        

elif totalScore/count_words_included < 0:

    final_dec = 'Neg'

elif totalScore/count_words_included > 0:

    final_dec = 'Pos'

return final_dec
Другие вопросы по тегам