计算两个文本之间的距离。

textdistance的Python项目详细描述


TextDistance logo

text距离徽标

Build StatusPyPI versionStatusCode sizeLicense

textdestance–用于比较两个或之间的距离的python库 多序列多算法。

功能:

  • 30多种算法
  • 纯python实现
  • 简单用法
  • 比较两个以上的序列
  • 有些算法在一个类中有多个实现。
  • 可选的使用最大速度。

算法

基于编辑

AlgorithmClassFunctions
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}$

基于令牌的

AlgorithmClassFunctions
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}$

基于序列的

AlgorithmClassFunctions
longest common subsequence similarity^{tt38}$^{tt39}$
longest common substring similarity^{tt40}$^{tt41}$
Ratcliff-Obershelp similarity^{tt42}$^{tt43}$

基于压缩的

Normalized compression distance 使用不同的压缩算法。

经典压缩算法:

AlgorithmClassFunction
Arithmetic coding^{tt44}$^{tt45}$
RLE^{tt46}$^{tt47}$
BWT RLE^{tt48}$^{tt49}$

常规压缩算法:

AlgorithmClassFunction
Square Root^{tt50}$^{tt51}$
Entropy^{tt52}$^{tt53}$

将两个字符串作为位数组进行比较的工作进行中算法:

AlgorithmClassFunction
BZ2^{tt54}$^{tt55}$
LZMA^{tt56}$^{tt57}$
ZLib^{tt58}$^{tt59}$

有关详细信息,请参见blog post 有关NCD的详细信息。

语音

AlgorithmClassFunctions
MRA^{tt60}$^{tt61}$
Editex^{tt62}$^{tt63}$

简单

AlgorithmClassFunctions
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]

与所有库(对于benchmarkingtesting):

pip install textdistance[benchmark]

具有特定算法的附加功能:

pip install textdistance[Hamming]

具有可用附加值的算法:DamerauLevenshteinHammingJaroJaroWinklerLevenshtein

偏差

通过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]

用法

所有算法都有两个接口:

  1. 使用特定于算法的参数初始化以进行自定义。
  2. 使用默认参数初始化实例,以便快速简单地使用。

所有算法都有一些常用方法:

  1. .distance(*sequences)–计算序列之间的距离。
  2. .similarity(*sequences)–计算序列的相似性。
  3. ^ TT81}$ -距离的最大可能值 相似性。对于任何序列:distance + similarity == maximum
  4. .normalized_distance(*sequences)–之间的标准化距离 顺序。返回值是介于0和1之间的浮点数,其中0表示 相等,完全不同。
  5. .normalized_similarity(*sequences)–的规范化相似性 顺序。返回值是介于0和1之间的浮点数,其中0表示 完全不同,1等于。

最常见的初始化参数:

  1. qval–将序列拆分为q-grams的q值。可能的 数值:
    • 1(默认)-按字符比较序列。
    • 2个或更多–将序列转换为Q-图。
    • 无-按单词拆分序列。
  2. as_set–对于基于令牌的算法:
    • 真-tttt相等。
    • false(默认值)–tttt不同。

示例

例如,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

支持的库:

  1. abydos
  2. Distance
  3. jellyfish
  4. py_stringmatching
  5. pylev
  6. python-Levenshtein
  7. pyxDamerauLevenshtein

算法:

  1. Dameraulevenshtein
  2. 汉明
  3. 雅罗
  4. Jarowinkler
  5. 左旋血红素

基准

无需额外安装:

algorithmlibraryfunctiontime
DamerauLeven shteinjellyfishdamerau_le venshtein_ distance0.00965 294
DamerauLeven shteinpyxdamerau levenshtei ndamerau_le venshtein_ distance0.15137 8
DamerauLeven shteinpylevdamerau_le venshtein0.76646 1
DamerauLeven shteintextdist anceDamerauLeve nshtein4.13463
DamerauLeven shteinabydosdamerau_le venshtein4.3831
HammingLevenshtei nhamming0.00144 28
Hammingjellyfishhamming_di stance0.00240 262
Hammingdistancehamming0.03625 3
Hammingabydoshamming0.03839 33
Hammingtextdist anceHamming0.17678 1
JaroLevenshtei njaro0.00313 561
Jarojellyfishjaro_dista nce0.00518 85
Jaropy_string matchingjaro0.18062 8
Jarotextdist anceJaro0.27891 7
JaroWinklerLevenshtei njaro_winkl er0.00319 735
JaroWinklerjellyfishjaro_winkl er0.00540 443
JaroWinklertextdist anceJaroWinkler0.28962 6
LevenshteinLevenshtei ndistance0.00414 404
Levenshteinjellyfishlevenshtein _distance0.00601 647
Levenshteinpy_string matchinglevenshtein0.25290 1
Levenshteinpylevlevenshtein0.56918 2
Levenshteindistancelevenshtein1.15726
Levenshteinabydoslevenshtein3.68451
Levenshteintextdist anceLevenshtein8.63674

总计:24 Libs。

是啊,太慢了。在生产中仅对附加项使用textddistance。

textDistance将Benchmark的结果用于算法优化和 尝试先调用最快的外部库(如果可能)。

您可以在系统上手动运行基准测试:

pip install textdistance[benchmark]
python3 -m textdistance.benchmark

textDistance显示系统的基准测试结果表并保存 在textdestance的libraries.json文件中的库优先级 文件夹。此文件将由textDistance用于呼叫最快的 算法实现。默认 libraries.json已包含在 包裹。

测试

您可以通过tox

运行测试
sudo pip3 install tox
tox

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在reducer中迭代自定义可写组件时出现java问题   属性文件中属性的java命名约定   任务链关闭的java Executor服务   java从Eclipse中的字段生成多个构造函数   java通过继承读取Json   java在不知道密钥的情况下解析json   java camel cxf如何在电子邮件中发送soap请求响应   java程序似乎跳过了if语句的一部分,在移回正确位置之前先移到else语句   测试简单的Java加密/解密inputFileName不存在   java从Jenkins REST API获取所有作业的所有构建的构建细节   java基本包装器和静态“类型”类对象   在WebSphere8.5上部署java代码   java对象相等(对象引用“=”)   java MongoDB整型字段到枚举的转换   每次我重新导入gradle时,IntelliJ都会不断重置Java设置   类型使用键或索引从Java中的数据类型检索值   在Java的列表接口中需要listIterator()和iterator()是什么?