比较名称之间的相似性

我需要基于名称对一些数据进行交叉验证。

我面临的问题是,根据来源的不同,名称会有轻微的变化,例如:

L & L AIR CONDITIONING   vs L & L AIR CONDITIONING ServiceBEST ROOFING vs ROOFING INC

我有数千条记录,手动处理将非常耗时,我希望尽可能自动化这个过程。

由于有额外的单词,仅仅将名称转换为小写是不够的。

处理这种情况有哪些好的算法?

也许可以计算相关性,给像’INC’或’Service’这样的词赋予较低的权重

编辑:

我尝试了difflib库

difflib.SequenceMatcher(None,name_1.lower(),name_2.lower()).ratio()

我用它得到了一个不错的结果。


回答:

我会使用余弦相似度来达到同样的效果。它会给你一个匹配分数,显示字符串的接近程度。

这里是帮助你实现的代码(我记得几个月前从Stackoverflow上获取了这个代码,现在找不到链接了)

我发现另一个版本稍微基于NLP,并且是我自己编写的,非常有用。

你可以调用get_similarityget_char_wise_similarity来看看哪个更适合你的用例。我使用了两种方法 – 普通相似度来筛选出非常接近的条目,然后字符级相似度来筛选出足够接近的条目。剩下的条目则需要手动处理。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注