python - 将字符串与大句子进行比较并获得相似度百分比
问题描述
我正在尝试一个自我项目,即使有人输入了拼写错误的单词,程序也会将其与句子进行比较,然后根据文本相似度的百分比输出特定的百分比。
在在线搜索技术时,我遇到了许多算法(Levenshein 距离、汉明距离、Jaccard 相似度等)。还有 Difflib 和 Fuzzywuzzy 等 python 模块,但没有得到预期的输出
使用 Fuzzywuzzy:
process.extract("radisson",ds,scorer=fuzz.partial_ratio,limit=10)
上面的代码段会吐出预测的输出,但是如果我将查询中的一个字母更改如下:
process.extract("radison",ds,scorer=fuzz.partial_ratio,limit=10)
输出完全不同。找不到与“radison”相关的单词。
预期行为:
输入:
string = "radison"
text1 = "Hotel radison Palace"
text2 = "radison home"
text3 = "Hotel radis"
输出:
相似度百分比如下:
with text1 90%
with text2 100%
with text3 65%
解决方案
假设有一种比较两个词的相似性的方法(这是您使用 levenshtein、hamming 等的地方)以及一种将句子转换为单词序列的方法(str.split()
这是最基本的实现,或者您可以使用类似的东西ntlk.tokenize
),简单的实现是:
def similarity(w1:str, w2:str) -> float:
pass
def tokenize(sentence:str) -> [str]:
pass
def word_in_sentence(word:str, sentence:str) -> float:
return max(similarity(word, token) for token in tokenize(sentence))
推荐阅读
- oracle - 如何循环遍历listagg
- c# - 尝试测试隔离的 IQueryable 时出错
- testing - Elixir - Using variables in doctest
- html - 如何在 GoLand 或 PyCharm IDE 中打开与 html 文件相同的 .tmpl 文件?
- java - 在 DAO 中使用 JPA 实体图
- asp.net-identity - 在 Asp .net core 2 中使用电话号码或电子邮件注册
- camera - 如何设置平截头体正像摄影机 THREEJS
- python - 如何在 try/except 中停止程序
- checkbox - 如何在 C# 的面板控件中清除控件,即文本框、组合框、复选框等
- apache-nifi - Apache NiFi - 如何将属性添加/传递给处理器,而不是流文件