0

好的 - 所以,我花了很长时间在谷歌搜索,甚至在 hotscripts 等、几个 php 论坛和这个地方进行了一些特定的搜索......什么都没有(反正没用)。

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

我原以为周围至少会有一些这样的事情 - 但我没有找到它们。所以 - 这可能比我想象的要难。我知道这可能有点“饥饿”——因为它可能对大型文档相当密集——但肯定有可能吗?

事实上 - 在环顾四周时 - 我发现的大多数参考资料(除了 lamo-repeat SEO 网站)似乎暗示了高级语言研究、安装到服务器上的奇怪/高级软件包等。

我是否可以假设“接近”实际上是一个非常复杂的问题,并且需要大量的资源和大量的开发?(老实说 - 在我看来它似乎有点温和 - 所以我想知道我到底错过了什么(注意:相对意义上的简单......我会将它与简单(密度/计数)到困难进行比较(词干/基础/词库使用))。

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

4

3 回答 3

0

如果您正在谈论特定的单词比较,您将需要查看 MySQL 的 SOUNDEX 函数。(我假设你可能正在使用 mysql)。比较两个词时,您可以参考它们的发音:

SELECT `word` FROM `list_of_words` WHERE SOUNDEX(`word`) = SOUNDEX('{TEST_WORD}');

然后当你得到你的单词列表(很可能你会得到很多)时,你可以检查这些单词之间的距离,找出最接近的单词(或一组单词,取决于你如何编写代码)。

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

希望能帮助你找到你正在寻找的方向。

快乐编码!

于 2011-04-03T19:47:34.033 回答
0

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

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

不知道这是否对你有用,但我想我会以类似的方式来做。

于 2011-04-03T19:24:50.730 回答
0

您的示例搜索 Word1 ... Word2,Word2 ... Word1 是否也应匹配?一个简单的解决方案是使用 RegEx:

IE:

  1. 使用正则表达式:\bWord1\b(.*)\bWord2\b
  2. 在第一个匹配组中,使用空格(或任何边界)将其拆分为一个数组,然后计数

这是最直接的方法,但绝对不是最好的(即性能方面)方法。如果您想要更具体的答案,我认为您需要澄清您的需求。

更新:

合并 2 个问题后,我看到其他答案提到 soundex、levinstein 和 hamming 距离等。我建议 theclueless1 澄清要求,以便人们提供有用的帮助。如果这是一个与搜索或文档聚类相关的应用,我也建议你看看成熟的全文索引/搜索解决方案,如 sphinx 或 lucene。我认为它们中的任何一个都可以与 PHP 一起使用。

于 2011-04-07T07:14:52.020 回答