Oracle 两个符号之间的相似性

Oracle 两个符号之间的相似性,oracle,plsql,similarity,fuzzy,sentence-similarity,Oracle,Plsql,Similarity,Fuzzy,Sentence Similarity,表中的行数超过300万个名称(姓名、姓氏、父亲姓名)。我想检查90%以上的相似性。 我使用了许多模糊算法和utl_匹配相似性(jaro_winkler,edit_distance)这些算法的性能不好。(超过20秒。) 我想换个地方看看,但效果很好。比如: 姓名姓氏父亲姓名, 姓名父亲姓名姓氏, 姓父名, ......... 我找不到任何性能好的算法,它在事务系统上工作您不需要每次都检查300万个名称,因为您的数据库中有重复的名称。你也可以做的是将你的条目以最远的距离进行预聚类,然后使用不同的入口

表中的行数超过300万个名称(姓名、姓氏、父亲姓名)。我想检查90%以上的相似性。 我使用了许多模糊算法和utl_匹配相似性(jaro_winkler,edit_distance)这些算法的性能不好。(超过20秒。) 我想换个地方看看,但效果很好。比如: 姓名姓氏父亲姓名, 姓名父亲姓名姓氏, 姓父名, .........
我找不到任何性能好的算法,它在事务系统上工作

您不需要每次都检查300万个名称,因为您的数据库中有重复的名称。你也可以做的是将你的条目以最远的距离进行预聚类,然后使用不同的入口点

因此,在第一步中,创建您的入口点:

Miller
Smith
Yang
...

然后用>检查这个入口点,例如70%,然后深入到您有一个非常好匹配的集群。这将删除大部分搜索,并使您的算法更快

这听起来像是您可能首先希望在Oracle之外离线处理的事情。看看哪些工具/算法工作得很好,然后如果您真的需要针对生产数据库执行此操作,请稍后再来担心。感谢您的建议,现在这不是问题,但我正在尝试改进您使用的Oracle版本是什么?如果是11gR2或更高,您应该查看Oracle文本的名称搜索扩展。这将执行得很好,但不幸的是需要定时同步,因此它可能不适合事务性应用程序。在过度抱怨它太慢之前,想想你让Oracle做的任务。没有某种预处理(参见@Thomas的建议),您要求它对3M行执行3M行;这是9万亿(900000000000)的比较。在你抱怨的3次时间里,仍然是每秒250万次比较。这是惊人的快-只是巨大的体积。你需要减少音量@保护者一个名字检查300万,而不是3 mil x 3 mil。感谢评论,但没有重复的名字。我用了sundex和jaro winkler,好多了