快速的方法来查找大量字符串的字符串相似性?

问题描述 投票:0回答:1

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

我正在使用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

虽然结果集中有相关的关键字,但是不相关的关键字(“ couples”)我知道,由于较大的字符串集之间的编辑距离较大,因此更好的结果被忽略了原始查询。例如。 “生日优惠券”,“超市优惠券”

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

python string nlp similarity
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.