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 special characters are parts of the word, users put them in words deliberately, 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.6-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 721bfa48ebf83b65cb8429554adbe7d0842d53854614c20f61a231bc4528a632 |
|
MD5 | c54531d87eb71b116832d9c22a307d56 |
|
BLAKE2b-256 | 9a97e2625f30e2e9c66ab86213f0c76ade49c7ff06fc9104b7fd041530066175 |
Hashes for matcher_py-0.4.6-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 14ad5cbab75baaef5b7ffcfd4d4273818b5e4e0de3151f78cf33a8f0f0b3d739 |
|
MD5 | 71db0d9a686b4a3a4eca1b8aa55323c1 |
|
BLAKE2b-256 | ffc7a9b3b70412d79299950f053ee8d48952602a6ab248f510a4159b49ce402a |
Hashes for matcher_py-0.4.6-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 733ee66937ea415d416204ca5ed2aea8ec55f006933c71ed582bba76377d1cd8 |
|
MD5 | 00238361d342ce02e93cb2d5b80dc171 |
|
BLAKE2b-256 | 20e704137ebd0219112f6eae1cd49d2dc009684c5ebe48fb8b121069c86b35a5 |
Hashes for matcher_py-0.4.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c2bbeb3d8e404ed27188d56d0e91100f5b9f12414234f3473317150dbfff445 |
|
MD5 | 255c719035505a506ba9f8765d55b0a8 |
|
BLAKE2b-256 | 0e6803a9f6c8ce88c2558b3eb8229819bb14c9f3b211f55cc3682a70625e5527 |
Hashes for matcher_py-0.4.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 75226944383af7ec769a9d4ddb5442c7b41b949c9e630a73875f3b8a29d14dab |
|
MD5 | 044f4e0958ddbb7194f3237cd0b5dd3e |
|
BLAKE2b-256 | 5aeb43790d453fd85c06607daccf028b28ae02ab8d0119c6201e585dfd7b3b49 |
Hashes for matcher_py-0.4.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ebf17b80fac0130d3990ab85b53b0ec497ffebe50f1d6dc9918f0d84e0c74e58 |
|
MD5 | 047f9910745ff4647bc66d0e1b3c53a1 |
|
BLAKE2b-256 | 9a61521f94bae3f6268bd53adf45da10600aab33630af420b4b5ebf580df8251 |
Hashes for matcher_py-0.4.6-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 72fb16078aae41583507c1d5146c6d4eeb1e6226dc47d93643079732b0546e39 |
|
MD5 | cc81e6367585cda30a767b9e6b4c8bc5 |
|
BLAKE2b-256 | 7898fc2f31dea19e17a4e971e6302a3d02b73b72f1eddcc7046d4bf930e15086 |
Hashes for matcher_py-0.4.6-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 193fd9a4392e83c8512ccac95abac2e4439133c929bdb021c0ea86b8b12d993c |
|
MD5 | 1500a25f09348defab03be152f0fc288 |
|
BLAKE2b-256 | 4e90bd263cfed9004f357774b53164b4cd9b284f41af57d19d28edfc950fe613 |
Hashes for matcher_py-0.4.6-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1608d695191f6e873917bc424fb2abfcf6f97c93b2af9d4b8ce60b59bfeb36f |
|
MD5 | 6eb4153b459a13adb9c0a5c6e1e8b2b8 |
|
BLAKE2b-256 | 2197f6f35fcb071bdc266c8e87242392c0ebe671c0b1572bb74debd29666bc44 |
Hashes for matcher_py-0.4.6-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 175097dd10db3cd8e851fca00d9a8e6d4a2bfe1e24ea764ca92d5a83074a62aa |
|
MD5 | 63711de5643d651ca3d28a9b05d47d9a |
|
BLAKE2b-256 | bc1ed1d14a145b69c4873df4e964fa7f31d838920089a8e11d726e6abdd1d7d9 |
Hashes for matcher_py-0.4.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5e2722dc352265465619f805c2ad9f7893cd51d754860f4d273193ed7b7fcba7 |
|
MD5 | c92415eaf8682887d70f83735cd85740 |
|
BLAKE2b-256 | 2882d12f416e558e910cffa6ee4a80ac9f1dfb62782b06a5033820bdd369f96d |
Hashes for matcher_py-0.4.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 86df7377b404ac77ca68b5e56bcfa268a692b9f33e6155bd5d1001d5d3c02f68 |
|
MD5 | cb38e980329da09faed5b4aa22ccd12e |
|
BLAKE2b-256 | 541a15364d815ef680c42942aee69450248e765194fa005d1421e9e062db688c |
Hashes for matcher_py-0.4.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e799b623ef473a28e5494507e4974098c9988b0ca82e363faeeabec593947023 |
|
MD5 | b938c21ad88ac4246f0b2bc892bdb454 |
|
BLAKE2b-256 | ddf0b23e7a9c1fae57246e0795774e925335507c4f45a4d08da0b90ebc240b66 |
Hashes for matcher_py-0.4.6-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4278437bc59de9f8abe6f3d01be7591d5aa5e297e874118f493376ef0dc308a |
|
MD5 | 93fe96252574472fa1a00524ec8fb209 |
|
BLAKE2b-256 | fbf9cd2be8b6a847c93b75bbb81739b0070d0760853eef9adc73ea90728ad7f2 |
Hashes for matcher_py-0.4.6-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ff272588d9f5a14a124b78433fd854e8213254ce9ff60c518095ee64258852e |
|
MD5 | b3097fb27640ac043af78c2e5e9f3815 |
|
BLAKE2b-256 | 658de2e335ce53e1c996f370e598b1d07de870cec7387859bae0e6334802ec68 |
Hashes for matcher_py-0.4.6-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ff42d5e936e53250da5950a0e4c896da14a448eafa794fca9c666140bcccf08 |
|
MD5 | 241be03dfbfa5774abd022b1ed06e10a |
|
BLAKE2b-256 | e07189e95465acfc5b4fdea38bfba80d043a1bcc81f2d45774f1ee96e8bacf7a |
Hashes for matcher_py-0.4.6-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 43c41e68002eb4329cd05aee4085964de771e60e2f635be2dbd453c6da8ab9ad |
|
MD5 | efaea0ed040a625c685ca20819225442 |
|
BLAKE2b-256 | 2c1334164e2ca028a1470d28420d69efccbdcd53cf9a417c16eba8e6dd3dcd91 |
Hashes for matcher_py-0.4.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f48556055aa9c922dba6b6a2be9e441df5d8eaa5b420affdeb6e70e4367d4af5 |
|
MD5 | f65cdb08e57516331a42bbb31dfc9c71 |
|
BLAKE2b-256 | 27aac160fe1511d1e22c66bce0e20845199513441bb123a9c60d0474dfb50f3a |
Hashes for matcher_py-0.4.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39729f0fb046d2c9fe1790f336e8fed89ecbe1af075e940268d9f43e7ac08cc0 |
|
MD5 | c553ea4a53b26190da3f5f43da963914 |
|
BLAKE2b-256 | 8b79b2bb09a2645c8784c63bf56dd021d6c32631ffd4aded4acb05164c043ad5 |
Hashes for matcher_py-0.4.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4acc986afc87d408a6366747126da245c4dc6d4d127df7e795b7a6ef6c10750c |
|
MD5 | 7b7cd9c463036bce2d2b5b863640dfe8 |
|
BLAKE2b-256 | 39a40b2c4efa9138f030f0374c98dbc3ac0b5c47024ba0241bf3cd360c2ece4d |
Hashes for matcher_py-0.4.6-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b9b9f0e87750640423e4b4eb0847e66dd8e1fa5f4942942459342a411a0977b |
|
MD5 | 9069e59d3bbd01d3d0444b0774197100 |
|
BLAKE2b-256 | c5e56b236d6565f2ee179cb8cdcd531f5535fbacb50ae29ebb74e8849d1aa8de |
Hashes for matcher_py-0.4.6-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6d6168890eac483935b018bc505e26061cff24d21da0e1ab14cf6a6168ab999e |
|
MD5 | 37d52108412487461f52c2c00971290b |
|
BLAKE2b-256 | 85081c09909e2c5c5027279eec1c516e8dfd14959a1521d5998876bed4a83ea7 |
Hashes for matcher_py-0.4.6-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12e9fa6f2e1977cf307fdd4be6b3ad4c5b45c7ba44a6b2e4721075e10a55f4b3 |
|
MD5 | fb4420e30c9a5d46d5bcc2b4f33d21cf |
|
BLAKE2b-256 | 1ebfb5049554629458e830588f378cf65f0d2e8ab0664a44c923ffe62172a8eb |
Hashes for matcher_py-0.4.6-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 291f68508c7f8574e486339398a55ff36cf505a78b5c28be483f455d9fa36fee |
|
MD5 | 0f76588264e320955008b5f778b7ff02 |
|
BLAKE2b-256 | 32282064ba21361e4981e1847cb4d18f5efce5c41186cf9c47f9b249c23dd10d |
Hashes for matcher_py-0.4.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ed382a73cf9b88c23b069d2ede375c58b459b46e6a62d8c62e19cbf0c8ca61f7 |
|
MD5 | dd6081d4a05c5f816f305cbf7f14a7eb |
|
BLAKE2b-256 | 80e924016c70e2c49beef67a13ea6e689f0249241968e010edcd9b7bb0496bc0 |
Hashes for matcher_py-0.4.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49f9af00efbf5e31e552ba03990678a9b5e934261c697933e65b003e7adcc949 |
|
MD5 | 0534b24807a7cdc4b8557a0db6f37995 |
|
BLAKE2b-256 | df31f95a542ee2dbd0c25fbe370f648bb2b4d1ab3951bd8a4859f2c9655a905b |
Hashes for matcher_py-0.4.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e081ec728580683607040008224aa9ee1c7da8ff750fe767198b8352f8cfbdd |
|
MD5 | 3c45d130786d7d85784e9d41d8e8c651 |
|
BLAKE2b-256 | a46b8dca071f930633924f23207803782d1904852e00b5dffc15c9f156422ae5 |
Hashes for matcher_py-0.4.6-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 61d48cc2fcc4263804062db263718a39902e45308133677d059571c3c3cd3425 |
|
MD5 | 8e41bcc0ac74a7b71e70465a0229d996 |
|
BLAKE2b-256 | c40246946b1a407d56dc331e040e3da478b8ce3a34f7e8f41cf488c47e1fdba9 |
Hashes for matcher_py-0.4.6-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9195a3e1564dd19144cb376d9bdb708c435a777f61801a92a0bfa6d2b375e6f |
|
MD5 | b10edcedd8a702fd95ca9832da78eff9 |
|
BLAKE2b-256 | 9767bedf336f25a525eec09b5097fd04cf2d707ecd19881ac6112aa2bd92b798 |
Hashes for matcher_py-0.4.6-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dde8c8779d0fef95756d1680e551ebfd0a67b8721a40153b2eb9a1336f73be17 |
|
MD5 | 31888f1a7aa6e63693b21215fba056bf |
|
BLAKE2b-256 | 64ff57c4ac8ce83cdda7899627b857e2f8fce1d6380b635bc6c1f9d30ddd899d |
Hashes for matcher_py-0.4.6-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0e4ca997b7fe29e956afb6e0c949d1fb8f3ef00aa565301fdc118635a4f9e6c7 |
|
MD5 | 2d01697c7f40ad405917358db54380f2 |
|
BLAKE2b-256 | 26c4e1ca7005c04887b2014a51f15bd4588eada084e164ab1149e177939cd5a4 |
Hashes for matcher_py-0.4.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 25c7bba02d77e710c56d8d20136246a2995aedb29031e52fe33fcc7f6c9ed7c5 |
|
MD5 | 9222b861b3ffc84375f0bb9544e3b50a |
|
BLAKE2b-256 | 4210a5d114f89bb0a438fd36fd820cd3591fac7a1580bb07051c0757ecacc3ae |
Hashes for matcher_py-0.4.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 12d1f42103da86c978cf70c3e29d2eb5e0e72ab58c58fd0d3cffcc2039136d5b |
|
MD5 | d9a29f2c904964a563233f5941dde11a |
|
BLAKE2b-256 | aca91ac50b266d52f667a2b7b7096164ab2990e6ba19b938bc15f6a2ea7c75c3 |
Hashes for matcher_py-0.4.6-cp38-cp38-macosx_11_0_arm64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 42a278855043d07c0106f83994f185370012c03ccc5fd1abea4a40a9680ff6e6 |
|
MD5 | c93bb56e2ec889ca3c7894dc3daaff7f |
|
BLAKE2b-256 | f31bd7e7560dd09ce1869a822dda0fe1bff3e4dab0c305823ecbcf287df642a5 |
Hashes for matcher_py-0.4.6-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0bf23c59be28c6998dc53942cf4078c5312fae6730e6353781adcaf8cafba64 |
|
MD5 | 2d291d621752378ec1a3aa33766e284f |
|
BLAKE2b-256 | 7f02ea9a142799ca227b07be248525a1a6913eb6f9da3c07d063d4a86c21b093 |