好的 - 所以,我花了很长时间在谷歌搜索, 甚至在hotscripts等几个特定的搜索,几个PHP论坛和这个地方...没有(无论如何都没用)。
我希望能够获取一个文本块(页面/文件/ doc)并将其拉开以找到特定术语之间的“距离”(找到接近度/距离等)。
我认为至少会有一些这样的问题 - 但我找不到它们。 所以 - 它可能比我想象的更难。 我知道这可能是一种有点“饥饿”的事情 - 因为它可能在大型文件上相当密集 - 但肯定有可能吗?
事实 - 在环顾四周时 - 我发现的大多数参考文献(除了lamo-repeat SEO网站)似乎都建议先进的语言学研究,安装到服务器上的奇怪/高级软件包等。
我是否认为“接近”实际上是一个非常复杂的问题, 并需要大量的资源和大量的发展? (老实说 - 在我看来它似乎有点温和 - 所以我想知道它到底是什么我错过了(注意:相对意义上的简单......我会把它比较容易(密度/数量)到难度( word stemming / base / thesaurusing))。
所以 - 参考/建议/想法/想法???
答案 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:
即:
这是最直接的方法,但绝对不是最好的(即表现明智的)方法。如果您想要更具体的答案,我认为您需要澄清您的需求。
更新
在合并2个问题之后,我看到其他答案提到soundex,levinstein和汉明距离等。我建议使用无线1来澄清要求,以便人们可以提供有用的帮助。如果这是一个与搜索或文档聚类相关的应用程序,我还建议您查看成熟的全文索引/搜索解决方案,如sphinx或lucene。我认为其中任何一个都可以与PHP一起使用。