Если предположить, что отзывы клиентов состоят из 1 к N предложений, часть из которых рассматривает несколько элементов (например, комната была отличной, но персонал был груб ), вы можете захотеть высказатьсяанализ отдельных сегментов текста (разделенных пунктуацией и конъюнкциями).
Это потребует сочетания методов предварительной обработки, которые будут разбивать рецензируемый текст на предложения, а также конъюнкции (, такие какно, и т. д. ).
Пример кода
Во-первых, токенизация предложения,
Предполагая, что текст обзора был « Хороший центральный отель.Номер был отличным, но персонал был грубым.Очень легко добраться с центральной станции ”
>>> from nltk.tokenize import sent_tokenize
>>> sentences = sent_tokenize(review_text)
>>> sentences
[“Nice central hotel.”,
“Room was great but the staff were rude.”,
“Very easy to reach from the central station.”]
Далее, разделив на несколько соединений,
import re
def split_conj(text):
return map(str.strip, re.sub('(but|yet)', "|", text).split('|'))
segments = []
for sent in sentences:
segments.extend(split_conj(sent))
Обратите внимание, что вам потребуется выполнить дополнительную предварительную обработку наsegments
, который (на основе примера текста обзора) выглядит как
['Nice central hotel.',
'Room was great',
'the staff were rude.',
'Very easy to reach from the central station.']
Затем создайте свой набор данных, связывающий идентификатор обзора с идентификаторами отдельных сегментов.Итак, ваши столбцы данных:
review ID | segment ID | segment text | label
# label could be a numerical value
# (range -1 to +1) instead of -1 and +1
Затем выполните анализ настроений для отдельных сегментов, а затем объедините их, чтобы получить общее настроение для каждого отзыва - на основе идентификатора обзора, связанного с каждым идентификатором сегмента.
Несколько вариантов для объединения баллов (неисчерпывающий список):
- Простое добавление (в сценариях, где одинаковое количество положительных и отрицательных сегментов, это будетполучить нейтральную оценку)
- простая взвешенная сумма (сумма оценки настроения сегмента X нормализованная длина сегмента)
- взвешенная сумма на основе пользовательского присвоения важности сегментам (норма оценки настроения сегмента X нормализованнаяважность сегмента)
- и т. д.
Надеюсь, это поможет вам.