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

我正在尝试编写一个 Python 代码,使用依赖解析器对产品评论进行基于方面的情感分析。我创建了一个示例评论:

“音质很好,但电池寿命很差。”

输出为:[['soundquality', ['great']], ['batterylife', ['bad']]]

我可以正确地得到这句话的方面和形容词,但是当我将文本更改为:

“音质不是很好,但电池寿命还不错。”

输出仍然保持不变。如何向我的代码添加否定处理?有什么方法可以改善我目前所拥有的吗?


精慕HU
浏览 95回答 1
1回答

翻阅古今

您不妨尝试一下spacy。以下模式将捕获:名词短语后跟is或are可选地跟随not后面跟着一个形容词import spacyfrom spacy.matcher import Matchernlp = 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')]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python