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.你好
->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:[{\"match_id\":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.4-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | df021d08b15f590ad0b11bdf8af1dec121273f8e2462c90626f8f218baa65f91 |
|
MD5 | 7c9a94741c9793dc21c73331535198c1 |
|
BLAKE2b-256 | 7e9bc48733d190a4e4aafa98b31b18f21968609e267f6024084a5c25ef84ca5a |
Hashes for matcher_py-0.4.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5deb6938c396cba71f13dc2aa355aa996621037b1030a7fa0f989709ea683b1d |
|
MD5 | 4d533055c5087950384e1eed5c9e8725 |
|
BLAKE2b-256 | 46015cb8aa936ccfa13f151af8dd26a022fb9c2773906db295d6922c39427e89 |
Hashes for matcher_py-0.4.4-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d83c569800f2e911c279774ac143f87abefdbe04046e756da4b7effd0790e56 |
|
MD5 | c136e992bf2f053b1e1de7acee31e8a4 |
|
BLAKE2b-256 | 3f7e41508f0f3b65813e874752b13a76458e727c2050b646a2454a7124828ca5 |
Hashes for matcher_py-0.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1767f45c53df5c139a2afa23d99c1c906426c7862dbabf53e49e572b41dd7671 |
|
MD5 | 23953c98cd31b306698ae7a2edcda62c |
|
BLAKE2b-256 | c4ab02121d6ecd7b69b0476653b8af4aa0d490474c6042d7395f5534b3fc82db |
Hashes for matcher_py-0.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | abe87d2ed18d6cdb0ee86313d901de1d206bf8e40d1ce5fd5727968785a87154 |
|
MD5 | 0838d105f63e097374d488b36dfbc413 |
|
BLAKE2b-256 | a55df71975c7b18436cace22e511b1f6c0a98231825f60e36f6353d3b31ce72e |
Hashes for matcher_py-0.4.4-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 096433bda90e7b1284142b599ad7b33f8d537e5671e288359d266a78d39c566d |
|
MD5 | dd67942edd459a58158bce6239410f56 |
|
BLAKE2b-256 | c45dc84191821d1b25eb4ae0d23c81cfe8f59658449f123744dc755e265c9ade |
Hashes for matcher_py-0.4.4-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 24edfc281a01960c933c6735a0b4d1daeaeb87590f12463abca66a2fbcf2265f |
|
MD5 | 76ad93028ecfa55417280e71ee52b2e1 |
|
BLAKE2b-256 | 5835f79bcb42bc62c39f9eea5e7e97807547bb415bee2e387ba03e5738537bf3 |
Hashes for matcher_py-0.4.4-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4dfbbf7f94b7f9bcf51562ef066cde9751f903fa45a9bbc58e5fb87b356cd359 |
|
MD5 | 45115d02c28a1958086c101f4e6dd1ae |
|
BLAKE2b-256 | 426fe1a9b785d2e0bc25edf10df47ea22b78f34a9f5497d3c308654c3dccc1c8 |
Hashes for matcher_py-0.4.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8440d996c8608961e6c7fe1c6625114250c7b824dcf0d83eee9b34fccff57370 |
|
MD5 | 84ab4132d34be25efb41aeebff0afa02 |
|
BLAKE2b-256 | aaed367e7209bccaec01676744bd9254b52448097342d4f22faab1241b58575f |
Hashes for matcher_py-0.4.4-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd80862d7db646cbc3529e7798bbd359d743bc8ca4fad9f06ab5adee32338bc5 |
|
MD5 | a0423015235ac0719e5b9c04cf42ef9f |
|
BLAKE2b-256 | 0e92a69458aae9d616487a517377051087ccce455beb90faaa8daacb59afd5b4 |
Hashes for matcher_py-0.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 059bef6ea8664f498fb2ab76064a1899e8ec6cc1c610b4d478335e2453fb32cc |
|
MD5 | 41ba7df7daf3d8ff04113e83484e698d |
|
BLAKE2b-256 | 4541b4f89fa388aad05cd2f347051e400bbf13b067a10fc479b723d2b83992cd |
Hashes for matcher_py-0.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f76374c0241a9532557d9d3b7ecd14e2c1f629ac7f798188a2725a341fb4f7ef |
|
MD5 | 8191643a94f46ae158875780bee7401c |
|
BLAKE2b-256 | 45a36a7c2bdd08e512e055cd7405c4b2626b4ad0a8b2ee0246b132ec9ba693eb |
Hashes for matcher_py-0.4.4-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 71c0d4799a551abb557ce424804e5546e7d14d7411ea5f2f8db3e60a22e3f514 |
|
MD5 | bfb7b940d145795b1a370d8072ce5e93 |
|
BLAKE2b-256 | 7e880fdd0b6fcd4d347d32dabbc01a89b6a77aacc8ac2a75124c3354c6242b13 |
Hashes for matcher_py-0.4.4-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee4209ad19b06a98dbbedac9506bc0260f67e11dde636ab3c4557a450fcff4f3 |
|
MD5 | 1803554dbe2017f5d47580277b5a83a7 |
|
BLAKE2b-256 | 4d72c52bcc3e46a3f3860eed9ba11529b8780016a9cf469700bce53fea0f1c4a |
Hashes for matcher_py-0.4.4-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d39607b1c12f207ee50c499a51ce3d2091defe444ae54faeb7bd3b9820a3ef0 |
|
MD5 | e62ae5e51ae83becede960c034732fdd |
|
BLAKE2b-256 | a8cdd2c6b44452c03d680741ef046abacceb8e857b85c8e375dabdc90fdd6279 |
Hashes for matcher_py-0.4.4-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0915bf4d63bdedfae4b0d920a5cf98f088e5b2e0f8814a6d4a6e5d7d6aed31a6 |
|
MD5 | 07524a00dd00ca4df581a9f58ad54119 |
|
BLAKE2b-256 | 8dbf036ab3415de68a65f48e2ee76d14bbb5f0cc9acd2b7c3cab43bd60932494 |
Hashes for matcher_py-0.4.4-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ace75ad0620106447732504f523bc50888e149194542d612455fdd393ff8d41d |
|
MD5 | 48188bb07e8bdd4d773ee311594896a8 |
|
BLAKE2b-256 | 72cd17d8183b2a61ccc779b0ef2188c1f1b30c7d2af4b65e74a75e5007f083ba |
Hashes for matcher_py-0.4.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7f1199717a9cfd99103e809e55b882e8abb9933065e8111fad34a1274ff131a9 |
|
MD5 | 34147359486390c12a9dc6e54a09fab8 |
|
BLAKE2b-256 | 706a0bc77277fa12a2df9694a1a819e8ad7664050c8629c903b3e96b42c20c3c |
Hashes for matcher_py-0.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a466703edb8cf7f9d52cf5baf9452bfb32f08153458116e757e0d9434b5e9314 |
|
MD5 | 2ff507011dedaf456e4dd1ab5b32daf4 |
|
BLAKE2b-256 | fafa7cbaa468bf0943f695052be90405ec2a7ffe70e1cbd2b7194f550558bdf3 |
Hashes for matcher_py-0.4.4-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 532ae962a7d63548322c0216c7609f8d853ca74be9421bd6feb729dc262fdc2c |
|
MD5 | 74f4d1e66d495d58e9c33fd50bca2195 |
|
BLAKE2b-256 | 816a1349cee9c2b28d66165e29630589806d402de94b5584861cfd130e938f48 |
Hashes for matcher_py-0.4.4-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bebc79c0bea91759278943b588604cdf73cf66a5e34d5bb6b2ee91f339b065e7 |
|
MD5 | 4dd27762c67ff84ea515ac61754c696a |
|
BLAKE2b-256 | ad9edd8e67eca4eeb327440a5e68c1dadefb636960adc3a2fd67c08cc9befbc8 |
Hashes for matcher_py-0.4.4-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d8abcb68f2fc2e68e235e433286ab887da8e0968fa6e2a33df78c6c8c49dd17f |
|
MD5 | 88125849bc27de0fe7cedc02b218f6a1 |
|
BLAKE2b-256 | 84e125dfc0246070f8b469b96954666e6e3d0d0e07c90c88d90b52f35514597c |
Hashes for matcher_py-0.4.4-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 070f5886f041769bd36b24b5a108478602d6649723768846ede393229d51be90 |
|
MD5 | 16e6fa7a4e50ad328b3e6d09d1dcd342 |
|
BLAKE2b-256 | 537f7d431889f71feff05782958a2b26d8b3826be154047507d9b074ad88112e |
Hashes for matcher_py-0.4.4-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5900e9f8d327e238b60320d0c585b61862180208b6422a26260723c77b1cb9c6 |
|
MD5 | ed4f6a18d322aac16147c9ebad608d7c |
|
BLAKE2b-256 | 3405a7a1432a3d878575e1085332d23d850ff102866d3f510d870a6d00074658 |
Hashes for matcher_py-0.4.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b07eab80364030a8267c138109df01320472a9cdcf3bf82d95e475dd7f2b1c21 |
|
MD5 | 66c85c52bed4fec566c484e7012f4262 |
|
BLAKE2b-256 | b05b16b7aafa4daadb674b18024a464d2afd806cb1e1f2f4ec1e455d43dd3b1c |
Hashes for matcher_py-0.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b40ab1326ceffb34c1ce4b07733d251bdcc7eb5ac0bb51fb136b26457dda9bd3 |
|
MD5 | 493036182e0dfef4b8707e87f7077a5f |
|
BLAKE2b-256 | 425a3ee13eb831f037614a09703dbbb9496595094f07c9edb7737d17563ca5b4 |
Hashes for matcher_py-0.4.4-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | be84876d3250149c525f5a603bf133c15852038381e7660ce14538264a98505c |
|
MD5 | bc3dbb9b295732d0b1df03456121bec4 |
|
BLAKE2b-256 | d7570cb5d1682a795f070b35dbaa027356dad4feafccd9474568b9ee8954ca5c |
Hashes for matcher_py-0.4.4-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dec85f186c10c6ec466aa87dc8ef831e350c7b5c181365d38391c225a2cc14a0 |
|
MD5 | a060ae9bf1b7253fae5e30358bc2f036 |
|
BLAKE2b-256 | 281c73d8bab819c3c586c1af91f10c6e56b14d5dc3f4ca23bd4636722c9e6135 |
Hashes for matcher_py-0.4.4-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64cc8cf812429ad60efe37a191c63ad44837f87a6b1ebb8b866f36f84d3e89f6 |
|
MD5 | 6454f180d1b763f0374b40d07f7b59e6 |
|
BLAKE2b-256 | 1ff95f0ca63ff27131c04f863ba37fd7807147b9d4b62194c9c1aa631c08cb24 |
Hashes for matcher_py-0.4.4-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 85295fd6133ad87ba60f2bbda6e4a7d703fbc1eaa68a6632d2a2d24798437cd3 |
|
MD5 | 6e6b877b0e73e4e83d8b711fb773dd8d |
|
BLAKE2b-256 | 56a4b10ea1e7f401b390c0aef10668b1c864e09931610fe899907f4bc04821f7 |
Hashes for matcher_py-0.4.4-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4d18244d9b23854f872f8128338b0f4a8dd70112e14951ee8c3d3c7c84be02dd |
|
MD5 | 13134a2415c041f66fd490766daee33a |
|
BLAKE2b-256 | bc58a2fd638b8c8bb58b79a9086fd10eabdd1c149dde7c673ee1410fdfe24d7f |
Hashes for matcher_py-0.4.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b236e2c98d28df0314e28449eef659e39785ba08463c5cd7281e127c99a9d7b1 |
|
MD5 | 95c9e86405b2c187da9309a3f8adb8db |
|
BLAKE2b-256 | 0ab44d90da91ecc3545948b977a4e16d385997ef8e6b64e235748b2932245f3e |
Hashes for matcher_py-0.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e79f4cdc7a79dd271ec224a274f93ef6393755481cb8786b5c17de46a40ae7bd |
|
MD5 | 2b68f87ba480f10aad38c8ed33cae824 |
|
BLAKE2b-256 | 7e80667e8834ab9056f1be6387e746a7caa252d0362b57832c664fe72d72b704 |
Hashes for matcher_py-0.4.4-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b9324b672e32bd0769f0e3ffb6f2e1da8525a9396e86014546f82869350155ca |
|
MD5 | bfd017cbc60ff14b77347309f412d725 |
|
BLAKE2b-256 | 49234244d2308f1757f585f0d19272dd8b75172b1e12847fb8d15b9655416a8f |
Hashes for matcher_py-0.4.4-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0d9dba93c0052b403dfeca969723b3092af7d9575ba3f3f5078fd3c9b09187e1 |
|
MD5 | b6f7ade7abd368ca20e25df41051105a |
|
BLAKE2b-256 | a993554cda030511953ce992ac0d7aab2a9498eb0dffb975f7bf87912c322b7b |