我们有两个数据集
一组S1包含有关产品的一些信息,有2列(如下:ProductName, C2
),有50万行。
其他集合具有唯一产品的主列表,称为S2,具有2列(ProductActualName, ProductCode, C3
)和1000行。
我们要在S1.ProductName和S2.ProductActualName上连接/映射这两个数据集, 这两个列永远不会通过字符串匹配来匹配。由于S1是从多个不同的来源中提取的,因此S1.ProductName列中的产品名称可以用不同的词来表示,其中包含足够的信息供人类识别来自主数据的正确产品并将其唯一地标记为主数据列表中的名称之一S2。
例如:
在S2.ProductActualName中找到的Audi R8 20mg
可以用S1.ProductName中的以下词语之一表达
3221 R8 Audi 20
Audi R8 Audi 20mg
AUDI R 8 20 mg
AUDI R8 20
AUDIR8 20
and so on ...
基本上可能是人类可读的组合
当前的解决方案和存在的问题:我们使用基于相似度算法的字符串相似度库。这样,获得的结果只有60-70%的准确度,然后手动检查以纠正错误。提取的行数大约为500K,手动检查它很容易出错,并且非常繁琐且耗时。因为这需要每月进行。
一些匹配行的示例:
The first column is the name extracted from different sources. Matched product name is after matching it with the master list. Sample data attached in email.
这是示例数据集的链接:https://docs.google.com/spreadsheets/d/1XxenDkLQYvWqus0wlEB5Uz1bs0r8iRuTGxw0S18lB38/edit?usp=sharing
预先感谢
答案 0 :(得分:0)
我了解您的“机器学习问题”正在将两个数据帧连接到一个不完全相同的字符串列中。
要计算字符串相似度,我将使用Levenshtein Distance。在水母库中,您可以找到更多的字符串距离,并选择更方便的解决方法。
多做一些NLP,我的第一个想法是尝试Latent Dirichlet Allocation。这将需要更多的工程设计,而且我不确定是否会比简单的Levenshtein距离提供更好的结果。