hdx-python-utilities 4.2.0__tar.gz → 4.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/PKG-INFO +1 -1
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/documentation/index.md +6 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/_version.py +2 -2
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/matching.py +58 -0
- hdx_python_utilities-4.2.1/tests/fixtures/matching/wfp_admin_matcher_calls.json +5489 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_matching.py +26 -0
- hdx_python_utilities-4.2.1/tests/hdx/utilities/test_matching_wfp_admin.py +76 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/.github/workflows/publish-test.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/.github/workflows/publish.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/.github/workflows/run-python-tests.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/.gitignore +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/.pre-commit-config.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/CLAUDE.md +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/LICENSE +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/README.md +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/documentation/.readthedocs.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/documentation/mkdocs.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/pyproject.toml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/__init__.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/base_downloader.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/compare.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/dateparse.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/dictandlist.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/downloader.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/easy_logging.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/email.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/encoding.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/error_handler.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/errors_onexit.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/file_hashing.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/frictionless_wrapper.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/html.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/loader.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/path.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/retriever.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/saver.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/session.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/state.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/text.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/url.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/useragent.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/uuid.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/src/hdx/utilities/zip_crc.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/compare/test_csv_processing.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/compare/test_csv_processing2.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/empty.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/hdx_config.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/hdx_config.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/hdx_email_configuration.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/hdx_email_configuration.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/logging_config.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/logging_config.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/project_configuration.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/project_configuration.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/smtp_config.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/smtp_config.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/user_agent_config.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/user_agent_config2.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/user_agent_config3.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/config/user_agent_config_wrong.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/basicauth.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/bearertoken.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/extra_params.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/extra_params.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/extra_params_tree.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/resume_test.dat +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_csv_processing.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_csv_processing_blanks.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_data.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_data.xlsx +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_data1.csv/empty.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_data2.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_json_processing.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_xls_processing.xls +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/downloader/test_xlsx_processing.xlsx +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/bad_header.zip +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/bad_index.xlsx +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/empty.zip +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/test.xlsx +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/test_shapefile.zip +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/file_hashing/valid_sig_invalid_body.zip +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/html/response.html +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/loader/empty.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/loader/empty.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/loader/empty_list.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/fallbacks/test.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/fallbacks/test.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/fallbacks/test.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/fallbacks/test.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/retriever-test.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/test.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/test.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/test.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/retriever/test.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out2.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out2.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out5.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out6.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out7.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out8.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/out8.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-false_sortkeys-false.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-false_sortkeys-false.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-false_sortkeys-true.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-false_sortkeys-true.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-true_sortkeys-false.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-true_sortkeys-false.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-true_sortkeys-true.json +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/saver/pretty-true_sortkeys-true.yaml +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/state/analysis_dates.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/state/last_build_date.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/test_data.csv +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/text/text1.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/fixtures/text/text2.txt +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/conftest.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_compare.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_dateparse.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_dictandlist.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_downloader.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_easy_logging.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_email.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_encoding.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_error_handler.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_file_hashing.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_html.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_loader.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_path.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_retriever.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_saver.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_state.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_text.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_url.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_useragent.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_uuid.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/test_zip_crc.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/tests/hdx/utilities/utils.py +0 -0
- {hdx_python_utilities-4.2.0 → hdx_python_utilities-4.2.1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: hdx-python-utilities
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.1
|
|
4
4
|
Summary: HDX Python Utilities for streaming tabular data, date and time handling and other helpful functions
|
|
5
5
|
Project-URL: Homepage, https://github.com/OCHA-DAP/hdx-python-utilities
|
|
6
6
|
Author-email: Michael Rans <rans@email.com>
|
|
@@ -894,6 +894,12 @@ Examples:
|
|
|
894
894
|
matcher = RapidFuzzMatcher(RapidFuzzMatcher.place_name_scorer)
|
|
895
895
|
assert matcher.match(kalimantan, "central kalimantan") is None
|
|
896
896
|
|
|
897
|
+
# place_name_scorer also expands a leading initial to a word starting
|
|
898
|
+
# with it and requires a trailing single letter in the possible name
|
|
899
|
+
shewa = ["west shewa", "east shewa"]
|
|
900
|
+
assert matcher.match(shewa, "e shewa") == 1
|
|
901
|
+
assert matcher.match(["region iv a calabarzon"], "region iv b") is None
|
|
902
|
+
|
|
897
903
|
# Phonetics is an alternative matcher using Refined Soundex
|
|
898
904
|
phonetics = Phonetics()
|
|
899
905
|
assert phonetics.match(possible_names, "al dali") == 1
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '4.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (4, 2,
|
|
21
|
+
__version__ = version = '4.2.1'
|
|
22
|
+
__version_tuple__ = version_tuple = (4, 2, 1)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -13,6 +13,50 @@ LIST_SEPARATORS = re.compile(r"\s*(?:[,;/:&\n]|\s(?:and|et)\s)\s*", re.IGNORECAS
|
|
|
13
13
|
HYPHEN = re.compile(r"\s*-\s*")
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
def expand_initials(words: list[str], other_words: list[str]) -> list[str] | None:
|
|
17
|
+
"""Check single letters at the start or end of words against
|
|
18
|
+
other_words. A leading letter is an initial and is replaced by an unused
|
|
19
|
+
word in other_words that is not in words and starts with it ("e shewa"
|
|
20
|
+
-> "east shewa", "b gumuz" -> "benishangul gumuz"). A trailing letter
|
|
21
|
+
distinguishes places ("region iv b") so must be in other_words. Single
|
|
22
|
+
letters between other words are left alone as they are often conjunctions
|
|
23
|
+
(eg. Spanish "y").
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
words: Words that may contain single letters
|
|
27
|
+
other_words: Words to expand single letters to
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
Expanded words or None if a single letter has no counterpart
|
|
31
|
+
"""
|
|
32
|
+
leading = []
|
|
33
|
+
for word in words:
|
|
34
|
+
if len(word) != 1:
|
|
35
|
+
break
|
|
36
|
+
leading.append(word)
|
|
37
|
+
trailing = []
|
|
38
|
+
for word in reversed(words[len(leading) :]):
|
|
39
|
+
if len(word) != 1:
|
|
40
|
+
break
|
|
41
|
+
trailing.append(word)
|
|
42
|
+
for letter in trailing:
|
|
43
|
+
if letter.isalpha() and letter not in other_words:
|
|
44
|
+
return None
|
|
45
|
+
unmatched = [word for word in other_words if word not in words and len(word) > 1]
|
|
46
|
+
expanded = list(words)
|
|
47
|
+
for i, letter in enumerate(leading):
|
|
48
|
+
if not letter.isalpha() or letter in other_words:
|
|
49
|
+
continue
|
|
50
|
+
for other in unmatched:
|
|
51
|
+
if other[0] == letter:
|
|
52
|
+
unmatched.remove(other)
|
|
53
|
+
expanded[i] = other
|
|
54
|
+
break
|
|
55
|
+
else:
|
|
56
|
+
return None
|
|
57
|
+
return expanded
|
|
58
|
+
|
|
59
|
+
|
|
16
60
|
class Phonetics(RefinedSoundex):
|
|
17
61
|
def match(
|
|
18
62
|
self,
|
|
@@ -119,6 +163,11 @@ class RapidFuzzMatcher:
|
|
|
119
163
|
distinguishes places, but not names like sectors, where extra words
|
|
120
164
|
are often descriptive (eg. "food security and livelihood").
|
|
121
165
|
|
|
166
|
+
Single letters at the start or end of name are checked first with
|
|
167
|
+
expand_initials ("e shewa" scores 0 against "west shewa" but matches
|
|
168
|
+
"east shewa"), unless the names differ only in spaces and punctuation
|
|
169
|
+
(eg. "sana a" vs "sanaa").
|
|
170
|
+
|
|
122
171
|
Args:
|
|
123
172
|
name: Name to match
|
|
124
173
|
possible_name: Possible name
|
|
@@ -126,6 +175,15 @@ class RapidFuzzMatcher:
|
|
|
126
175
|
Returns:
|
|
127
176
|
Similarity score from 0-100
|
|
128
177
|
"""
|
|
178
|
+
joined_score = rapidfuzz_fuzz.ratio(
|
|
179
|
+
NON_WORD_CHARACTERS.sub("", name),
|
|
180
|
+
NON_WORD_CHARACTERS.sub("", possible_name),
|
|
181
|
+
)
|
|
182
|
+
if joined_score < 90:
|
|
183
|
+
name_words = expand_initials(name.split(), possible_name.split())
|
|
184
|
+
if name_words is None:
|
|
185
|
+
return 0.0
|
|
186
|
+
name = " ".join(name_words)
|
|
129
187
|
words = set(name.split())
|
|
130
188
|
possible_words = set(possible_name.split())
|
|
131
189
|
|