php:单词邻近脚本?

好的 - 所以,我花了很长时间在谷歌搜索, 甚至在hotscripts等几个特定的​​搜索,几个PHP论坛和这个地方...没有(无论如何都没用)。 我希望能够获取一个文本块(页面/文件/ doc)并将其拉开以找到特定术语之间的“距离”(找到接近度/距离等)。 我认为至少会有一些这样的问题 - 但我找不到它们。 所以 - 它可能比我想象的更难。 我知道这可能是一种有点“饥饿”的事情 - 因为它可能在大型文件上相当密集 - 但肯定有可能吗? 事实上 - 虽然环顾四周 - 我找到的大多数参考文献(除了lamo-repeat SEO网站)似乎建议进行高级语言学研究,安装到服务器上的奇怪/高级软件包等。 我是否认为“接近”实际上是一个非常复杂的问题, 并需要大量的资源和大量的发展? (老实说 - 在我看来它似乎有点温和 - 所以我想知道它到底是什么我错过了(注意:相对意义上的简单......我会把它比较容易(密度/数量)到难度( word stemming / base / thesaurusing))。 所以 - 参考/建议/想法/想法???     
已邀请:
菲利克斯·克林评论说,我也想到了汉明距离。也许你可以制作一些变体,将你的单词编码为特定的代码字,然后通过一个包含你的代码字的数组来检查它们的距离。 因此,如果你有数组[11,02,85,37,11],你可以很容易地发现11在这个数组中最大距离为4。 不知道这是否适合你,但我想我会以类似的方式做到这一点。     
如果您正在谈论特定的单词比较,您将需要查看MySQL的SOUNDEX功能。 (我假设你可能正在使用mysql)。比较两个单词时,您可以参考它们的声音:
SELECT `word` FROM `list_of_words` WHERE SOUNDEX(`word`) = SOUNDEX('{TEST_WORD}');
然后,当你得到你的单词列表(很可能你会得到很多),你可以检查这些单词之间的距离是否为CLOSEST(或单词组取决于你如何编写代码)。
$word = '{WORD TO CHECK}';
$distance = 4; // the smalled the distance the closed the word
foreach($word_results as $comparison_word) {
   $distance = levenshtein($comparison_word, $word);
   if($distance < $threshold) {
      $threshold = $distance;
      $similar_word = $comparison_word;
   }
}
echo $similar_word;
希望能帮助您找到所需的方向。 快乐的编码!     
你的例子搜索了Word1 ... Word2,应该Word2 ... Word1也匹配?一个简单的解决方案是使用RegEx: 即: 使用正则表达式: bWord1 b(。*) bWord2 b 在第一个匹配组中,使用空格(或任何边界)将其拆分为数组,并计数 这是最直接的方法,但绝对不是最好的(即表现明智的)方法。如果您想要更具体的答案,我认为您需要澄清您的需求。 更新: 在两个问题合并之后,我看到其他答案提到soundex,levinstein和汉明距离等。我建议使用无线1来澄清要求,以便人们可以提供有用的帮助。如果这是一个与搜索或文档聚类相关的应用程序,我还建议您查看成熟的全文索引/搜索解决方案,如sphinx或lucene。我认为它们中的任何一个都可以与PHP一起使用。     

要回复问题请先登录注册