【发布时间】:2019-12-27 22:56:58
【问题描述】:
我的目标是在给定一个输入字符串的情况下,找出一大串字符串中最相似的 10 个字符串。这是针对基于 Web 的 API,因此我需要非常快的响应时间(
我在 Python 上进行操作,但如果有更好的方法来实现这一点(无论是通过 Bash 脚本还是其他语言),我可以很灵活。到目前为止,我已经尝试了多种方法,包括 difflib 和 fuzzywuzzy,但返回的结果要么太慢,要么没有返回理想的结果。
在我最近的实验中,使用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