计算两个文本之间的距离。
项目描述
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 |