我不熟悉 Solr,我会在用户提交列表时实现“近乎重复”。有很多不同的算法可以检测像Jaccard Indexing这样的近似重复。
我做了一个小脚本来查看相似系数之间的差异:
<?php
$input1 = "Hello there, this is a test 1, you see it's almost the same";
$input2 = "Hello there, this is a test 2, you saw it, it's almost the same";
$input3 = "this is very different from the others, but who knows ?";
echo jackard($input1, $input1) . "<br />"; // results 1
echo jackard($input1, $input2) . "<br />"; // results 0.81481481481481
echo jackard($input1, $input3) . "<br />"; // results 0.25
echo jackard($input2, $input3); // results 0.24
function jackard($a, $b){
$a_arr = explode(" ", $a);
$b_arr = explode(" ", $b);
$intersect_a_b = array_intersect($a_arr,$b_arr);
return((count($intersect_a_b)/(count($a_arr)+count($b_arr)))*2);
}
?>
您可能会看到,如果结果为 1,则表示它是同一个句子,或者它以不同的顺序使用相同的单词。但是,值越小,“句子”就越独特。这是一个相当简单的实现。您可以设置一个限制值,例如 0.4。如果超过此限制,则将“请求”设置在队列中。然后手动查看清单。这不是“有效的”。但是我给了你这个想法,由你来开发一个更复杂和自动化的系统/算法。也许你也应该看看这里。