【问题标题】:Fast way to look up String Similarity against a large list of strings?针对大量字符串查找字符串相似度的快速方法?
【发布时间】:2019-12-27 22:56:58
【问题描述】:

我的目标是在给定一个输入字符串的情况下,找出一大串字符串中最相似的 10 个字符串。这是针对基于 Web 的 API,因此我需要非常快的响应时间(

我在 Python 上进行操作,但如果有更好的方法来实现这一点(无论是通过 Bash 脚本还是其他语言),我可以很灵活。到目前为止,我已经尝试了多种方法,包括 difflibfuzzywuzzy,但返回的结果要么太慢,要么没有返回理想的结果。

在我最近的实验中,使用fuzzywuzzy 的解决方案返回了一个不理想的结果集。

“优惠券”的输入返回:

                     Query         Stem  Key compare  score
34046              copson       copson    1  coupon     83
35011           couponcom    couponcom    1  coupon     80
61206             groupon      groupon    1  coupon     77
5834          able coupon   abl coupon    1  coupon     75
124231        rjr coupons   rjr coupon    1  coupon     75
35026          couponscom   couponscom    1  coupon     75
34991             couples        coupl    1  coupon     73
34993   couples dominated  coupl domin    1  coupon     71
11236        arbys coupon  arbi coupon    1  coupon     71

虽然结果集中有相关的关键字,但不相关的关键字(“情侣”)我知道存在于大型字符串语料库中的更好结果被忽略了,因为它们之间的编辑距离更大和原始查询。例如。 “生日券”、“超市券”

是否有一种方法可以执行 n-gram 匹配来确保更相关的相似性?速度是这里的重中之重,我会提前处理拼写错误和词干等问题。

【问题讨论】:

  • 如果您正在寻找 n-gram 匹配,您是否测试过 ngram module 的性能是否适合您?如果不要求使用 n-gram,您如何定义“相关相似性”?

标签: python string nlp similarity


【解决方案1】:

字符串相似度是 NLP 中的一个广泛主题,因此确定指标非常重要。 fuzzywuzzy 使用 Levenshtein distance 适合处理拼写错误,但不以任何方式解决语义相似性问题。从您写的内容来看,这就是您要寻找的内容,因此我建议您通过 gensim 库使用 Word2Vec 模型。

为此我建议你参考这个问题的答案:How to use word2vec to calculate the similarity distance by giving 2 words?

【讨论】:

    猜你喜欢
    • 2012-06-30
    • 2011-03-20
    • 2015-02-07
    • 2020-12-09
    • 1970-01-01
    • 2021-10-12
    相关资源
    最近更新 更多