我正在处理大量名称数据,其中发生了以下事件:
在一个流中,数据以“Sung”提交,在另一个流“Snug”中,我最初的想法是将Sung和Snug转换为每个字符等于数字的位置,然后总和将是相同的,所以甚至如果他们横向一个角色,我就能适当地解决这些问题。
另一个是在一个流中它以“Lillly”而不是“Lilly”在另一个流中出现的位置。我想弄清楚如何模糊匹配这些,以便我可以识别它们。我不确定这是否可以在Oracle中使用。
我正在处理数百万个数据点,并试图弄清楚如何编写这些分类存储桶,这样我就可以在发现人们真正不同的人而不是文职人员的主要任务中停止这么大的噪音错误。
任何想法都会非常感激。
答案 0 :(得分:0)
这种距离的常用量度称为Levenshtein距离(Wikipedia here)。它测量两个字符串之间的“编辑”距离 - 将一个字符串转换为另一个字符串所需的编辑操作次数。
这是个好消息。更好的消息是Oracle甚至在UTL_MATCH库中有一个实现。
坏消息是数百万个数据点真的非常昂贵。不幸的是,我无法帮助你那么多。一个想法是确定哪些名称“足够接近”,因为它们已经共享一定的最小字符数。
另一种方法是将字符串转换为它们的声音。这称为soundex。您可以将两者结合使用 - 假设您的名字主要是英语(soundex算法是由美国人口普查局发明的,因此它最适合美国的名字)。