跳转到主要内容

使用Jaro和Jaro-Winkler相似度进行快速近似字符串匹配的库

项目描述

JaroWinkler

Continous Integration PyPI package version Python versions
GitHub license

JaroWinkler是一个用于计算Jaro和Jaro-Winkler相似度的库。它易于使用,性能远超所有替代方案,并设计为与RapidFuzz无缝集成。

:zap: 快速入门

>>> from jarowinkler import *

>>> jaro_similarity("Johnathan", "Jonathan")
0.8796296296296297

>>> jarowinkler_similarity("Johnathan", "Jonathan")
0.9037037037037037

🚀 基准测试

实现基于一种新的方法来使用位并行计算Jaro-Winkler相似度。这比其他库中使用的原始方法快得多。以下基准测试显示了与jellyfish和python-Levenshtein的性能差异。

Benchmark JaroWinkler

⚙️ 安装

您可以使用pip从PyPI安装此库

pip install jarowinkler

JaroWinkler为所有常见平台提供二进制轮。

源构建

对于源构建(例如从SDist打包的),您只需要一个C++14兼容的编译器。如果您愿意,您可以直接从GitHub安装。

pip install git+https://github.com/maxbachmann/JaroWinkler.git@main

📖 使用

JaroWinkler中的任何算法不仅可以用字符串使用,还可以用于任何可哈希对象的任意序列

from jarowinkler import jarowinkler_similarity


jarowinkler_similarity("this is an example".split(), ["this", "is", "a", "example"])
# 0.8666666666666667

因此,只要两个对象具有相同的哈希值,它们就被视为相似。您可以为您的自定义对象实例提供__hash__方法。

class MyObject:
    def __init__(self, hash):
        self.hash = hash

    def __hash__(self):
        return self.hash

jarowinkler_similarity([MyObject(1), MyObject(2)], [MyObject(1), MyObject(2), MyObject(3)])
# 0.9111111111111111

所有算法都提供了一个score_cutoff参数。此参数可以用于过滤出不良匹配。内部上,这允许JaroWinkler在某些地方选择更快的实现

jaro_similarity("Johnathan", "Jonathan", score_cutoff=0.9)
# 0.0

jaro_similarity("Johnathan", "Jonathan", score_cutoff=0.85)
# 0.8796296296296297

JaroWinkler 可以与 RapidFuzz 一起使用,它提供了多种方法来计算输入集合上的字符串度量。JaroWinkler 实现了 RapidFuzz 的 C-API,这使得 RapidFuzz 可以在不添加 Python 的一般开销的情况下调用函数,从而使它更快。

from rapidfuzz import process

process.cdist(["Johnathan", "Jonathan"], ["Johnathan", "Jonathan"], scorer=jarowinkler_similarity)
array([[1.       , 0.9037037],
       [0.9037037, 1.       ]], dtype=float32)

👍 贡献

欢迎 PR(Pull Requests)!

  • 发现了一个错误?请以问题的形式报告它,甚至更好的是修复它!
  • 能否使某些事情更快?太好了!只需避免外部依赖,并记住现有的功能仍然应该工作。
  • 你认为还有什么好的想法?去做吧!只需确保 CI 通过,并且 README 中的所有内容仍然适用(接口、功能等)。
  • 没有时间编码?告诉你的朋友和订阅者关于 JaroWinkler。用户越多,贡献越多,功能越强大。

谢谢 :heart

⚠️ 许可证

版权 2021 - 2023 maxbachmannJaroWinkler 是免费和开源软件,根据 MIT 许可证 许可。

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定该选择哪一个,请了解有关 安装包 的更多信息。

源分布

jarowinkler-2.0.1.tar.gz (6.4 kB 查看哈希值)

上传时间

构建分布

jarowinkler-2.0.1-py3-none-any.whl (5.6 kB 查看哈希值)

上传时间 Python 3

由以下机构支持