kisa-utils 0.42.16__py3-none-any.whl → 0.43.1__py3-none-any.whl
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.
- kisa_utils/__init__.py +2 -0
- kisa_utils/score.py +55 -0
- {kisa_utils-0.42.16.dist-info → kisa_utils-0.43.1.dist-info}/METADATA +1 -1
- {kisa_utils-0.42.16.dist-info → kisa_utils-0.43.1.dist-info}/RECORD +6 -5
- {kisa_utils-0.42.16.dist-info → kisa_utils-0.43.1.dist-info}/WHEEL +0 -0
- {kisa_utils-0.42.16.dist-info → kisa_utils-0.43.1.dist-info}/top_level.txt +0 -0
kisa_utils/__init__.py
CHANGED
kisa_utils/score.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import itertools
|
|
2
|
+
import difflib
|
|
3
|
+
from kisa_utils.functionUtils import enforceRequirements
|
|
4
|
+
|
|
5
|
+
def __removeNonAlpha(name:str)->str:
|
|
6
|
+
return ''.join([xter for xter in name if xter.isalpha() or ' '==xter])
|
|
7
|
+
|
|
8
|
+
def __getCommonCase(name:str)->str:
|
|
9
|
+
return name.upper()
|
|
10
|
+
|
|
11
|
+
def __getPermutations(names:list[str], itemsPerResult:int=-1) -> list[str]:
|
|
12
|
+
if -1== itemsPerResult:
|
|
13
|
+
return [''.join(p) for p in itertools.permutations(names)]
|
|
14
|
+
|
|
15
|
+
results = []
|
|
16
|
+
for nameCombination in itertools.combinations(names, itemsPerResult):
|
|
17
|
+
results += [''.join(p) for p in itertools.permutations(nameCombination)]
|
|
18
|
+
|
|
19
|
+
return results
|
|
20
|
+
|
|
21
|
+
@enforceRequirements
|
|
22
|
+
def getNamesMatchScore(namesA:str, namesB:str, /) -> float:
|
|
23
|
+
'''
|
|
24
|
+
Arguments:
|
|
25
|
+
namesA(str): first set of names eg 'John Doe'
|
|
26
|
+
namesB(str): second set of names eg 'Jane Doe'
|
|
27
|
+
Returns:
|
|
28
|
+
score is in range 0.0 - 100.0
|
|
29
|
+
'''
|
|
30
|
+
score:float = 0.0
|
|
31
|
+
if not (namesA and namesB): return score
|
|
32
|
+
|
|
33
|
+
# print(f'original: `{namesA}` <-> `{namesB}`')
|
|
34
|
+
namesA, namesB = __getCommonCase(namesA), __getCommonCase(namesB)
|
|
35
|
+
namesA, namesB = __removeNonAlpha(namesA), __removeNonAlpha(namesB)
|
|
36
|
+
|
|
37
|
+
namesListA, namesListB = [n for n in namesA.split(' ') if n], [n for n in namesB.split(' ') if n]
|
|
38
|
+
namesListA.sort(); namesListB.sort()
|
|
39
|
+
|
|
40
|
+
if not (len(namesListA)>1 and len(namesListB)>1): return score
|
|
41
|
+
|
|
42
|
+
# print(f'cleaned: `{" ".join(namesListA)}` <-> `{" ".join(namesListB)}`')
|
|
43
|
+
|
|
44
|
+
if namesListA == namesListB: return 100.0
|
|
45
|
+
|
|
46
|
+
leastNameCount = min(len(namesListA), len(namesListB))
|
|
47
|
+
|
|
48
|
+
for permutationA in __getPermutations(namesListA, itemsPerResult=leastNameCount):
|
|
49
|
+
for permutationB in __getPermutations(namesListB, itemsPerResult=leastNameCount):
|
|
50
|
+
if (_score := difflib.SequenceMatcher(None, permutationA, permutationB).ratio()*100) > score:
|
|
51
|
+
# print(f' {permutationA}, {permutationB}')
|
|
52
|
+
score = _score
|
|
53
|
+
if 100.0 == score: return score
|
|
54
|
+
|
|
55
|
+
return score
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
kisa_utils/__init__.py,sha256
|
|
1
|
+
kisa_utils/__init__.py,sha256=7zgEMAjPO7gJ98ob-psV7xGciG94jN5BcissMZMh4lk,774
|
|
2
2
|
kisa_utils/cache.py,sha256=WOL3e0wvoyESXTtlbVnUg9TYUoLzg64sLP9J4b4ti9k,7377
|
|
3
3
|
kisa_utils/codes.py,sha256=PV_S53Skggf4XetOdYoIKtEmM8cpN5wZwUlxje70WZY,904
|
|
4
4
|
kisa_utils/config.py,sha256=vfwka6Wuz80su6_GgjuKhxolnzj1enw8cpgQPYm17l8,2357
|
|
@@ -11,6 +11,7 @@ kisa_utils/functionUtils.py,sha256=PlXjnmU1uJWNdISlJJ3SCgavTsgNBoebaa9dtWSFhRA,6
|
|
|
11
11
|
kisa_utils/log.py,sha256=0TYdxcIBts026RCSuVIQBcZ-CW1ES7n3M1nEIjmeLTM,2295
|
|
12
12
|
kisa_utils/remote.py,sha256=z5QTKC0Mb_wMWVHWfUHR1XOOek-A2fNjo1GyFPhAB8s,2373
|
|
13
13
|
kisa_utils/response.py,sha256=asETUBkeF5OlSTwa-coa7lZDCKmQlHCmHf6eaZFl8CU,4560
|
|
14
|
+
kisa_utils/score.py,sha256=li4NG6sZlzbcXrnxrZZRamiyvRtlKxt5ZJ46QER6BiQ,2005
|
|
14
15
|
kisa_utils/standardize.py,sha256=nt-uzHQFoKxGscD_MpDYXw65Teg3724whAqa6Kh_zhE,2231
|
|
15
16
|
kisa_utils/storage.py,sha256=6NdEVrHMS7WB_vmCwiGigIinu-EjxalFJhk1kj-_vWs,5990
|
|
16
17
|
kisa_utils/threads.py,sha256=PstMHimkOABXlYmKJi5SHcevzm1JuFGNZSlF0bGzuGk,13137
|
|
@@ -27,7 +28,7 @@ kisa_utils/servers/flask.py,sha256=XZYY1pWnP1mSvaS5Uv8G3EFJV5BJBQtU2gDbO8suvLc,4
|
|
|
27
28
|
kisa_utils/structures/__init__.py,sha256=JBU1j3A42jQ62ALKnsS1Hav9YXcYwjDw1wQJtohXPbU,83
|
|
28
29
|
kisa_utils/structures/utils.py,sha256=665rXIapGwFqejizeJwy3DryeskCQOdgP25BCdLkGvk,2898
|
|
29
30
|
kisa_utils/structures/validator.py,sha256=oCSgY_itst6bZdC5g8yVU4-lSH2xnUsOx3X-oPyV7nA,4626
|
|
30
|
-
kisa_utils-0.
|
|
31
|
-
kisa_utils-0.
|
|
32
|
-
kisa_utils-0.
|
|
33
|
-
kisa_utils-0.
|
|
31
|
+
kisa_utils-0.43.1.dist-info/METADATA,sha256=luP5gb2UHCEqyQJwmf_8dVIYx4b5vlyKZMEJUydIi3w,477
|
|
32
|
+
kisa_utils-0.43.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
33
|
+
kisa_utils-0.43.1.dist-info/top_level.txt,sha256=GFOLXZYqpBG9xtscGa2uGJAEiZ5NwsqHBH9NylnB29M,11
|
|
34
|
+
kisa_utils-0.43.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|