Невозможно добавить новые слова в Vader Lexicon, используя цикл for.Работает без цикла отлично.Как мне это решить? - PullRequest
1 голос
/ 04 июня 2019

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

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer 
sid_obj = SentimentIntensityAnalyzer() 
new_word = {'counterfeit':-2,'Good':2,}
sid_obj.lexicon.update(new_word)
sentence = "Company Caught Counterfeit." 
sentiment_dict = sid_obj.polarity_scores(sentence) 
tokenized_sentence = nltk.word_tokenize(sentence)
pos_word_list=[]
neu_word_list=[]
neg_word_list=[]

for word in tokenized_sentence:
    if (sid_obj.polarity_scores(word)['compound']) >= 0.1:
        pos_word_list.append(word)
    elif (sid_obj.polarity_scores(word)['compound']) <= -0.1:
        neg_word_list.append(word)
    else:
        neu_word_list.append(word)                

print('Positive:',pos_word_list)
print('Neutral:',neu_word_list)
print('Negative:',neg_word_list) 

print("Overall sentiment dictionary is : ", sentiment_dict) 
print("sentence was rated as ", sentiment_dict['neg']*100, "% Negative") 
print("sentence was rated as ", sentiment_dict['neu']*100, "% Neutral") 
print("sentence was rated as ", sentiment_dict['pos']*100, "% Positive") 

print("Sentence Overall Rated As", end = " ") 

# decide sentiment as positive, negative and neutral 
if sentiment_dict['compound'] >= 0.05 : 
    print("Positive") 

elif sentiment_dict['compound'] <= - 0.05 : 
    print("Negative") 

else : 
    print("Neutral") 

Вывод выглядит следующим образом:

Positive: []
Neutral: ['Company', 'Caught', '.']
Negative: ['Counterfeit']
Overall sentiment dictionary is :  {'neg': 0.6, 'neu': 0.4, 'pos': 0.0, 'compound': -0.4588}
sentence was rated as  60.0 % Negative
sentence was rated as  40.0 % Neutral
sentence was rated as  0.0 % Positive
Sentence Overall Rated As Negative

Отлично работает для одного слова, добавленного в лексикон. Когда я пытаюсь сделать то же самое, используя файл CSV, добавив несколько слов, используя приведенный ниже код: я не получаю слова «Подделка» в моем словаре Vader.

new_word={}
import csv
with open('Dictionary.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        new_word[row['Word']] = int(row['Value'])
print(new_word)
sid_obj.lexicon.update(new_word)

Выходные данные для приведенного выше кода - это словарь, который обновляется до лексикона. Словарь выглядит следующим образом (в нем около 2000 слов, но я напечатал только несколько). Он также состоит из контрафакта как слова:

{'CYBERATTACK': -2, 'CYBERATTACKS': -2, 'CYBERBULLYING': -2, 'CYBERCRIME': 
-2, 'CYBERCRIMES': -2, 'CYBERCRIMINAL': -2, 'CYBERCRIMINALS': -2, 
'MISCHARACTERIZATION': -2, 'MISCLASSIFICATIONS': -2, 'MISCLASSIFY': -2, 
'MISCOMMUNICATION': -2, 'MISPRICE': -2, 'MISPRICING': -2, 'STRICTLY': -2}

Вывод выглядит следующим образом:

Positive: []
Neutral: ['Company', 'Caught', 'Counterfeit', '.']
Negative: []
Overall sentiment dictionary is :  {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}
sentence was rated as  0.0 % Negative
sentence was rated as  100.0 % Neutral
sentence was rated as  0.0 % Positive
Sentence Overall Rated As Neutral

Где я ошибаюсь при добавлении нескольких слов в лексикон? Файл CSV состоит из двух столбцов. Один со словом, а другой со значением как отрицательное или положительное число. Почему это все еще идентифицировано как нейтральное? Любая помощь будет оценена. Спасибо.

1 Ответ

0 голосов
/ 04 июня 2019

Решил, спасибо. Проблема заключалась в том, что я поместил свой текст в словарь в верхнем регистре. Он всегда должен храниться в нижнем регистре. Слова словаря должны храниться в нижнем регистре. Потому что Vader преобразует все в нижний регистр перед сравнением.

...