php:单词邻近脚本?

时间:2011-04-03 18:44:41

标签: php word proximity

好的 - 所以,我花了很长时间在谷歌搜索, 甚至在hotscripts等几个特定的​​搜索,几个PHP论坛和这个地方...没有(无论如何都没用)。

我希望能够获取一个文本块(页面/文件/ doc)并将其拉开以找到特定术语之间的“距离”(找到接近度/距离等)。

我认为至少会有一些这样的问题 - 但我找不到它们。 所以 - 它可能比我想象的更难。 我知道这可能是一种有点“饥饿”的事情 - 因为它可能在大型文件上相当密集 - 但肯定有可能吗?

事实 - 在环顾四周时 - 我发现的大多数参考文献(除了lamo-repeat SEO网站)似乎都建议先进的语言学研究,安装到服务器上的奇怪/高级软件包等。

我是否认为“接近”实际上是一个非常复杂的问题, 并需要大量的资源和大量的发展? (老实说 - 在我看来它似乎有点温和 - 所以我想知道它到底是什么我错过了(注意:相对意义上的简单......我会把它比较容易(密度/数量)到难度( word stemming / base / thesaurusing))。

所以 - 参考/建议/想法/想法???

3 个答案:

答案 0 :(得分:0)

我还想到了汉明的距离,菲利克斯·克林评论道。也许您可以制作一些变体,将单词编码为特定的代码字,然后通过包含代码字的数组检查它们的距离。

因此,如果你有数组[11,02,85,37,11],你可以很容易地发现11在这个数组中最大距离为4。

不知道这对你有用,但我想我会以类似的方式做到这一点。

答案 1 :(得分:0)

如果您正在谈论特定的单词比较,您将需要查看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;

希望能帮助您找到所需的方向。

快乐的编码!

答案 2 :(得分:0)

你的例子搜索了Word1 ... Word2,Word2也应该匹配Word1吗?一个简单的解决方案是使用RegEx:

即:

  1. 使用正则表达式:\ bWord1 \ b(。*)\ bWord2 \ b
  2. 在第一个匹配组中,使用空格(或任何边界)将其拆分为数组,并计算
  3. 这是最直接的方法,但绝对不是最好的(即表现明智的)方法。如果您想要更具体的答案,我认为您需要澄清您的需求。

    更新

    在合并2个问题之后,我看到其他答案提到soundex,levinstein和汉明距离等。我建议使用无线1来澄清要求,以便人们可以提供有用的帮助。如果这是一个与搜索或文档聚类相关的应用程序,我还建议您查看成熟的全文索引/搜索解决方案,如sphinx或lucene。我认为其中任何一个都可以与PHP一起使用。