计算两个文本之间的距离。
textdistance的Python项目详细描述
text距离徽标
textdestance–用于比较两个或之间的距离的python库 多序列多算法。
功能:
- 30多种算法
- 纯python实现
- 简单用法
- 比较两个以上的序列
- 有些算法在一个类中有多个实现。 可选的使用最大速度。
算法
基于编辑
Algorithm | Class | Functions |
---|---|---|
Hamming | ^{tt1}$ | ^{tt2}$ |
MLIPNS | ^{tt3}$ | ^{tt4}$ |
Levenshtein | ^{tt5}$ | ^{tt6}$ |
Damerau-Levenshtein | ^{tt7}$ | ^{tt8}$ |
Jaro-Winkler | ^{tt9}$ | ^{tt10}$, ^{tt11}$ |
Strcmp95 | ^{tt12}$ | ^{tt13}$ |
Needleman-Wunsch | ^{tt14}$ | ^{tt15}$ |
Gotoh | ^{tt16}$ | ^{tt17}$ |
Smith-Waterman | ^{tt18}$ | ^{tt19}$ |
基于令牌的
Algorithm | Class | Functions |
---|---|---|
Jaccard index | ^{tt20}$ | ^{tt21}$ |
Sørensen–Dice coefficient | ^{tt22}$ | ^{tt23}$, ^{tt24}$, ^{tt25}$ |
Tversky index | ^{tt26}$ | ^{tt27}$ |
Overlap coefficient | ^{tt28}$ | ^{tt29}$ |
Tanimoto distance | ^{tt30}$ | ^{tt31}$ |
Cosine similarity | ^{tt32}$ | ^{tt33}$ |
Monge-Elkan | ^{tt34}$ | ^{tt35}$ |
Bag distance | ^{tt36}$ | ^{tt37}$ |
基于序列的
Algorithm | Class | Functions |
---|---|---|
longest common subsequence similarity | ^{tt38}$ | ^{tt39}$ |
longest common substring similarity | ^{tt40}$ | ^{tt41}$ |
Ratcliff-Obershelp similarity | ^{tt42}$ | ^{tt43}$ |
基于压缩的
Normalized compression distance 使用不同的压缩算法。
经典压缩算法:
Algorithm | Class | Function |
---|---|---|
Arithmetic coding | ^{tt44}$ | ^{tt45}$ |
RLE | ^{tt46}$ | ^{tt47}$ |
BWT RLE | ^{tt48}$ | ^{tt49}$ |
常规压缩算法:
Algorithm | Class | Function |
---|---|---|
Square Root | ^{tt50}$ | ^{tt51}$ |
Entropy | ^{tt52}$ | ^{tt53}$ |
将两个字符串作为位数组进行比较的工作进行中算法:
Algorithm | Class | Function |
---|---|---|
BZ2 | ^{tt54}$ | ^{tt55}$ |
LZMA | ^{tt56}$ | ^{tt57}$ |
ZLib | ^{tt58}$ | ^{tt59}$ |
有关详细信息,请参见blog post 有关NCD的详细信息。
简单
Algorithm | Class | Functions |
---|---|---|
Prefix similarity | ^{tt64}$ | ^{tt65}$ |
Postfix similarity | ^{tt66}$ | ^{tt67}$ |
Length distance | ^{tt68}$ | ^{tt69}$ |
Identity similarity | ^{tt70}$ | ^{tt71}$ |
Matrix similarity | ^{tt72}$ | ^{tt73}$ |
安装
稳定
只有纯python实现:
pip install textdistance
额外库的最大速度:
pip install textdistance[extras]
与所有库(对于benchmarking和 testing):
pip install textdistance[benchmark]
具有特定算法的附加功能:
pip install textdistance[Hamming]
具有可用附加值的算法:DamerauLevenshtein,Hamming, Jaro,JaroWinkler,Levenshtein。
偏差
通过PIP:
pip install -e git+https://github.com/orsinium/textdistance.git#egg=textdistance
或者克隆repo并安装一些附加组件:
git clone https://github.com/orsinium/textdistance.git pip install -e .[benchmark]
用法
所有算法都有两个接口:
- 使用特定于算法的参数初始化以进行自定义。
- 使用默认参数初始化实例,以便快速简单地使用。
所有算法都有一些常用方法:
- .distance(*sequences)–计算序列之间的距离。
- .similarity(*sequences)–计算序列的相似性。
- ^ TT81}$ -距离的最大可能值 相似性。对于任何序列:distance + similarity == maximum。
- .normalized_distance(*sequences)–之间的标准化距离 顺序。返回值是介于0和1之间的浮点数,其中0表示 相等,完全不同。
- .normalized_similarity(*sequences)–的规范化相似性 顺序。返回值是介于0和1之间的浮点数,其中0表示 完全不同,1等于。
最常见的初始化参数:
- qval–将序列拆分为q-grams的q值。可能的
数值:
- 1(默认)-按字符比较序列。
- 2个或更多–将序列转换为Q-图。
- 无-按单词拆分序列。
- as_set–对于基于令牌的算法:
- 真-t和ttt相等。
- false(默认值)–t和ttt不同。
示例
例如,Hamming distance:
importtextdistancetextdistance.hamming('test','text')# 1textdistance.hamming.distance('test','text')# 1textdistance.hamming.similarity('test','text')# 3textdistance.hamming.normalized_distance('test','text')# 0.25textdistance.hamming.normalized_similarity('test','text')# 0.75textdistance.Hamming(qval=2).distance('test','text')# 2
任何其他算法都有相同的接口。
附加库
对于主要算法,textDistance尝试调用已知的外部库 (最快优先)如果可用(安装在系统中)并且可能 (此实现可以比较这类序列)。 InstalltextDistance和此功能的附加功能。
可以通过在init:
importtextdistancehamming=textdistance.Hamming(external=False)hamming('text','testit')# 3
支持的库:
算法:
- Dameraulevenshtein
- 汉明
- 雅罗
- Jarowinkler
- 左旋血红素
基准
无需额外安装:
algorithm | library | function | time |
---|---|---|---|
DamerauLeven shtein | jellyfish | damerau_le venshtein_ distance | 0.00965 294 |
DamerauLeven shtein | pyxdamerau levenshtei n | damerau_le venshtein_ distance | 0.15137 8 |
DamerauLeven shtein | pylev | damerau_le venshtein | 0.76646 1 |
DamerauLeven shtein | textdist ance | DamerauLeve nshtein | 4.13463 |
DamerauLeven shtein | abydos | damerau_le venshtein | 4.3831 |
Hamming | Levenshtei n | hamming | 0.00144 28 |
Hamming | jellyfish | hamming_di stance | 0.00240 262 |
Hamming | distance | hamming | 0.03625 3 |
Hamming | abydos | hamming | 0.03839 33 |
Hamming | textdist ance | Hamming | 0.17678 1 |
Jaro | Levenshtei n | jaro | 0.00313 561 |
Jaro | jellyfish | jaro_dista nce | 0.00518 85 |
Jaro | py_string matching | jaro | 0.18062 8 |
Jaro | textdist ance | Jaro | 0.27891 7 |
JaroWinkler | Levenshtei n | jaro_winkl er | 0.00319 735 |
JaroWinkler | jellyfish | jaro_winkl er | 0.00540 443 |
JaroWinkler | textdist ance | JaroWinkler | 0.28962 6 |
Levenshtein | Levenshtei n | distance | 0.00414 404 |
Levenshtein | jellyfish | levenshtein _distance | 0.00601 647 |
Levenshtein | py_string matching | levenshtein | 0.25290 1 |
Levenshtein | pylev | levenshtein | 0.56918 2 |
Levenshtein | distance | levenshtein | 1.15726 |
Levenshtein | abydos | levenshtein | 3.68451 |
Levenshtein | textdist ance | Levenshtein | 8.63674 |
总计:24 Libs。
是啊,太慢了。在生产中仅对附加项使用textddistance。
textDistance将Benchmark的结果用于算法优化和 尝试先调用最快的外部库(如果可能)。
您可以在系统上手动运行基准测试:
pip install textdistance[benchmark] python3 -m textdistance.benchmark
textDistance显示系统的基准测试结果表并保存 在textdestance的libraries.json文件中的库优先级 文件夹。此文件将由textDistance用于呼叫最快的 算法实现。默认 libraries.json已包含在 包裹。