python - 我如何计算文本中句子之间的 Levenshtein 距离
问题描述
我想计算一个文档中句子之间的 Levenshtein 距离。我找到了一个计算字符级距离的代码,但我希望它是字级的。比如这个字符级别的输出是6,但是我希望它是1,也就是说如果我们想把b改成a或a改成b,只需要删除一个词:</p>
a = "The patient tolerated this ."
b = "The patient tolerated ."
def levenshtein_distance(a, b):
if a == b:
return 0
if len(a) < len(b):
a, b = b, a
if not a:
return len(b)
previous_row = range(len(b) + 1)
for i, column1 in enumerate(a):
current_row = [i + 1]
for j, column2 in enumerate(b):
insertions = previous_row[j + 1] + 1
deletions = current_row[j] + 1
substitutions = previous_row[j] + (column1 != column2)
current_row.append(min(insertions, deletions, substitutions))
previous_row = current_row
print (previous_row[-1])
return previous_row[-1]
result = levenshtein_distance(a, b)
解决方案
我建议避免重新发明轮子,您可以使用 pylev https://pypi.org/project/pylev/
您只需pip install pylev
在控制台中执行命令即可安装它。然后使用单词而不是字母计算距离:
import pylev
a = "The patient tolerated this ."
b = "The patient tolerated ."
a = a.split(" ")
b = b.split(" ")
print(pylev.levenshtein(a,b))
请记住,此解决方案区分大小写,并假定所有单词都是空格剪切的。
推荐阅读
- exchange-server - 我是否需要询问 gcloud 支持以在 VPC 对等互连中启用交换自定义规则?
- html - SVG 图案图像的行为类似于“背景尺寸:封面”
- javascript - 发布功能不会发布值
- reactjs - 如何在功能组件 ReactJs 中使用 jQuery?
- xslt - 使用 XSLT 仅输出“wert”元素的 id 和值?
- rust - macro_rules!() 错误:修复“在 impl 项目上下文中使用 `my_macro!` 可能无效”?
- python - 按两次 GtkAboutDialog 不起作用
- html - 如何在css中正确插入图片
- c# - 为什么游戏有时会在 monogame/xna 中跳帧?
- amazon-web-services - 无法通过代码管道在代码管道操作 AWS CDK 上担任角色