python - 针对大量字符串查找字符串相似度的快速方法?
问题描述
我的目标是在给定输入字符串的情况下,找出一大串字符串中最相似的 10 个字符串。这是针对基于 Web 的 API,因此我需要非常快的响应时间(<100 毫秒是理想的)。
我在 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 匹配以确保更相关的相似性?速度是这里的重中之重,我会提前处理拼写错误和词干等问题。
解决方案
字符串相似度是 NLP 中的一个广泛主题,因此确定指标非常重要。fuzzywuzzy
使用适合处理拼写错误但不以任何方式处理语义相似性的Levenshtein 距离。从您所写的内容来看,这就是您要寻找的内容,因此我建议您通过gensim
库使用 Word2Vec 模型。
为此,我建议您参考这个问题的答案:如何使用 word2vec 通过给出 2 个单词来计算相似度距离?
推荐阅读
- asp.net - 如何通过 JSON 将数组传递给 asmx Web 服务?
- javascript - 使用带有复选框的 from 更新 firebase 中的值
- php - websile 访问时加载的文件是什么?
- java - 资源加载器路径属性的spring-boot 2.0.6速度视图问题
- c# - UTF-8 != 带有 NuSoap 和 C# 的 utf-8
- angular - Angular6 Promise 触发了两次
- indexing - 尝试使用索引修改字符串时出现语法错误
- azure - 在网络聊天中测试机器人不会返回回复。检查了许多可能的问题
- html - TypeError:无法读取未定义的属性“加入”
- python - 使用 Anaconda 在 Jupyter 笔记本中的 Scikitlearn