Я гуглил некоторые решения для анализа настроений и записывал результаты в столбец рядом с анализируемым столбцом текста. Это то, что я придумал.
import nltk
nltk.download('vader_lexicon')
nltk.download('punkt')
# first, we import the relevant modules from the NLTK library
from nltk.sentiment.vader import SentimentIntensityAnalyzer
# next, we initialize VADER so we can use it within our Python script
sid = SentimentIntensityAnalyzer()
# the variable 'message_text' now contains the text we will analyze.
message_text = '''Like you, I am getting very frustrated with this process. I am genuinely trying to be as reasonable as possible. I am not trying to "hold up" the deal at the last minute. I'm afraid that I am being asked to take a fairly large leap of faith after this company (I don't mean the two of you -- I mean Enron) has screwed me and the people who work for me.'''
print(message_text)
# Calling the polarity_scores method on sid and passing in the message_text outputs a dictionary with negative, neutral, positive, and compound scores for the input text
scores = sid.polarity_scores(message_text)
# Here we loop through the keys contained in scores (pos, neu, neg, and compound scores) and print the key-value pairs on the screen
for key in sorted(scores):
print('{0}: {1}, '.format(key, scores[key]), end='')
Это дает мне:
compound: -0.3804, neg: 0.093, neu: 0.836, pos: 0.071,
Теперь я пытаюсь вставить свой собственный столбец текста из фрейма данных.
Пример кода взят с этого сайта.
https://programminghistorian.org/en/lessons/sentiment-analysis
У меня есть поле в кадре данных, состоящее из текста, например:
These brush heads are okay! Wish they came in a larger diameter, would cover more facial surface area and require less time to do the job! However, I think they do a better job than just a face cloth in cleansing the pores. I would recommend this product!
No opening to pee with. weird. And really tight. not very comfortable.
I choose it as spare parts always available and I will buy it again for sure!I will recommend it, without doubt!
love this cleanser!!
Best facial wipes invented!!!!!!(:
Это 5 отдельных записей из моего фрейма данных. Я пытаюсь придумать способ оценить каждую запись как «положительную», «отрицательную» или «нейтральную» и поместить каждое настроение в новое поле в той же строке.
В этом примере Я думаю, что эти 5 записей имеют следующие 5 настроений (в поле рядом с каждой записью):
neutral
negative
positive
positive
positive
Как я могу это сделать?
Я придумал альтернативную выборку из код, как показано ниже.
event_dictionary ={scores["compound"] >= 0.05 : 'positive', scores["compound"] <= -0.05 : 'negative', scores["compound"] >= -0.05 and scores["compound"] <= 0.05 : 'neutral'}
#message_text = str(message_text)
for message in message_text:
scores = sid.polarity_scores(str(message))
for key in sorted(scores):
df['sentiment'] = df['body'].map(event_dictionary)
Это длилось около 15 минут, затем я отменил его и увидел, что на самом деле он вообще ничего не делал. Я хочу добавить поле с именем «sentiment» и заполнить его «положительным», если показатели [«составные»]> = 0,05, «отрицательными», если показатели [«составные»] <= -0,05, и «нейтральными», если показатели [ «соединение»]> = -0,05 и баллы [«соединение»] <= 0,05. </p>