python - Python 的缩写检测
问题描述
我正在尝试衡量公司名称的相似性,但是在尝试匹配这些名称的缩写时遇到了困难。例如:
IBM
The International Business Machines Corporation
我曾尝试使用fuzzywuzzy
来衡量相似度:
>>> fuzz.partial_ratio("IBM","The International Business Machines Corporation")
33
>>> fuzz.partial_ratio("General Electric","GE Company")
20
>>> fuzz.partial_ratio("LTCG Holdings Corp","Long Term Care Group Inc")
39
>>> fuzz.partial_ratio("Young Innovations Inc","YI LLC")
33
您是否知道任何技术来衡量此类缩写的更高相似性?
解决方案
对于上面的示例集,这似乎产生了更好的结果:
from fuzzywuzzy import fuzz, process
companies = ['The International Business Machines Corporation','General Electric','Long Term Care Group','Young Innovations Inc']
abbreviations = ['YI LLC','LTCG Holdings Corp','IBM','GE Company']
queries = [''.join([i[0] for i in j.split()]) for j in companies]
for company in queries:
print(company, process.extract(company, abbreviations, scorer=fuzz.partial_token_sort_ratio))
这产生:
TIBMC [('IBM', 100), ('LTCG Holdings Corp', 50), ('YI LLC', 29), ('GE Company', 20)]
GE [('GE Company', 100), ('LTCG Holdings Corp', 50), ('YI LLC', 0), ('IBM', 0)]
LTCG [('LTCG Holdings Corp', 100), ('YI LLC', 50), ('GE Company', 25), ('IBM', 0)]
YII [('YI LLC', 80), ('LTCG Holdings Corp', 33), ('IBM', 33), ('GE Company', 33)]
对 for 循环的小修改:
for query, company in zip(queries, companies):
print(company, '-', process.extractOne(query, abbreviations, scorer=fuzz.partial_token_sort_ratio))
给出:
The International Business Machines Corporation - ('IBM', 100)
General Electric - ('GE Company', 100)
Long Term Care Group - ('LTCG Holdings Corp', 100)
Young Innovations Inc - ('YI LLC', 80)
推荐阅读
- html - 输入类型复选框不适用于标签标签
- elasticsearch - 通过非映射/可搜索的对象属性有效地对结果进行排序
- angular - 检测设备/桌面和重定向
- javascript - 如何使用通过 Javascript 检索的 JSON 数据设置 CSS
- javascript - 在计算输入到 textarea 中的字符数时包括换行符
- java - 如何在没有 Java 的纯 Kotlin 中实现接口 null vs throw dispatch
- r - 比较R中多个时间序列的间隔
- flutter - 如何制作一个 100% 父宽度的行,其中有 2 个孩子,其中第二个孩子位于屏幕宽度的中心
- vue.js - 如何在 IP 地址上启动 nuxt 项目
- c# - IdentityServer4 LocalApi 与 .NET Core 3.1 中的自定义策略