Blazingly fast Word Matcher
Project description
Matcher Rust Implementation with PyO3 Binding
A high-performance, multi-functional word matcher implemented in Rust.
Designed to solve AND OR NOT and TEXT VARIATIONS problems in word/word_list matching. For detailed implementation, see the Design Document.
Features
- Multiple Matching Methods:
- Simple Word Matching
- Regex-Based Matching
- Similarity-Based Matching
- Text Normalization:
- Fanjian: Simplify traditional Chinese characters to simplified ones.
Example:
蟲艸
->虫草
- Delete: Remove specific characters.
Example:
*Fu&*iii&^%%*&kkkk
->Fuiiikkkk
- Normalize: Normalize special characters to identifiable characters.
Example:
𝜢𝕰𝕃𝙻𝝧 𝙒ⓞᵣℒ𝒟!
->hello world!
- PinYin: Convert Chinese characters to Pinyin for fuzzy matching.
Example:
西安
->/xi//an/
, matches洗按
->/xi//an/
, but not先
->/xian/
- PinYinChar: Convert Chinese characters to Pinyin.
Example:
西安
->xian
, matches洗按
and先
->xian
- Fanjian: Simplify traditional Chinese characters to simplified ones.
Example:
- AND OR NOT Word Matching:
- Takes into account the number of repetitions of words.
- Example:
hello&world
matcheshello world
andworld,hello
- Example:
无&法&无&天
matches无无法天
(because无
is repeated twice), but not无法天
- Example:
hello~helloo~hhello
matcheshello
but nothelloo
andhhello
- Customizable Exemption Lists: Exclude specific words from matching.
- Efficient Handling of Large Word Lists: Optimized for performance.
Installation
Use pip
pip install matcher_py
Install pre-built binary
Visit the release page to download the pre-built binary.
Usage
The msgspec
library is recommended for serializing the matcher configuration due to its performance benefits. You can also use other msgpack serialization libraries like ormsgpack
. All relevant types are defined in extension_types.py.
Explanation of the configuration
Matcher
's configuration is defined by theMatchTableMap = Dict[int, List[MatchTable]]
type, the key ofMatchTableMap
is calledmatch_id
, for eachmatch_id
, thetable_id
inside is required to be unique.SimpleMatcher
's configuration is defined by theSimpleMatchTableMap = Dict[SimpleMatchType, Dict[int, str]]
type, the valueDict[int, str]
's key is calledword_id
,word_id
is required to be globally unique.
MatchTable
table_id
: The unique ID of the match table.match_table_type
: The type of the match table.word_list
: The word list of the match table.exemption_simple_match_type
: The type of the exemption simple match.exemption_word_list
: The exemption word list of the match table.
For each match table, word matching is performed over the word_list
, and exemption word matching is performed over the exemption_word_list
. If the exemption word matching result is True, the word matching result will be False.
MatchTableType
Simple
: Supports simple multiple patterns matching with text normalization defined bysimple_match_type
.- We offer transformation methods for text normalization, including
Fanjian
,Normalize
,PinYin
···. - It can handle combination patterns and repeated times sensitive matching, delimited by
&
, such ashello&world&hello
will matchhellohelloworld
andworldhellohello
, but nothelloworld
due to the repeated times ofhello
.
- We offer transformation methods for text normalization, including
Regex
: Supports regex patterns matching.SimilarChar
: Supports similar character matching using regex.["hello,hallo,hollo,hi", "word,world,wrd,🌍", "!,?,~"]
will matchhelloworld!
,hollowrd?
,hi🌍~
··· any combinations of the words split by,
in the list.
Acrostic
: Supports acrostic matching using regex (currently only supports Chinese and simple English sentences).["h,e,l,l,o", "你,好"]
will matchhope, endures, love, lasts, onward.
and你的笑容温暖, 好心情常伴。
.
Regex
: Supports regex matching.["h[aeiou]llo", "w[aeiou]rd"]
will matchhello
,world
,hillo
,wurld
··· any text that matches the regex in the list.
Similar
: Supports similar text matching based on distance and threshold.Levenshtein
: Supports similar text matching based on Levenshtein distance.DamerauLevenshtein
: Supports similar text matching based on Damerau-Levenshtein distance.Indel
: Supports similar text matching based on Indel distance.Jaro
: Supports similar text matching based on Jaro distance.JaroWinkler
: Supports similar text matching based on Jaro-Winkler distance.
SimpleMatchType
None
: No transformation.Fanjian
: Traditional Chinese to simplified Chinese transformation. Based on FANJIAN.妳好
->你好
現⾝
->现身
Delete
: Delete all punctuation, special characters and white spaces.hello, world!
->helloworld
《你∷好》
->你好
Normalize
: Normalize all English character variations and number variations to basic characters. Based on SYMBOL_NORM, NORM and NUM_NORM.ℋЀ⒈㈠Õ
->he11o
⒈Ƨ㊂
->123
PinYin
: Convert all unicode Chinese characters to pinyin with boundaries. Based on PINYIN.你好
->␀ni␀␀hao␀
西安
->␀xi␀␀an␀
PinYinChar
: Convert all unicode Chinese characters to pinyin without boundaries. Based on PINYIN_CHAR.你好
->nihao
西安
->xian
You can combine these transformations as needed. Pre-defined combinations like DeleteNormalize
and FanjianDeleteNormalize
are provided for convenience.
Avoid combining PinYin
and PinYinChar
due to that PinYin
is a more limited version of PinYinChar
, in some cases like xian
, can be treat as two words xi
and an
, or only one word xian
.
Delete
is technologically a combination of TextDelete
and WordDelete
, we implement different delete methods for text and word. 'Cause we believe CN_SPECIAL
and EN_SPECIAL
are parts of the word, but not for text. For text_process
and reduce_text_process
functions, users should use TextDelete
instead of WordDelete
.
WordDelete
: Delete all patterns inWHITE_SPACE
.TextDelete
: Delete all patterns in TEXT_DELETE.
Text Process Usage
Here’s an example of how to use the reduce_text_process
and text_process
functions:
from matcher_py import reduce_text_process, text_process
from matcher_py.extension_types import SimpleMatchType
print(reduce_text_process(SimpleMatchType.MatchTextDelete | SimpleMatchType.MatchNormalize, "hello, world!"))
print(text_process(SimpleMatchType.MatchTextDelete, "hello, world!"))
Matcher Basic Usage
Here’s an example of how to use the Matcher
:
import msgspec
import numpy as np
from matcher_py import Matcher
from matcher_py.extension_types import MatchTable, MatchTableType, SimpleMatchType
msgpack_encoder = msgspec.msgpack.Encoder()
matcher = Matcher(
msgpack_encoder.encode({
1: [
MatchTable(
table_id=1,
match_table_type=MatchTableType.Simple(simple_match_type = SimpleMatchType.MatchFanjianDeleteNormalize),
word_list=["hello", "world"],
exemption_simple_match_type=SimpleMatchType.MatchNone,
exemption_word_list=["word"],
)
]
})
)
# Check if a text matches
assert matcher.is_match("hello")
assert not matcher.is_match("hello, word")
# Perform word matching as a dict
assert matcher.word_match(r"hello, world")[1]
# Perform word matching as a string
result = matcher.word_match_as_string("hello")
assert result == """{1:[{\"table_id\":1,\"word\":\"hello\"}]"}"""
# Perform batch processing as a dict using a list
text_list = ["hello", "world", "hello,word"]
batch_results = matcher.batch_word_match(text_list)
print(batch_results)
# Perform batch processing as a string using a list
text_list = ["hello", "world", "hello,word"]
batch_results = matcher.batch_word_match_as_string(text_list)
print(batch_results)
# Perform batch processing as a dict using a numpy array
text_array = np.array(["hello", "world", "hello,word"], dtype=np.dtype("object"))
numpy_results = matcher.numpy_word_match(text_array)
print(numpy_results)
# Perform batch processing as a string using a numpy array
text_array = np.array(["hello", "world", "hello,word"], dtype=np.dtype("object"))
numpy_results = matcher.numpy_word_match_as_string(text_array)
print(numpy_results)
Simple Matcher Basic Usage
Here’s an example of how to use the SimpleMatcher
:
import msgspec
import numpy as np
from matcher_py import SimpleMatcher
from matcher_py.extension_types import SimpleMatchType
msgpack_encoder = msgspec.msgpack.Encoder()
simple_matcher = SimpleMatcher(
msgpack_encoder.encode({SimpleMatchType.MatchNone: {1: "example"}})
)
# Check if a text matches
assert simple_matcher.is_match("example")
# Perform simple processing
results = simple_matcher.simple_process("example")
print(results)
# Perform batch processing using a list
text_list = ["example", "test", "example test"]
batch_results = simple_matcher.batch_simple_process(text_list)
print(batch_results)
# Perform batch processing using a NumPy array
text_array = np.array(["example", "test", "example test"], dtype=np.dtype("object"))
numpy_results = simple_matcher.numpy_simple_process(text_array)
print(numpy_results)
Contributing
Contributions to matcher_py
are welcome! If you find a bug or have a feature request, please open an issue on the GitHub repository. If you would like to contribute code, please fork the repository and submit a pull request.
License
matcher_py
is licensed under the MIT OR Apache-2.0 license.
More Information
For more details, visit the GitHub repository.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for matcher_py-0.4.3-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e927b010d72e7fa3ffc90d7952e51f0300c378998e7ce27cd66828b0de90c619 |
|
MD5 | 1de553ad54f2c2c44747b59584eca73d |
|
BLAKE2b-256 | 37ee08df9c360a0c2831aca8a4698229855e0e72e6cf21519ba821e7ec0a2c76 |
Hashes for matcher_py-0.4.3-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b10fc8a355d172a02944aa01089369bb9e2ecc15b0cb30e585a99a0db45799d0 |
|
MD5 | ce017baa524a0403cdd0c1e59d25b398 |
|
BLAKE2b-256 | 79d93f5ce16ab60aebf8d996022825a5a56184f7ce4e9ac8baf237222bfc65b1 |
Hashes for matcher_py-0.4.3-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 59f8b46da0d7d65492c051c2198d142847f0f9f6f53e09b8e52084ff133beef1 |
|
MD5 | 499b31aec2e60eaf8b8cc4cad529fe8b |
|
BLAKE2b-256 | 1b1d7f4d2dc75d282f066339f13d4fc7fc506f2b8ca6c181fc0fc8afca48665c |
Hashes for matcher_py-0.4.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4320702317fa05d86f74068b783b99a68e2e898d0cba94837df3b19dac513b3d |
|
MD5 | 9614092cbc55bacc734543efcbec2e55 |
|
BLAKE2b-256 | d8d5422b01da06042fad781bda597888c5d6866fb01aa03541d1b2eaf3f65c3a |
Hashes for matcher_py-0.4.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 397af2e433715d5588bdefac8f96cd5a019fac65f1e08f89ce92a760934aa12c |
|
MD5 | ac4c9d039104be246a9c7df7876089ae |
|
BLAKE2b-256 | 584650325906ff35f2da71d18b7ccec28618861afe4dbcf6c638c707a0cdca46 |
Hashes for matcher_py-0.4.3-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd22aaf7b54d4d890e2a81a3617234292bcd78b935bfc9811bd31431d9cf1939 |
|
MD5 | d980d9cefa2516f345b3858e91c8479c |
|
BLAKE2b-256 | d35954ed126589630cecc2905ff36fc5e6cdd17f4b9fb8ac893718a65319cbde |
Hashes for matcher_py-0.4.3-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | efaa00080a89cee66b62b3691ad6c293433868390880fcb7ee5968727f566316 |
|
MD5 | 6bee345b06a79bdbaf8670069ca2444c |
|
BLAKE2b-256 | 2bf60007a53521bba44bfc9f1b923a0b99d3e4a96b412500ded2348a30866d36 |
Hashes for matcher_py-0.4.3-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7a3d92fac25bc522a34b9489cddc4440025040ed65d747894a90f3f116bf891 |
|
MD5 | 2ec6257b7fc33443fbb9c812dc5b5630 |
|
BLAKE2b-256 | bf4e94c4aa4556264e6b5247e0548ce63be9a8e330d418c6bfc03931691ce72f |
Hashes for matcher_py-0.4.3-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2bd293e59524e2d082eae34f3306402ff72a152f078bde1868b4a552af667cd |
|
MD5 | a7521f7dd17e49149da2d0e14ca58b74 |
|
BLAKE2b-256 | a1f35d6327ff86205def40541b023094fccfd999d8a63e07c3401f830df72480 |
Hashes for matcher_py-0.4.3-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 80e87fa60ff77be6fe8038e01984b7e3ab76856156817ed6351845bd10193545 |
|
MD5 | 1ae736fd2a3f3ea3308f265895e4f461 |
|
BLAKE2b-256 | 16e32587d5d493e3a3824b651573841db91fe6108ded25d4acbe65247d6dd295 |
Hashes for matcher_py-0.4.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a5c48464fcc4f7a65d4339adf3be1c19896a9bab1fbc009848b8c1b0dc1c9cd9 |
|
MD5 | 8b7a9684d7129d2d68b459d1d6bb7c86 |
|
BLAKE2b-256 | fe923dc61f26070a63fadb888cff36e6568e6cb6b687b12a4aa5d0c724769caa |
Hashes for matcher_py-0.4.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2ec56e638cd10ab9efe41366886ffc6983d2ef4a3336453abb1198ef6629ca2 |
|
MD5 | 5b22f6e551bf119bb3c4b58c06a50c18 |
|
BLAKE2b-256 | 0ae04391a858016893b09995b397ca4e298610cbd9d3a06b41a4735bda76eb39 |
Hashes for matcher_py-0.4.3-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31a02f2e07f83f45ec5fc89268722738f014fafe431f8ee77eb0c0b7e8848e0b |
|
MD5 | c7a890b5f7993b4a6b4382b3355521f5 |
|
BLAKE2b-256 | f1e200f7ca691600d3eb71851201acd4b6e6dd9c4cecd6b627a1c329714008f8 |
Hashes for matcher_py-0.4.3-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd6ca2a7e1509f1324f6577e2a83bc477f99f73422ac04cf566aa0aca44ac37b |
|
MD5 | 29a6de20925c8589494064f1e9d589a7 |
|
BLAKE2b-256 | 23ea4bd426665b326300bc7fe50e2b39b26e828402658e26ac86adbe6c6488a3 |
Hashes for matcher_py-0.4.3-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a7aa656258b131badd76d97b4c1591c34407cdaa42a3b5796d1f59de78516246 |
|
MD5 | 0543037539bcd7fa8eea4442d2f23fa3 |
|
BLAKE2b-256 | 6e34903ae5dd6fe67381d3a7021cd335a8e248aef4d70954744635eee123084f |
Hashes for matcher_py-0.4.3-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | defd7f4ac724cadd29cb18e5048dccc0a14814e2c2a9acadf32e625ccd437455 |
|
MD5 | e7a434479b40da33744317e64872b337 |
|
BLAKE2b-256 | 06000ca166a5321225aef050c8296496e835faf21ffb3f55cc16a8e16defeb02 |
Hashes for matcher_py-0.4.3-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f6078b13afaea51c60636b6679f729a542f643befd0b18c1e11f8eb02af2f37 |
|
MD5 | bd1e5d78eb7c128b8e4fd159fd6d1ff4 |
|
BLAKE2b-256 | 2532bf43aee1192f9b046c3a3083dbddfdfc6402620ff47be0100e769aa54052 |
Hashes for matcher_py-0.4.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b24f7dada48c2d274c17dfe6333cce01d3e4c85a37a84d765a488ffc8b76e0c1 |
|
MD5 | bd2437dd97f4de9ca660e1617bfd3d0a |
|
BLAKE2b-256 | ae1ef2dc729a9228994253c24421bbfab36947926bf6602de9e12cd8e8a91d66 |
Hashes for matcher_py-0.4.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d614678deec0f0a99fdcdc103f3a25e86ec64cf7b57b64d21c1e8651a91ac56 |
|
MD5 | 98d44cada6921c446aec7554d3b441f0 |
|
BLAKE2b-256 | 4f64e068e560324b2ddcbb66c2d1adb799bda1bf2f83ed0e44555e187585b13b |
Hashes for matcher_py-0.4.3-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bf7c0aa7ed20e534d8359cf35cb2dc2fab6b593036f80e5aa0718bed656ff0e |
|
MD5 | 53e428350e753edd1d583ca95740cf0d |
|
BLAKE2b-256 | abe44e78348f901c58472283d451bde4a53d35c3db5ab3436e229e5492ab386b |
Hashes for matcher_py-0.4.3-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f594efa58f29d4996d379eabc38e53272268ff8690bdcc6af05deff25928b17 |
|
MD5 | 5f3ab8aee6e82b43a290a0026ed6bf11 |
|
BLAKE2b-256 | 862a7393e6f3b8dc1223c3ad1e2c293ff769ae00e7ed572bc6b1db26ad16d5a3 |
Hashes for matcher_py-0.4.3-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1701fb288eef7e673b5ac84a103d80f53d3448476da16da2ac0ba4c0797ae631 |
|
MD5 | be31182ffde9c62c5d6b5ea93e25110e |
|
BLAKE2b-256 | 56f53df5bcc8d316616d12da3bbf09abd5d0f7aaf8ad38f1390c007a9917f23c |
Hashes for matcher_py-0.4.3-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 193606964a293436eecde3a29453f4515a1e80ad78070493e27ad97013a44d0b |
|
MD5 | 4a112de88347d012f4649f881a32575d |
|
BLAKE2b-256 | cf5ad7d5318b3d3172799b866d87a058d06d5939a9b9359ceed7250844794c54 |
Hashes for matcher_py-0.4.3-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58b514c1e3296eb979698e15a8db9bfd1619915f4a25ea2c00a3ae6495e149e0 |
|
MD5 | 3c579058e5a3323b4fd4338fbae56ba0 |
|
BLAKE2b-256 | 7bc2dbbfed3856bd5dd0cf33133f3fbfbc67e804864a11ee1fa5e3c8903fa00b |
Hashes for matcher_py-0.4.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 16e93ae35afc00ccb41f4dffc725beb36861ed5d1c76293a41950683bf4f460e |
|
MD5 | 654d79d23f37cf79f60123547cf19ded |
|
BLAKE2b-256 | fc96f4c317f49b311c2ff7edeb7abd931d6f0d0064cacebf9b7d8a79fdbe737d |
Hashes for matcher_py-0.4.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc2ee15fd0ea8705dbc0c73622e89b7a09b7ff6a2a6d40ce9462a0eb5bf84dea |
|
MD5 | cef78bbadeba2cb066a77b85488ab6fd |
|
BLAKE2b-256 | cb614504dfe82c2cc95967008f9a9e076e4c4cdb80312fccf883525ae8b94747 |
Hashes for matcher_py-0.4.3-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1ad0889355c7e18fe9c475c18ccbe1be4cee0e6896e98f894d73ee6ada81342b |
|
MD5 | aead503003be342389b1bf5fe7c7461c |
|
BLAKE2b-256 | 4409c3709e9197795902c2f92dfce0cca11d6bc43b31e6d53553f4558351aedf |
Hashes for matcher_py-0.4.3-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 970ebca81d8268d85695b15fc2ce12c21fc3f76904443c93bc6ebb872f09d0c1 |
|
MD5 | 005e87761f29acd886dc4c60bd13f015 |
|
BLAKE2b-256 | 794a7ceaad6fb15bda6c3eef9b81c5b86fef2171732c26c7cec2ae7406d6a991 |
Hashes for matcher_py-0.4.3-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8166afbc6cff8a996dda06af2991f98fbdbb1727b206064a946fde5fa1527cb2 |
|
MD5 | 3a3a73bede017f93a4b6f6c702ac98e3 |
|
BLAKE2b-256 | 1205d71516288d47990e29a5c80214edec1abb77090b0a16dee887fbb456ddb7 |
Hashes for matcher_py-0.4.3-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09e538b1ab113b9f2e3cd21d55112555abbce75d40dab5cfe79b71063e559bf4 |
|
MD5 | 39063fd04aa02e789d724573ae151cae |
|
BLAKE2b-256 | 4d3ec48ff998154ee9eaaba83e21c2b5cf80ded5d0bc30b60bb1bbbc94adc912 |
Hashes for matcher_py-0.4.3-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 672f0740ca902740aecd9bce5dcade61abb9b2ef38aa5232c93a380ddfe1ad8f |
|
MD5 | 4d01665c90676eccf9db2d78a72c3e2f |
|
BLAKE2b-256 | ee9484d8ddf989277bc1088b370605a4177172593131beea34ca518184b83eee |
Hashes for matcher_py-0.4.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5b87b3af4bcb7448f51e352a44664d3f0c766463ac84d5cfbadc9a34cd604d2f |
|
MD5 | 167f78c624209ec08e1d0b1ba753c27f |
|
BLAKE2b-256 | dd17353384df7da7c22d6fff58ce9a829443d43085cc783d280e9c3c64294317 |
Hashes for matcher_py-0.4.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a7941f76ff15aa792fd2c0ffc3a9f6918cc72730a12239c7643a79930c185ba |
|
MD5 | 74856cb79b3bec19a2e5ff6de1cc4807 |
|
BLAKE2b-256 | a7364eb5397840a5d38ac34cb102ccde8adfbe02d4e137b69487936f621f7721 |
Hashes for matcher_py-0.4.3-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8aa4b454099e79c98e80ebe463dbe7a48acf6d33c4ca75399287738245ce76d5 |
|
MD5 | e48275aac92d7b5b520aa116068575fd |
|
BLAKE2b-256 | ae2d7cc9409447af75d7e2e25d95e563fe8b37ab24ddab660da1c39328d54720 |
Hashes for matcher_py-0.4.3-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5fc6904ecedea3196f085604c384c616b76a4f1a77db0f7f24854a2d98f690d |
|
MD5 | 704849023d54922a8f5f704fb072d314 |
|
BLAKE2b-256 | 7a0682ae24f4869bdda1d3cd21fb5de913c2a7ecbc3c3e50eeb7701701635fb3 |