我在EXCEL / SQL表中有一个列样本数据,如下所示。 想要分组类似的记录。 excel或sql中的解决方案应该没问题。
GOPAL
Ramesh
A.GOPAL
SRINIVAS
Ramesh Reddy
G.SRINVIASA RAO
预期的输出可能会对相似性进行排序
GOPAL
A.GOPAL
Ramesh
Ramesh Reddy
SRINIVAS
G.SRINVIASA RAO
或
GOPAL Group1
A.GOPAL Group1
Ramesh Group2
Ramesh Reddy Group2
SRINIVAS Group3
G.SRINVIASA RAO Group3
答案 0 :(得分:1)
这不是一个评论而是一个完整的答案,但可能会引导你朝着正确的方向前进。
您必须定义一个比较两个字符串的相似性度量,并返回一个量化它们之间相似性的值。例如,请参阅A better similarity ranking algorithm for variable length strings。如何实现在SQL查询中使用它取决于您正在使用的DBMS。您还必须建立此度量标准的阈值,并将其定义为“足够接近”。
然后你可以写一个像这样的SQL查询:
select
a_val as group,
b_val as stringval
from
(
select
a_val,
b_val,
similarity
from
(
select
a.stringval as a_val,
b.stringval as b_val,
sim_metric(a.stringval, b.stringval) as similarity
from
stringlist as a,
stringlist as b
where
b.stringval >= a.stringval
) as sim
where
similarity > similarity_threshold
) as grp
order by
a_val;
其中sim_metric()
是您的相似度函数,similarity_threshold
是您选择的阈值。每组相似名称中的一个名称用作组名。