不幸的是,在 PHP 中执行此操作非常昂贵(CPU 和内存利用率很高)。但是,您当然可以将该算法应用于小型数据集。
具体扩展如何创建服务器崩溃:几个内置的 PHP 函数将确定字符串之间的“距离”:levenshtein 和 similar_text。 p>
虚拟数据:(假装是新闻头条)
$titles = $titles = explode("\n", $titles );
此时,$titles 应该只是一个字符串数组。现在,创建一个矩阵并将每个标题与每个其他标题进行比较,以了解相似性。换句话说,对于 5 个标题,您将获得一个 5 x 5 矩阵(25 个条目)。这就是 CPU 和内存接收器所在的位置。
这就是为什么这种方法(通过 PHP)不能应用于数千个条目的原因。但如果你想:
$matches = array();
foreach( $titles 作为 $title ) {
$matches[$title] = array();
foreach( $titles as $compare_to ) {
$matches[$title][$compare_to] = levenshtein($compare_to, $title);
}
asort($matches[$title], SORT_NUMERIC);
}
此时,您基本上拥有的是一个带有“文本距离”的矩阵。在概念上(不是在实际数据中),它看起来有点像下表。请注意如何有一组 0 值沿对角线排列 - 这意味着在匹配循环中,两个相同的单词是 -- 嗯,相同的。
苹果 苹果 橙子 橙子 香蕉
苹果 0 1 5 6 6
苹果 1 0 6 5 6
橙色 5 6 0 1 5
橙子 6 5 1 0 5
香蕉 6 6 5 5 0
实际的 $matches 数组看起来像这样(截断):
数组
(
[苹果] => 数组
(
[苹果] => 0
[苹果] => 1
[橙色] => 5
[香蕉] => 6
[橙子] => 6
)
[苹果] => 数组
(
...
无论如何,您可以(通过实验)确定一个好的数值距离截断值可能最匹配的值 - 然后应用它。否则,请阅读 sphinx-search 并使用它——因为它确实有 PHP 库。
Orange,你很高兴你问这个问题?