通过下划线将句子中的否定词与下一个词相关联

时间:2011-10-26 20:11:51

标签: php regex nlp tokenize

我正在尝试计算网站上的正面评价数量。请考虑以下字符串:

$str_1 = "This is great";
$str_2 = "This is not great after all";
$str_3 = "That isn't good and I will not return to this store.";

他们的意思相反。在自动分类中,大多数分类器(简单地计算句子中正数词的数量)将$ str_2和3计为正数。我希望通过将“not”与“great”,“is not”与“good”而不是“return”链接来规避此错误,如下所示:

$str_1 = "This is great";
$str_2 = "This is not_great after all";
$str_3 = "That isn't_good and I will not_return to this store.";

我开始通过对字符串进行标记:

$tokens = explode("", $str_3);

但我不知道该怎么办。如何将“否定”(“不”,“不是”)后面的单词与下一个单词相关联?这不是更好用的正则表达式吗?

3 个答案:

答案 0 :(得分:2)

我不确定这个答案会非常有用,我担心......如果你真的想在论坛上对帖子的情绪进行分类,这是一个非常难的问题。你提出的建议会让你有一些方法,但是英语(和其他语言)的复杂程度要高得多,而这并没有考虑到。例如:

  • 我不是在开玩笑:这个产品很糟糕
  • 我不能推荐这款产品
  • 我不推荐这个产品

等。换句话说,在一些简单的情况下寻找一个带有否定的正面词会起作用,但在许多其他情况下则不行。我想你会想要一个更复杂的方法。如果您有大量的训练数据(即手动分类的评论),您可以使用神经网络或分类器,如SVM或朴素的贝叶斯分类器。

我怀疑如果你继续使用正则表达式方法,你会发现你会永远添加例外和特殊情况,它最终会变得非常复杂,只会在50%的情况下起作用。对不起,我不能更积极!

答案 1 :(得分:0)

“模式”系统也可能有助于情绪分析:

答案 2 :(得分:0)

这可能是您需求的开始。

https://github.com/JWHennessey/phpInsight