fix: Use process.extract to get the corresponding party doc name of the result

- rapidfuzz accepts an iterable or a dict. dict input gives the dict key and value in the result
This commit is contained in:
marination
2023-10-31 16:53:08 +01:00
parent 86f4bf6e01
commit 153e961df7

View File

@@ -1,5 +1,4 @@
import frappe import frappe
from frappe.core.utils import find
from frappe.utils import flt from frappe.utils import flt
from rapidfuzz import fuzz, process from rapidfuzz import fuzz, process
@@ -136,7 +135,7 @@ class AutoMatchbyPartyNameDescription:
skip = False skip = False
result = process.extract( result = process.extract(
query=self.get(field), query=self.get(field),
choices=[name.get("party_name") for name in names], choices={row.get("name"): row.get("party_name") for row in names},
scorer=fuzz.token_set_ratio, scorer=fuzz.token_set_ratio,
) )
party_name, skip = self.process_fuzzy_result(result) party_name, skip = self.process_fuzzy_result(result)
@@ -144,8 +143,6 @@ class AutoMatchbyPartyNameDescription:
if not party_name: if not party_name:
return None, skip return None, skip
# Get Party Docname from the list of dicts
party_name = find(names, lambda x: x["party_name"] == party_name).get("name")
return ( return (
party, party,
party_name, party_name,
@@ -158,14 +155,14 @@ class AutoMatchbyPartyNameDescription:
Returns: Result, Skip (whether or not to discontinue matching) Returns: Result, Skip (whether or not to discontinue matching)
""" """
PARTY, SCORE, CUTOFF = 0, 1, 80 SCORE, PARTY_ID, CUTOFF = 1, 2, 80
if not result or not len(result): if not result or not len(result):
return None, False return None, False
first_result = result[0] first_result = result[0]
if len(result) == 1: if len(result) == 1:
return (first_result[PARTY] if first_result[SCORE] > CUTOFF else None), True return (first_result[PARTY_ID] if first_result[SCORE] > CUTOFF else None), True
second_result = result[1] second_result = result[1]
if first_result[SCORE] > CUTOFF: if first_result[SCORE] > CUTOFF:
@@ -174,7 +171,7 @@ class AutoMatchbyPartyNameDescription:
if first_result[SCORE] == second_result[SCORE]: if first_result[SCORE] == second_result[SCORE]:
return None, True return None, True
return first_result[PARTY], True return first_result[PARTY_ID], True
else: else:
return None, False return None, False