【问题标题】:Barcode scan ingredient alias sorting条码扫描成分别名排序
【发布时间】:2015-01-28 19:43:15
【问题描述】:

我为一个允许通过条形码扫描将成分加载到数据库中的应用工作。我们遇到的一个问题是同一种成分有许多别名。例如,一种植物可能有所有这些不同的别名':

JOJOBA OIL
JOJOBA OIL (BUXUS CHINENSIS)
JOJOBA OIL (HYDROGENATED)
JOJOBA OILS
JOJOBA OIL (SIMMONDSIA CHINENSIS)
JOJOBA OIL (SIMONDSIA CHINENSIS)
JOJOBA SEED EXTRACT
(JOJOBA) SEED OIL
JOJOBA SEED OIL
JOJOBA SEED OIL]
JOJOBASEED OIL
JOJOBA SEED OILJOJOBA
JOJOBA SEED OIL (JOJOBA)
JOJOBA SEED OIL (SIMMONDSIA CHINENSIS)
JOJOBA SEED POWDER
JOJOBA (SIMMONDSIA CHINENSIS) EXTRACT (REPLENISHING COMPLEX)
JOJOBA (SIMMONDSIA CHINENSIS)OIL
JOJOBA (SIMMONDSIA CHINENSIS) OIL
JOJOBA (SIMMONDSIA CHINENSIS) OIL (SAPONIFIED)
JOJOBA (SIMMONDSIA CHINENSIS) SEED OIL
JOJOBA WAX (BUXUS CHINENSIS)
JOJOBO SEED OIL

所有这些别名'都将链接到相同的成分,但大多数时候,我们必须手动添加它。对于植物,没有标准化的命名方式,因此通常会发现许多不同的别名。如果有办法我们可以使用部分名称来自动链接成分,那就太好了。 感谢您阅读本文。

【问题讨论】:

    标签: barcode scanning


    【解决方案1】:

    如果不知道您所针对的技术或您已经拥有的数据,很难推荐一些东西。从您的示例数据看来,您可能的匹配项具有相同的前缀(如果您对数据进行规范化以删除括号)。

    如果您正在使用应用程序代码,您可以构建确定性非循环有限状态自动机(有时也称为 DAWG)。 Wikipedia 这将允许您非常快速地执行前缀(或稍加调整的中缀)搜索。您可以组合一个字符串度量(如 Levenshtein 距离)以允许拼写错误或成分名称之间的细微差异。 Steve Hanov 有一系列关于尝试和 DAWG 的博客文章。这是关于 DAWG 的帖子 (http://stevehanov.ca/blog/index.php?id=115)。

    我已经成功地使用这种技术在数百万条记录中以亚秒级的性能找到匹配项。

    如果您正在寻找一种数据库方法,大多数 DBMS 都有一个对全文索引进行操作的 CONTAINS 函数。

    也许如果您提供更多信息,我们可以提供更具体的答案。

    【讨论】:

      【解决方案2】:

      毫无疑问,您有一个表格,其中包含单个成分名称作为键。只需在此表中添加一列“成分交叉引用”即可。

      每当您添加新成分时,只需将“成分交叉引用”设置为新的正数报告添加,这样您就可以获得(记录#:成分:交叉引用)

      127 JOJOBA OIL      21
      311 JOJOBA OILS     57
      

      例如。确定您的“标准”名称,并将交叉引用编号更改为(- 标准编号)

      127 JOJOBA OIL      21
      311 JOJOBA OILS     -21
      

      那么,每当您找到“JOJOBA OILS”时,由于交叉引用是否定的,您可以通过显而易见的方式找到标准名称。

      这可以扩展。例如,您可能会在不同的市场(国家甚至地区)中将相同的成分称为不同的东西。例如,在澳大利亚,“辣椒”在美国就是“甜椒”

      您只需进入主表

      551 Capsicum         32
      306 Bell Pepper      -32
      

      并且在 region:usage:reference 的辅助表中

      US               32      306
      Aus              32      551
      

      如果在此首选项表中有一个条目,那么对于具有 abs(cross-reference) 32 的成分,那么对于美国市场使用记录 306 或对于澳大利亚市场使用记录 551。 如果没有入场,那么这两个市场使用相同的术语。

      (但似乎更多的是关于数据库设计而不是条形码扫描......)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-14
        • 2014-01-11
        • 1970-01-01
        相关资源
        最近更新 更多