Как заменить токены, если они используются вместе?

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

Он выполняет свою работу. Выбранные условия замены выбраны намеренно. Если кто-нибудь видит потенциал для оптимизации, я был бы признателен за комментарий.