找出一个公司名称是否与另一个公司名称非常相似-Python - python

我正在与大型企业数据库合作。

我希望能够比较两个公司名称的相似性,以查看它们是否可能重复。

以下是应该测试为具有很高重复可能性的商户名称列表,这是什么好方法?

乔治华盛顿中学
乔治华盛顿学校

东圣菲公司
东圣达菲

Chop't Creative Salad Co
非创意沙拉公司

曼尼和奥尔加的披萨
曼尼和奥尔加的披萨

雷的 hell 汉堡太
雷的 hell 汉堡

Solr
美国太阳报

奥尔尼艺术剧院中心
奥尔尼剧院

21 M休息室
21M休息室

华盛顿假日酒店
华盛顿乔治敦假日酒店

华盛顿特区/杜邦环岛Residence Inn酒店
杜邦环岛万豪原住客栈

吉米·约翰的美食三明治
吉米·约翰(Jimmy John's)

华盛顿特区奥姆尼肖勒姆酒店
奥姆尼肖勒姆酒店

参考方案

我最近完成了类似的任务,尽管我正在将新数据与数据库中的现有名称进行匹配,而不是在一组中查找重复项。名称匹配实际上是一项经过充分研究的任务,它具有许多超出通用字符串匹配范围的因素。

首先,我建议您看一下一篇论文,如何玩“名称游戏”:Raffo和Lhuillery比较不同启发式的专利检索。已发布的版本为here,并且PDF是免费提供的here。作者提供了一个不错的总结,比较了许多不同的匹配策略。他们考虑了三个阶段,称为解析,匹配和过滤。

解析包括应用各种清洁技术。一些例子:

  • 标准化字母大小写(例如,所有小写字母)
  • 标准化标点符号(例如,逗号后必须加空格)
  • 标准化空格(例如,将所有运行的空格转换为单个空格)
  • 标准化重音和特殊字符(例如,将重音字母转换为ASCII等价字符)
  • 标准化法律控制条款(例如,将“公司”转换为“公司”)

    就我而言,我将所有字母折叠成小写,将所有标点符号替换为空格,将重音符号替换为未重音的对应字符,移除所有其他特殊字符,并从列表后面的名称的开头和结尾删除法律控制术语。

    匹配是已解析名称的比较。这可以是简单的字符串匹配,编辑距离,Soundex或Metaphone,比较组成名称的单词集或比较字母或n-gram(长度为n的字母序列)。 n-gram方法实际上对名称非常好,因为它忽略了单词顺序,从而在“示例部门”与“示例部门”等方面提供了很多帮助。实际上,使用Jaccard index这样的简单比较两字组(2克,字符对)非常有效。与其他几个建议相比, Levenshtein距离是名称匹配中较差的方法之一。

    就我而言,我分两步进行匹配,首先比较已解析的名称是否相等,然后将Jaccard索引用于其余的双字母组。我没有实际计算所有名称对的所有Jaccard索引值,而是对两个给定大小的集的Jaccard索引的最大可能值设置了界限,并且仅在该上限足够高时才计算Jaccard索引,可能有用。大多数名称对仍然足够相似,无法匹配,但是大大减少了进行比较的次数。

    过滤是使用辅助数据来拒绝来自解析和匹配阶段的误报。一个简单的版本是查看匹配名称是否对应于不同城市的企业,从而对应于不同的企业。可以在匹配之前应用该示例,作为一种预过滤。此后可能会应用更复杂或更耗时的检查。

    我没有做太多过滤。我检查了各个国家的公司,看它们是否相同,仅此而已。数据中实际上没有太多的可能性,某些时间限制排除了对扩展数据进行大量搜索的任何广泛搜索,而且计划进行手动检查。

    Python GPU资源利用 - python

    我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

    Python:图像处理可产生皱纹纸效果 - python

    也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…

    Python uuid4,如何限制唯一字符的长度 - python

    在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…

    Python sqlite3数据库已锁定 - python

    我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

    python:ConfigParser对象,然后再阅读一次 - python

    场景:我有一个配置文件,其中包含要执行的自动化测试的列表。这些测试是长期循环执行的。   配置文件的设计方式使ConfigParser可以读取它。由于有两个三个参数,因此我需要通过每个测试。现在,此配置文件由script(s1)调用,并且按照配置文件中的列表执行测试。Script(s1)第一次读取配置,并且在每次测试完成后都会执行。阅读两次的要求:由于可能会…