Php 将句子中的否定词与下面的单词用下划线连接起来

Php 将句子中的否定词与下面的单词用下划线连接起来,php,regex,nlp,tokenize,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和$str_3将被大多数分类器算作阳性词(他们只计算句子中阳性词的数量)。我想通过将“不”与“伟大”、“不”与“良好”和“不”与“返回”链

我在统计一个网站上正面评论的数量。考虑以下字符串:

$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和$str_3将被大多数分类器算作阳性词(他们只计算句子中阳性词的数量)。我想通过将“不”与“伟大”、“不”与“良好”和“不”与“返回”链接来避免这个错误,如下所示:

$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);

但我不知道如何继续。如何将否定词(“not”、“is not”)后面的单词与下面的单词联系起来?正则表达式在这里不是更好用吗?

我不确定这个答案是否会很有用,恐怕。。。如果你真的想对论坛上帖子的情感进行分类,这是一个非常困难的问题。你的建议会给你带来一些帮助,但是英语(和其他语言)太复杂了,所以没有考虑到这一点。例如:

  • 我不是开玩笑:这个产品很烂
  • 我对这种产品的推荐度太高了
  • 我不能推荐这种产品
换句话说,在一些简单的情况下,在否定之前寻找一个肯定的词会起作用,但在很多其他情况下不会起作用。我想你需要一个更复杂的方法。如果你有大量的训练数据(即手动分类的评论),你可以使用神经网络或分类器,比如SVM或朴素贝叶斯分类器

我怀疑,如果你继续使用regex方法,你会发现你将永远添加异常和特殊情况,结果会非常复杂,并且只在50%的情况下有效。对不起,我再积极不过了

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

  • 比利时选举,2010年6月13日-推特意见挖掘


这可能是满足您需求的开始


我想这更可能是一个机器学习的案例。正则表达式可能是您试图完成的任务的一个组成部分,但正如所指出的,它可能不够。作为一个示例句,我想补充一句:这毕竟不是坏事。你应该考虑否定结构的肯定句。谢谢你的快速回复。我也有同样的保留意见,但我所说的所有评论都来自Twitter消息。因此,它们的最大长度为140个字符。这将至少消除你所谈论的部分问题。而且,这是第一次尝试,并不一定要完美。像“我不能高度推荐这种产品”这样的句子可能很少出现。不过,我不得不同意……再三考虑,正则表达式并不是最好的方法。你还有什么别的想法让我走吗?:)首先标记字符串(将其拆分为单词),然后使用信息检索技术(查找tf idf)确定哪些单词最重要,然后在查找表中查找它们的情绪(积极、消极、中性)。最后,你需要在主要情绪词之前寻找具体的否定词(“不”、“不能”、“不会”等)。我仍然有点怀疑,我担心,它将工作,即使是短信,但它值得一试!如果您确实有很多示例消息,请继续对其进行训练,直到它们完全正确为止(注意过度拟合)。