Как исправить неправильные нечеткие совпадения с более чем 90 порогов? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть два набора данных, которые мне нужны для нечеткого сопоставления столбца, который содержит названия организаций. Я использовал библиотеку fuzzywuzzy в Python и установил порог 50 (см. Код ниже). Код успешно совпал с некоторыми именами. Когда я посмотрел на спички, я понял проблему. Проблема в том, что есть некоторые совпадения с порогом 90, но два имени совершенно разные.

Например, следующие два имени совпадают с 91:

"PARIS HEALTH CORPORATION" и "LONDON HEALTCARE CORPORATION"

(я заменил первые слова на Париж и Лондон на конфиденциально).

Мне интересно, как правильно подобрать совпадения этих типов?

Кроме того, два набора данных также имеют адрес и почтовый индекс, но я еще не использовал адрес для сопоставления двух наборов данных.

Я получил код с этой страницы .

from fuzzywuzzy import fuzz

def match_name(name, list_names, min_score=0):
    max_score = -1
    max_name = ""
    for name2 in list_names:
    score = fuzz.ratio(name, name2)
    if (score > min_score) & (score > max_score):
        max_name = name2
        max_score = score
    return (max_name, max_score)

dict_list = []
for name in df.SYSNAME:
match = match_name(name, df1.PAYER_NAME, 50)
dict_ = {}
dict_.update({"SYSNAME" : name})
dict_.update({"match_name" : match[0]})
dict_.update({"score" : match[1]})
dict_list.append(dict_)
merge_table = pd.DataFrame(dict_list)

1 Ответ

0 голосов
/ 25 апреля 2019

Это соответствует 91% из-за модели, построенной за библиотекой fuzzywuzzy . Я предполагаю, что слова, которые вы изменили вместо Парижа и Лондона, даже имеют общие буквы.

В вашем примере я считаю, что вы должны: 1) разделить список ваших корпораций на основе локализации 2) запустить модель 3) добавить результаты обратно вместе

Это позволит избежать этой проблемы, если ваши корпорации находятся не в нескольких местах.

Если это так, то вы можете удалить названия корпораций из общих элементов:

remove_words = ["healthcare", "corporations", "llc", "corp", "parnters"]
for i in remove_words:
    corp['corporation'] = corp['corporation'].str.replace(i, "", case = False) 

Таким образом, когда вы запускаете вашу модель, она запускает ее на словах, которые важны для вас.

Надеюсь, это поможет. BR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...