首页 > 解决方案 > 针对大量字符串查找字符串相似度的快速方法?

问题描述

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

我在 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 匹配以确保更相关的相似性?速度是这里的重中之重,我会提前处理拼写错误和词干等问题。

标签: pythonstringnlpsimilarity

解决方案


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

为此,我建议您参考这个问题的答案:如何使用 word2vec 通过给出 2 个单词来计算相似度距离?


推荐阅读