我们有一个包含公司名称和其他特征的大表(> 30M行)。
数据:
Company_id Type Name Adress (more...)
497651684 8 Big mall Toys'rUs BigMall adress
468468486 1 McDonnnals WhateverStreet
161684314 8 Toys R Us Another street
546846846 1 BgKing BigMall2 adress
484984988 5 IKEA store103 Other Mall
489616848 5 Mss Duty Addrs
484984984 5 Pull&Bear Adrss
468484867 5 Zara store Adress2
(...)
从该表中,我们已经确定了大约300个公司组,其名称可以通过以下方式轻松规范化:
if type is (8,10,85,2)
and
(
contains name ("toys","us")
or
stringDistance name("toys R us") < (X)
)
new name is "Toys 'R us"
if type is (1,90,7)
and
(contains name("donalds")
or
stringDistance name("mcdonalds") < (X)
)
new name is "Mc donalds"
(...)
我不确定什么是最好的方法。我们之前采用了一种特殊方法,采用较小的集合,并采用更简单的逻辑来实现快速解决方案。但是这次我想知道什么是理想的方式。
答案 0 :(得分:0)
字符串编辑距离,例如stringDistance名称(“玩具R我们”)&lt; (X)是一个很好的方法,我还建议尝试使用聚类,尤其是层次聚类。
属于同一群集的所有名称都应具有相同的标准公司名称。为了使上述工作,你将不得不切割层次结构的树状图(http://en.wikipedia.org/wiki/Dendrogram)非常接近叶子。您将不得不尝试群集的不同功能(用于计算距离或相似性的功能)以获得合适的集合。示例可以将每个公司名称表示为字符向量,然后使用余弦相似度来测量距离。顺便说一句,余弦相似性对文本很有用。