我有 50 000 多家公司的数据库,这些公司不断更新(每月 200 多家)。
重复内容是一个很大的问题,因为名称并不总是严格/正确的:
“超1店”
“超一店”
“ super 1 商店”
编辑:另一个例子..可能需要不同的方法:
“艾米的披萨”<--->“艾米和公司的有机披萨”
我们需要工具来扫描相似名称的数据。
我对 Levenshtein Distance 有一些经验和 LCS但如果 2 个字符串相似,它们可以很好地进行比较 ...
在这里我必须扫描 50 000 个名字可能是每个名字并在那里计算......总体相似性评级......
我需要如何解决这个问题的建议,预期结果是有一个包含 10-20 组非常相似名称的列表,并且可能会进一步调整灵敏度以获得更多结果。
最佳答案
大约一年前我遇到过类似的问题,如果我没记错的话,我(或多或少)解决了使用 similar_text
和 soundex
正如其他人在评论中所说.像这样:
<?php
$str1 = "Store 1 for you";
$str2 = "Store One 4 You";
similar_text(soundex($str1), soundex($str2), $percent);
if ($percent >= 66){
echo "Equal";
//Send an email for review
}else{
echo "Different";
//Proceed to insert in database
}
?>
在我的例子中使用 66% 的百分比来确定公司是相同的(在这种情况下不要插入数据库但发送电子邮件给我审查,并检查是否正确)。
使用这个解决方案几个月后,我决定为公司使用某种独特的代码(在我的例子中是 CIF,因为在西类牙这里的公司是独一无二的)。
关于php - 巨大列表中的相似名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211523/