如何对同一文本样本中的不同主题/方面进行情感分析

时间:2018-12-17 12:35:22

标签: python nlp sentiment-analysis

假设我对以下顾客进行了评论,并且想了解有关酒店和食物的感想:

“我们得到的房间很好,但是食物很一般”

如果这是在评论数据框中,则分析结果将如下所示: Reviews Hotel Food The room was ... Pos Neg

我在Kaggle和Medium上遇到了多个教程,这些教程教授情感分析,但是他们总是寻找整体情感。

如果您知道方法,或者知道任何教程,或者知道谷歌用什么术语来解决此问题,请帮帮我。谢谢!

编辑:请参考以下内容: http://sentic.net/sentire2011ott.pdf 他们似乎是讲义。有谁知道相同的python实现?谢谢!

编辑:该问题与ABSA(基于方面的情感分析)有关

2 个答案:

答案 0 :(得分:2)

假设客户评论的长度为1-to-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.']

接下来,创建将评论ID链接到各个细分ID的数据集。因此,您的数据框列为:

review ID | segment ID | segment text | label
# label could be a numerical value
# (range -1 to +1) instead of -1 and +1

接下来,对各个细分受众群进行情感分析,然后将它们结合起来以获取每个评论的总体情感-基于与每个细分受众群ID关联的评论ID。

综合得分(非详尽列表)的几种选择:

  • 简单加法(在正负两部分数相等的情况下,这将产生中性得分)
  • 简单加权总和(段情感评分总和X标准化段长度)
  • 基于对片段的重要性的自定义分配的加权总和(片段情感分数之和X片段的归一化重要性)

希望对您有帮助。

答案 1 :(得分:0)

例如,您不能只在“组合”单词列表上拆分句子,例如“和,但是,而且...”,然后对拆分的每个部分进行标准分析吗? /> 假设/检查它们仍然构成完整的句子,因为您当然也可能遇到更困难的情况,例如“房间和我们得到的食物都很好”,您需要复制句子的结尾部分或得到一部分“两个房间都没有意义了。
但是无论如何,这句话只有一种情感……