计算两个文本之间的距离。
项目描述
TextDistance
TextDistance -- 通过多种算法比较两个或更多序列之间距离的python库。
功能
- 30+算法
- 纯Python实现
- 简单使用
- 比较多个序列
- 某些算法在一个类中有多个实现。
- 可选的numpy使用以获得最大速度。
算法
基于编辑
算法 | 类 | 函数 |
---|---|---|
Hamming | Hamming |
hamming |
MLIPNS | MLIPNS |
mlipns |
Levenshtein | Levenshtein |
levenshtein |
Damerau-Levenshtein | DamerauLevenshtein |
damerau_levenshtein |
Jaro-Winkler | JaroWinkler |
jaro_winkler , jaro |
Strcmp95 | StrCmp95 |
strcmp95 |
Needleman-Wunsch | NeedlemanWunsch |
needleman_wunsch |
Gotoh | Gotoh |
gotoh |
Smith-Waterman | SmithWaterman |
smith_waterman |
基于标记
算法 | 类 | 函数 |
---|---|---|
Jaccard指数 | Jaccard |
jaccard |
索伦森-迪克系数 | 索伦森 |
sorensen , sorensen_dice , dice |
特弗斯指数 | 特弗斯 |
tversky |
重叠系数 | 重叠 |
overlap |
塔米托距离 | 塔米托 |
tanimoto |
余弦相似度 | 余弦 |
cosine |
蒙日-埃尔坎 | MongeElkan |
monge_elkan |
包距离 | 包 |
bag |
基于序列
算法 | 类 | 函数 |
---|---|---|
最长公共子序列相似度 | LCSSeq |
lcsseq |
最长公共子串相似度 | LCSStr |
lcsstr |
拉特克利夫-奥伯斯黑普相似度 | RatcliffObershelp |
ratcliff_obershelp |
基于压缩
归一化压缩距离,使用不同的压缩算法。
经典压缩算法
算法 | 类 | 函数 |
---|---|---|
算术编码 | ArithNCD |
arith_ncd |
RLE | RLENCD |
rle_ncd |
BWT RLE | BWTRLENCD |
bwtrle_ncd |
普通压缩算法
算法 | 类 | 函数 |
---|---|---|
平方根 | SqrtNCD |
sqrt_ncd |
熵 | EntropyNCD |
entropy_ncd |
正在开发中的算法,将两个字符串比较为位数组
算法 | 类 | 函数 |
---|---|---|
BZ2 | BZ2NCD |
bz2_ncd |
LZMA | LZMANCD |
lzma_ncd |
ZLib | ZLIBNCD |
zlib_ncd |
有关NCD的更多详细信息,请参阅博客文章。
音韵
算法 | 类 | 函数 |
---|---|---|
MRA | MRA |
mra |
编辑器 | 编辑器 |
editex |
简单
算法 | 类 | 函数 |
---|---|---|
前缀相似度 | 前缀 |
prefix |
后缀相似度 | 后缀 |
postfix |
长度距离 | 长度 |
length |
同一性相似度 | 同一性 |
identity |
矩阵相似度 | 矩阵 |
matrix |
安装
稳定
仅纯Python实现
pip install textdistance
带有额外库以获得最大速度
pip install "textdistance[extras]"
pip install "textdistance[benchmark]"
带有特定算法的额外功能
pip install "textdistance[Hamming]"
具有可用额外功能的算法:DamerauLevenshtein
,Hamming
,Jaro
,JaroWinkler
,Levenshtein
。
开发
通过pip
pip install -e git+https://github.com/life4/textdistance.git#egg=textdistance
或克隆存储库并安装一些额外功能
git clone https://github.com/life4/textdistance.git
pip install -e ".[benchmark]"
用法
所有算法都有2个接口
- 具有特定算法参数的类,用于自定义。
- 具有默认参数的类实例,用于快速简单使用。
所有算法都有一些公共方法
.distance(*sequences)
-- 计算序列之间的距离。.similarity(*sequences)
-- 计算序列的相似度。.maximum(*sequences)
-- 距离和相似度的最大可能值。对于任何序列:distance + similarity == maximum
。.normalized_distance(*sequences)
-- 序列之间的归一化距离。返回值是一个在0和1之间的浮点数,其中0表示相等,1表示完全不同。.normalized_similarity(*sequences)
-- 序列的归一化相似度。返回值是一个在0和1之间的浮点数,其中0表示完全不同,1表示相等。
最常见的初始化参数
qval
-- 将序列分割成q-gram的q值。可能的值- 1(默认)-- 按字符比较序列。
- 2或更多 -- 将序列转换为q-gram。
- None -- 按单词分割序列。
as_set
-- 对于基于令牌的算法- True --
t
和ttt
相等。 - False(默认)--
t
和ttt
不同。
- True --
示例
例如,汉明距离
import textdistance
textdistance.hamming('test', 'text')
# 1
textdistance.hamming.distance('test', 'text')
# 1
textdistance.hamming.similarity('test', 'text')
# 3
textdistance.hamming.normalized_distance('test', 'text')
# 0.25
textdistance.hamming.normalized_similarity('test', 'text')
# 0.75
textdistance.Hamming(qval=2).distance('test', 'text')
# 2
任何其他算法都有相同的接口。
文章
一些带有如何在现实世界中使用textdistance的示例的文章
额外库
对于主算法textdistance,如果可能的话,尝试调用已知的外部库(按速度排序优先),如果系统已安装且可用(此实现可以比较此类型的序列)。安装 textdistance,以使用此功能所需的额外功能。
您可以通过在初始化时传递external=False
参数来禁用此功能
import textdistance
hamming = textdistance.Hamming(external=False)
hamming('text', 'testit')
# 3
支持的库
算法
- DamerauLevenshtein
- Hamming
- Jaro
- JaroWinkler
- Levenshtein
基准测试
不安装额外功能
算法 | 库 | 时间 |
---|---|---|
DamerauLevenshtein | rapidfuzz | 0.00312 |
DamerauLevenshtein | jellyfish | 0.00591 |
DamerauLevenshtein | pyxdameraulevenshtein | 0.03335 |
DamerauLevenshtein | textdistance | 0.83524 |
Hamming | Levenshtein | 0.00038 |
Hamming | rapidfuzz | 0.00044 |
Hamming | jellyfish | 0.00091 |
Hamming | 距离 | 0.00812 |
Hamming | textdistance | 0.03531 |
Jaro | rapidfuzz | 0.00092 |
Jaro | jellyfish | 0.00191 |
Jaro | textdistance | 0.07365 |
JaroWinkler | rapidfuzz | 0.00094 |
JaroWinkler | jellyfish | 0.00195 |
JaroWinkler | textdistance | 0.07501 |
Levenshtein | rapidfuzz | 0.00099 |
Levenshtein | Levenshtein | 0.00122 |
Levenshtein | jellyfish | 0.00254 |
Levenshtein | pylev | 0.15688 |
Levenshtein | 距离 | 0.28669 |
Levenshtein | textdistance | 0.53902 |
总计:24个库。
是的,这很慢。仅在附加功能的情况下在生产中使用TextDistance。
Textdistance使用基准测试结果进行算法优化,并尝试首先调用最快速的外部库(如果可能)。
您可以在您的系统上手动运行基准测试
pip install textdistance[benchmark]
python3 -m textdistance.benchmark
TextDistance将基准测试结果表显示给您系统的系统,并将库优先级保存到TextDistance文件夹中的libraries.json
文件中。此文件将由textdistance用于调用最快的算法实现。默认的libraries.json已包含在包中。
运行测试
您只需要task。有关可用命令的列表,请参阅Taskfile.yml。例如,要运行包括第三方库使用的测试,请执行task pytest-external:run
。
贡献
欢迎PR!
- 发现bug了吗?修复它!
- 想要添加更多算法?当然可以!只需按照库中其他算法的相同接口实现它,并添加一些测试。
- 能让某事更快吗?太棒了!只需避免外部依赖,并记住一切不仅应该与字符串一起工作。
- 还有你认为好的其他东西吗?做吧!只需确保CI通过,以及README中的所有内容仍然适用(接口、功能等)。
- 没有时间编码?告诉你的朋友和订阅者关于
textdistance
。用户越多,贡献越多,功能越强大。
谢谢你 :heart
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
textdistance-4.6.3.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | MD5:d6dabc50b4ea832cdcf0e1e6021bd0c7fcd9ade155888d79bb6a3c31fce2dc6f |
|
MD5 | MD5:93fccec89ce84668b920bd8a293024d6 |
|
BLAKE2b-256 | BLAKE2b-256:016897ac72dd781301d6a52140066c68400c96f1a91f69737959e414844749b0 |
哈希值 for textdistance-4.6.3-py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | MD5:0cb1b2cc8e3339ddc3e0f8c870e49fb49de6ecc42a718917308b3c971f34aa56 |
|
MD5 | SHA-1:2d9f7629e856576ad8838da3e75cdf23 |
|
BLAKE2b-256 | SHA-256:c6c2c62601c858010b0513a6434b9be19bd740533a6e861eddfd30b7258d92a0 |