#python #nlp #nltk #token #sentiment-analysis
#python #nlp #nltk #токен #анализ настроений
Вопрос:
Я хотел бы провести сентиментальный анализ по теме COVID-19 с использованием python. Проблема возникает из-за того, что записи типа «положительный тест» получают положительную полярность, хотя это утверждение является отрицательным объявлением. Мой текущий код выглядит следующим образом:
import nltk
from textblob import TextBlob
from nltk.stem import WordNetLemmatizer
# Setting the test string
test_string = "He was tested positive on Covid-19"
tokens = nltk.word_tokenize(test_string)
# Lemmatizer
wordnet_lemmatizer = WordNetLemmatizer()
tokens_lem_list = []
for word in tokens:
lem_tokens = wordnet_lemmatizer.lemmatize(word, pos="v")
tokens_lem_list.append(lem_tokens)
# List to string
tokens_lem_str = ' '.join(tokens_lem_list)
# Print the polarity of the string
print(TextBlob(tokens_lem_str).sentiment.polarity)
Со следующим выводом:
0.22727272727272727
Process finished with exit code 0
Поэтому я хочу удалить токены «test» и «positive», если они используются вместе, и заменить их словом «ill». Должен ли я использовать цикл, или это только поглотит мои вычислительные мощности при большом объеме текста?
Большое спасибо за вашу помощь!
Комментарии:
1. Каков ваш точный вопрос? О коде, который нужно изменить
positive test
илиtest positive
наdisease
, или о проблеме временной сложности?2. Скорее первое. Но я решил это. Спасибо за ваше сообщение. 🙂
Ответ №1:
Я решил свою проблему следующим образом:
# Producing a loop which finds "positive" and "negative" tested string entries
matches_positive = ["test", "positive"]
matches_negative = ["test", "negative"]
replaced_testing_term_sentence = []
for sentence_lem in sentences_list_lem:
# Constrain to replace "positive tested" by "not healthy"
if all(x in sentence_lem for x in matches_positive):
sentence_lem = [word.replace("positive", "not healthy") for word in sentence_lem]
sentence_lem.remove("test")
replaced_testing_term_sentence.append(sentence_lem)
# Constrain to replace "negative tested" by "not ill"
elif all(x in sentence_lem for x in matches_negative):
sentence_lem = [word.replace("negative", "not ill") for word in sentence_lem]
sentence_lem.remove("test")
replaced_testing_term_sentence.append(sentence_lem)
# Constrain to remain not matching sentences in the data sample
else:
replaced_testing_term_sentence.append(sentence_lem)
Он выполняет свою работу. Выбранные условия замены выбраны намеренно. Если кто-нибудь видит потенциал для оптимизации, я был бы признателен за комментарий.