gpt4 book ai didi

python - Python 中的高性能模糊字符串比较,使用 Levenshtein 或 difflib

转载 作者:IT老高 更新时间:2023-10-28 21:05:48 43 4
gpt4 key购买 nike

我正在进行临床信息规范化(拼写检查),其中我将每个给定的单词与 900,000 个单词的医学词典进行核对。我更关心时间复杂度/性能。

我想做模糊字符串比较,但不确定使用哪个库。

选项 1:

import Levenshtein
Levenshtein.ratio('hello world', 'hello')

Result: 0.625

选项 2:

import difflib
difflib.SequenceMatcher(None, 'hello world', 'hello').ratio()

Result: 0.625

在这个例子中,两者都给出了相同的答案。您认为在这种情况下两者的表现是否相同?

最佳答案

如果您对 Levenshtein 和 Difflib 相似性的快速直观比较感兴趣,我计算了大约 230 万本书的标题:

import codecs, difflib, Levenshtein, distance

with codecs.open("titles.tsv","r","utf-8") as f:
title_list = f.read().split("\n")[:-1]

for row in title_list:

sr = row.lower().split("\t")

diffl = difflib.SequenceMatcher(None, sr[3], sr[4]).ratio()
lev = Levenshtein.ratio(sr[3], sr[4])
sor = 1 - distance.sorensen(sr[3], sr[4])
jac = 1 - distance.jaccard(sr[3], sr[4])

print diffl, lev, sor, jac

然后我用 R 绘制了结果:

enter image description here

出于好奇,我还比较了 Difflib、Levenshtein、Sørensen 和 Jaccard 的相似度值:

library(ggplot2)
require(GGally)

difflib <- read.table("similarity_measures.txt", sep = " ")
colnames(difflib) <- c("difflib", "levenshtein", "sorensen", "jaccard")

ggpairs(difflib)

结果: enter image description here

Difflib/Levenshtein 的相似性确实很有趣。

2018 年编辑:如果您正在努力识别相似的字符串,您还可以查看 minhashing——有一个 great overview here . Minhashing 擅长在线性时间内发现大型文本集合中的相似性。我的实验室在此处组装了一个应用程序,该应用程序使用 minhashing 检测和可视化文本重用:https://github.com/YaleDHLab/intertext

关于python - Python 中的高性能模糊字符串比较,使用 Levenshtein 或 difflib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690739/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com