Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 判断两个句子有多相似的算法_Python_Algorithm_Parsing_Tree_Nlp - Fatal编程技术网

Python 判断两个句子有多相似的算法

Python 判断两个句子有多相似的算法,python,algorithm,parsing,tree,nlp,Python,Algorithm,Parsing,Tree,Nlp,我的一个朋友有一个想法,制作一个逐字显示单词的快速阅读程序(很像目前现有的快速阅读程序)。然而,该程序会过滤掉对意思不完全必要的单词(如果你想略读一些东西) 我已经开始实现这个程序了,但我不太确定去除“不重要”单词的算法应该是什么 我的想法是解析句子(我目前正在使用斯坦福解析器),并根据单词对句子意义的重要性为每个单词分配权重,然后开始删除权重最低的单词。我将继续这样做,检查原始树和新树有多“不同”。我将继续删除权重最低的单词,直到这两棵树太不一样为止(我将通过每个用户都要经历一次的“校准”过程

我的一个朋友有一个想法,制作一个逐字显示单词的快速阅读程序(很像目前现有的快速阅读程序)。然而,该程序会过滤掉对意思不完全必要的单词(如果你想略读一些东西)

我已经开始实现这个程序了,但我不太确定去除“不重要”单词的算法应该是什么

我的想法是解析句子(我目前正在使用斯坦福解析器),并根据单词对句子意义的重要性为每个单词分配权重,然后开始删除权重最低的单词。我将继续这样做,检查原始树和新树有多“不同”。我将继续删除权重最低的单词,直到这两棵树太不一样为止(我将通过每个用户都要经历一次的“校准”过程来确定一些常量)。最后,我将检查缩短句子中的每个单词,并尝试用该单词的更简单或更短的同义词替换它(同样,我仍在努力保留其价值)

此外,对于“the”、“a”和“of”等非常常见的词也会有特殊情况

例如:

“比利对简说,‘你想出去吗?’”

将成为:

“比利告诉简‘想出去吗?’”

这基本上保留了句子的全部意思,但却大大缩短了句子的长度


这对算法来说是个好主意吗?如果是的话,我应该如何分配权重,我应该使用什么树比较算法,并且在一个好的位置插入同义词(即,在我尝试删除任何单词之前是否应该插入同义词)?

分配权重是一个百万美元的问题。作为第一步,我将确定句子的部分(主谓从句等)和句子结构(简单复合词等),以找到权重最高的“锚”字。这将使任务的其余部分变得更容易。

您可以使用本文描述的方法计算两个句子的相似性:

您可以删除单词,直到与原始句子的相似性显著降低(这本身就是一个有趣的问题)


你也可以在这里查看这个简化版的相似性算法:

假设你使用单词嵌入作为加权逻辑,因为我想不出更好的方法,你可以将短语转换成向量并比较这些向量。 如a、an、the等轻量级单词将以这种方式很好地处理


本教程可能会对您有所帮助:

您是死心塌地地从头开始做这一切,还是使用NLTK或gensim等库还可以?我肯定会乐于使用其他库,如nltkThere is和链接副本。@PaulRooney tf idf和gensim能否很好地处理两个非常相似的句子?我原以为这是为了确定两个结构不同的句子是否相似?锚定词是不是最接近句子结构树的词根?这就是研究的目的。然而,凭直觉,我会说,句子的每个部分都会有一个主词,句子的某些部分会比其他部分更有意义——例如,主题的主词不能省略。因此,是的——如果你围绕这些想法构建一棵树,那么这些想法将减少算法以后需要做的工作量。此外,我认为尽早确定上下文并不是一个坏主意,因为相同的单词根据上下文会有不同的权重。