Отредактируйте Vader_lexicon.txt в nltk для python, чтобы добавить слова, связанные с моим доменом

1

Я использую vader в nltk чтобы найти чувства каждой строки в файле. У меня есть 2 вопроса:

  1. Мне нужно добавить слова в vader_lexicon.txt но синтаксис которого выглядит так:

нападения -2.5 0.92195 [-1, -3, -3, -3, -4, -3, -1, -2, -2, -3]

Что -2.5 и 0.92195 [-1, -3, -3, -3, -4, -3, -1, -2, -2, -3] представлять?

Как мне закодировать его для нового слова? Скажем, мне нужно добавить что-то вроде '100%', 'A1'.

  1. Я также вижу положительные и отрицательные слова txt в nltk_data\corpora\opinion_lexicon. Как они используются? Могу ли я добавить свои слова в эти файлы txt?
Теги:
python-3.x
nlp
sentiment-analysis
nltk

1 ответ

0

Я считаю, что vader использует только слово и первое значение при классификации текста. Если вы хотите добавить новые слова, вы можете просто создать словарь слов и их значения настроений, которые можно добавить с помощью функции обновления:

from nltk.sentiment.vader import SentimentIntensityAnalyzer

Analyzer = SentimentIntensityAnalyser()
Analyzer.lexicon.update(your_dictionary)

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

Вы можете использовать этот скрипт (не мой), чтобы проверить, включены ли ваши обновления:

import nltk
from nltk.tokenize import word_tokenize, RegexpTokenizer
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import pandas as pd

Analyzer = SentimentIntensityAnalyzer()

sentence = 'enter your text to test'

tokenized_sentence = nltk.word_tokenize(sentence)
pos_word_list=[]
neu_word_list=[]
neg_word_list=[]

for word in tokenized_sentence:
    if (Analyzer.polarity_scores(word)['compound']) >= 0.1:
        pos_word_list.append(word)
    elif (Analyzer.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) 
score = Analyzer.polarity_scores(sentence)
print('\nScores:', score)

Перед обновлением vader:

sentence = 'stocks were volatile on Tuesday due to the recent calamities in the Chinese market'

Positive: []
Neutral: ['stocks', 'were', 'volatile', 'on', 'Tuesday', 'due', 'to', 'the', 'recent', 'calamities', 'in', 'the', 'Chinese', 'markets']
Negative: []
Scores: {'neg': 0.0, 'neu': 1.0, 'pos': 0.0, 'compound': 0.0}

После обновления vader с финансовой лексикой:

Analyzer.lexicon.update(Financial_Lexicon)
sentence = 'stocks were volatile on Tuesday due to the recent calamities in the Chinese market'

Positive: []
Neutral: ['stocks', 'were', 'on', 'Tuesday', 'due', 'to', 'the', 'recent', 'in', 'the', 'Chinese', 'markets']
Negative: ['volatile', 'calamities']
Scores: {'neg': 0.294, 'neu': 0.706, 'pos': 0.0, 'compound': -0.6124}
  • 0
    Спасибо @laurie. Можете ли вы также рассказать о том, что если слова из моего ввода не присутствуют в файле лексики, не должно быть никаких оценок. Тем не менее, я получаю положительные оценки за входы, где в лексиконе txt нет слов
  • 0
    Это странно .. Можете ли вы привести пример? Использовали ли вы сценарий тестирования для проверки того, какие слова выбираются?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню