在PHP中匹配名称

时间:2014-04-18 08:29:57

标签: php match product string-matching

我有一个包含产品名称的庞大数据库。在将新产品插入数据库之前,我希望将产品与数据库匹配,以查明是否已存在(即获取相同或非常相似的条目的ID)相同,但有不同的描述,例如:

  • iphone 4s
  • i-phone 4s
  • iphone-4

我不需要automatically匹配这些条目,我只想生成匹配建议,然后让它们受到监督。

我对此有一些想法。关于我想要在数据库中找到相关条目的单个产品名称,例如" apple iphone-4s"。我的数据库看起来像:

  1. iphone-4
  2. galaxy s4
  3. iphone 3g
  4. apple nano
  5. 三星任何4s

    1. 替换" - ",","等特殊字符。等空间(Apple iphone-4s - > apple iphone 4s),然后将字符串分解为array('iphone', '4s'),然后循环遍历此数组中的每个条目,并将其与数据库中的一个产品名称匹配并计算总点击次数。结果:匹配apple iphone 4s< => array('apple', 'iphone', '4s')

      • iphone-4s提供2次点击
      • galaxy s4提供0次点击
      • iphone 3g给出了1次点击
      • apple nano给出了1次点击
      • samsung anything 4s给出了1次点击
    2. 对大多数匹配的匹配进行排序,即iphone-4s最有可能与主管建议匹配。

    3. 可能作为补充,从已存储在数据库中的名称中删除所有空格和特殊字符是有意义的,因为以下情形:我的新产品名称可以是apple iphone,并且存储的数据库名称将是例如。是apple i-phone。因此,只有一个而不是两个。从已存储的字符中删除每个非字母数字字符可能会增加命中率。在此示例中,存储的数据库条目将变为appleiphone,因此在爆炸新产品名称apple iphone之后,将会有两次点击。
    4. 作为另一个补充,我想到可能会在匹配它们之前从所有名称中删除颜色等东西,因为我不关心它们而且我想要匹配两种产品,无论它们具有哪种颜色。 ..
    5. 你有更好的想法吗?

1 个答案:

答案 0 :(得分:2)

您可能需要考虑levenshtein距离函数:

http://www.php.net/manual/en/function.levenshtein.php

这是自然文本搜索引擎用来获得与你输入的单词类似的结果。我不知道如何在mysql中支持这个,但我知道我在solr索引中使用得很好。希望这会有所帮助。