【问题标题】:Accurate algorithm for normalizing taxonomy terms?归一化分类术语的准确算法?
【发布时间】:2010-09-14 13:54:07
【问题描述】:

我正在开发一个购物比较网站,该项目处于非常先进的阶段。我们每天使用来自各种联盟网络的商家源为 5000 万种产品编制索引。我遇到的大部分问题都已经解决了,包括大部分性能瓶颈。

我的问题是什么:首先,我们将 apache solr 与 drupal 一起使用,但是,这个问题并不特定于 drupal 或 solr,如果您不了解它们,也没关系。

我们收到来自 2000 多个不同商家的产品供稿,而这些供稿一团糟。他们没有特定的模式,每个商家都以他们想要的方式发送提要。我们已经解决了许多与此相关的问题,但仍然存在一个问题。规范分面浏览功能的分类术语。

假设我的网站上有“Narrow by Brands”浏览方面。现在假设有 100 个商家提供 Microsoft 的产品。现在问题来了。一些商家在数据馈送“Microsoft”的“Brands”列中输入“Microsoft”,其他“Microsoft, Inc.”,其他“Microsoft Corporation”其他“Microsoft 产品”等......商家之间没有特定的模式,最坏的,有些个别商家太草率了,他们在同一个数据源中对同一个品牌有不同的字符串。

我们不希望所有这些不同的品牌出现在导航中。对于手动将导入品牌映射到“好”品牌表(“Microsoft Corporation”->“Microsoft”、“Products from Microsoft”->“Microsoft”等)的问题,我们有一个手动解决方案。我们在数据库中有大约 10,000 个品牌,这是可行的。问题是当它带有更大的东西时,比如“作者”。当我们将书籍导入系统时,有超过 800,000 位作者,我们遇到了同样的问题,而这不能通过手工映射来解决。问题是一样的:“Tom Mike Apostol”、“Tom M. Apostol”、“Apostol, Tom M.”等等……

有人知道以可接受的准确度(85%-95% 准确度)自动解决此问题的好方法吗?

感谢您的帮助!

【问题讨论】:

    标签: string taxonomy string-matching faceted-search


    【解决方案1】:

    我想到了一些想法,虽然这只是一个松散的想法:

    1. 将名称转换为首字母缩写(在您的示例中:TMA)。将“-”视为空格,所以 fe。 Antoine de Saint-Exupéry 将成为 ADSE。这里的问题是如何处理“,”,虽然,通常的用法是在姓氏之前有姓氏,所以只需交换位置就可以了(所以 A,TM 将是 TM,A,去掉逗号 - TMA)。
    2. 按姓名首字母过滤数据库中的作者
    3. 对于每个首字母,如果您有全名 (Tom, Apostol),请检查它是否匹配,否则 (M.) 会自动将其视为匹配。
    4. 如果您想要一些容忍度,您可以将名称与 Levenshtein 距离进行比较并容忍一些差异(here 你有 Oracle 实现)
    5. 与您相匹配的姓名被视为相同的作者,要查找全名,对于每个首字母 (T、M、A),您查找过滤后的作者(在第 2 步之后)并尝试找到一个没有首字母 (M .) 但使用全名 (Mike),如果找不到,请使用首字母。因此,您提供的每个示例都将转换为相同的值,即全名 (Tom Mike Apostol)。

    值得思考的事情:
    包括名称同义词的映射(最多可能有数百条记录,例如 Thomas Tom
    这种方式对于拥有有效的首字母至关重要(没有 M 而不是 N 等)。

    编辑:我前段时间编写过这样的代码,当我不得不通过签名来识别一个人时,忽略扫描问题,人们有时会用 Name S. Surname 或 N.S. 签名。或者只是姓氏(这是您在解决方案中可能应该考虑的另一件事,以允许算法忽略第二个名字,尽管在您的情况下,我猜很少会省略某人的第二个名字)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 2013-03-24
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2017-03-24
      相关资源
      最近更新 更多