在两个序列之间找到最佳匹配元素对
项目描述
模糊序列匹配器
目的
在两个序列之间找到最佳匹配元素对。
每个元素最多只能使用一次,并且元素的顺序被保留。也就是说,如果X1 -> Y2,则X2不能匹配到Y1或Y2;它必须匹配到Y3或更高。这对于Y是X的杂乱或突变副本的序列是合适的。
示例
>>> from fuzzy_sequence_matcher.fuzzy_sequence_matcher import best_matches >>> from jellyfish import jaro_distance >>> declaration = "We hold these truths to be self evident".split() >>> degradation = ("I guess wee hold them tooths and stuff " ... "for being sort of evidence, y'know?").split() >>> best_matches(declaration, degradation, scorer=jaro_distance) [('We', 'wee'), ('hold', 'hold'), ('these', 'them'), ('truths', 'tooths'), ('to', 'for'), ('be', 'being'), ('self', 'sort'), ('evident', 'evidence,')]
功能
匹配任何您可以为其编写评分函数的对象
无外部依赖项(仅标准库)
评分函数
匹配是通过您指定的评分函数完成的。它看起来可能像
def score(element_from_seq1: Any, element_from_seq2: Any) -> float
高分数表示更好的匹配。
对于比较字符串,您可能使用 jellyfish.jaro_distance。对于比较数字,-abs(n1 - n2) 工作。
阈值
默认情况下,fuzzy_sequence_matcher找到所有配对的总分数之和最大的组合。但是,当一个序列比另一个序列长得多时,可能组合的数量会变得不切实际地大,以至于尝试所有这些组合。Python itertools 文档给出当 len(Y) >= len(X) 时的组合数如下
len(Y)! / len(X)! / (len(Y) - len(X))!
when len(Y) >= len(X).
此函数作为 fuzzy_sequence_matcher.n_combinations 公开。
如果可能的组合数量超过阈值(默认为1_000_000),这通常发生在长序列比短序列长15个或更多元素时,则将完全排除较长序列的元素,从与较短序列最佳匹配但最差的元素开始,直到n_combinations低于阈值。这可能导致的结果不是理想得分的匹配集。
免费软件:MIT许可
致谢
此包是用Cookiecutter和audreyr/cookiecutter-pypackage项目模板创建的。
感谢Dayton Dynamic Languages提供建议和头脑风暴
历史
0.1.0 (2019-12-14)
首次发布在PyPI上。
0.1.1 (2019-12-26)
允许处理参数不同的评分器。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
哈希 for fuzzy_sequence_matcher-0.1.1-py2.py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c425b44e54fec2f6abae3acbbcae11bb7fc27361a1f183d4515b4c67411900a5 |
|
MD5 | 9bdeda6cf2e70ca10ecb93f6b108fcaa |
|
BLAKE2b-256 | 00ed14f1224684296db00ac309330c98c76f73fe920c6c6bb8356e44bdd7c470 |