【问题标题】:Which algorithm to match most similar string from a set?哪种算法可以匹配集合中最相似的字符串?
【发布时间】:2018-06-22 11:13:18
【问题描述】:

假设我有一个包含书名的图书数据库。对于来自 eBay 或 Craigslist 或其他类似网站的给定列表,我想将其标题字符串与我数据库中的所有书名进行比较,以尝试找到匹配项。

不太可能存在完全相等的字符串,因为这些网站上的用户喜欢在其列表标题中包含“完美状态”和“快速发货”等内容以吸引买家。

我应该使用什么算法来进行这种类型的关联?我知道 n-gram 和 Levenshtein 距离,但我不知道哪个会做最准确的工作。

对于各种适用的算法,它们的计算性能比较如何?使用多种算法并平均它们的结果以平衡它们的优势和劣势是否有意义?是否可以设置最低置信水平?我宁愿没有比赛也不愿质量很差的比赛。

【问题讨论】:

    标签: string algorithm language-agnostic levenshtein-distance n-gram


    【解决方案1】:

    对于手头的任务,我认为您会通过一些预处理获得最佳结果:删除常见的“空”短语(那些您不想看到的),这样您的标题可能会更小以实际标题作为主要部分。

    下一步取决于您的数据库大小和请求开销。如果这些价格不贵,那么从您的数据库中提取标题列表,并查看 eBay 文本中存在哪些标题(多种语言的单个命令)。如果这对您有用,那么即使是这种预处理也可能是不必要的开销。

    如果完整的数据库列表很昂贵,但数据库的索引很好,那么尝试从 eBay 文本中抓取可能的 n-gram(例如,2-3 个单词),并在数据库中搜索它们。您应该得到相对较少的返回值,然后您可以尝试 in toto 与完整的 eBay 文本进行匹配。

    【讨论】:

    • 我不知道。我怀疑 in toto 是否真的可以在没有进一步处理的情况下工作,例如将所有内容更改为相同的大小写并剥离前导和后续空格。还用一个空格替换多个相邻的空格。但这就是我试图用算法解决的问题。在大多数情况下,我应该能够找到一个相当接近的匹配。哪种算法最适合我的用例定义“接近度”?
    • LCS 怎么样——最长公共子串。这肯定已经在 SO 和其他地方在线上解决了足够多的时间。
    猜你喜欢
    • 2015-08-05
    • 2010-09-08
    • 2016-04-19
    • 1970-01-01
    • 2010-12-24
    • 2015-04-14
    • 1970-01-01
    • 2017-12-23
    • 2023-01-12
    相关资源
    最近更新 更多