我有 3 个包含公司信息的不同数据集,在所有这些数据集中我都有公司名称,但并不完美:例如:
- 数据集 A:公司名称:Facebook
- 数据集 B:公司名称:Facebook, Inc
- 数据集 C:公司名称:facebook
存在一些其他信号,例如公司 url,但就名称匹配而言,想知道文本相似性是否是解决此分组问题的好方法。
我有 3 个包含公司信息的不同数据集,在所有这些数据集中我都有公司名称,但并不完美:例如:
存在一些其他信号,例如公司 url,但就名称匹配而言,想知道文本相似性是否是解决此分组问题的好方法。
似乎您希望首先使用共享密钥将数据集放在一起,在这种情况下是公司名称。这听起来不像是建模问题,而是数据争论问题。
假设每个数据集都在 csv 中,然后将它们放入 pandas 数据框:
df_a = pd.read_csv('data_set_a.csv')
然后假设您在 df_a、df_b、df_c 中有数据集,并且每个数据集都有一个“名称”列:
df_a.name = df_a.name.str.lower()
df_a.name = [i.split()[0] for i in df_a.name]
现在您将拥有一个数据集,其中三个都是“facebook”。然后可以将三个数据框合并为一个:
df = pd.merge(df_a, df_b, left_on='name', right_on='name')
df = pd.merge(df, df_c, left_on='name', right_on='name')
现在您已经合并了三个不同的数据集,并准备好进行分析。
您可以根据编辑距离考虑字符串相似度。例如:Levenshtein 距离
但是,您还需要针对字符串的前缀进行计算,而不仅仅是完整的字符串。(例如:将“Facebook”与“Facebook Inc.”进行比较)。还要在比较之前规范化字符串的大写(使它们全部小写等),并且可能还删除标点符号。
尝试上述一些方法,看看结果是否有意义,并相应地微调方法。使用其他元数据也会有所帮助。出现在公司名称周围的 URL 和上下文/主题词/实体将与公司相关联,并且可以帮助找到正确的分组。不过,这将涉及更多,因此如果更简单的方法还不够,您可能希望稍后再尝试。