为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中进行基于方面的情感分析时需要有关否定处理的建议

在 Python 中进行基于方面的情感分析时需要有关否定处理的建议

精慕HU 2024-01-24 20:47:33
我正在尝试编写一个 Python 代码,使用依赖解析器对产品评论进行基于方面的情感分析。我创建了一个示例评论:“音质很好,但电池寿命很差。”输出为:[['soundquality', ['great']], ['batterylife', ['bad']]]我可以正确地得到这句话的方面和形容词,但是当我将文本更改为:“音质不是很好,但电池寿命还不错。”输出仍然保持不变。如何向我的代码添加否定处理?有什么方法可以改善我目前所拥有的吗?
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

您不妨尝试一下spacy。以下模式将捕获:

  • 名词短语

  • 后跟isare

  • 可选地跟随not

  • 后面跟着一个形容词

import spacy

from spacy.matcher import Matcher

nlp = spacy.load('en_core_web_sm')


output = []

doc = nlp('The product is very good')

matcher = Matcher(nlp.vocab)

matcher.add("mood",None,[{"LOWER":{"IN":["is","are"]}},{"LOWER":{"IN":["no","not"]},"OP":"?"},{"LOWER":"very","OP":"?"},{"POS":"ADJ"}])

for nc in doc.noun_chunks:

    d = doc[nc.root.right_edge.i+1:nc.root.right_edge.i+1+3]

    matches = matcher(d)

    if matches:

        _, start, end = matches[0]

        output.append((nc.text, d[start+1:end].text))

    

print(output)

[('The product', 'very good')]

或者,您可以使用依赖解析器中的信息来扩展匹配模式,这将添加形容词短语的定义:


output = []

matcher = Matcher(nlp.vocab, validate=True)

matcher.add("mood",None,[{"LOWER":{"IN":["is","are"]}},{"LOWER":{"IN":["no","not"]},"OP":"?"},{"DEP":"advmod","OP":"?"},{"DEP":"acomp"}])

for nc in doc.noun_chunks:

    d = doc[nc.root.right_edge.i+1:nc.root.right_edge.i+1+3]

    matches = matcher(d)

    if matches:

        _, start, end = matches[0]

        output.append((nc.text, d[start+1:end].text))

    

print(output)

[('The product', 'very good')]


查看完整回答
反对 回复 2024-01-24
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信