Как изменить оценщик по умолчанию fuzzymatcher, чтобы он присваивал разные веса разным столбцам?

#python #record-linkage

Вопрос:

Я столкнулся с проблемой привязки записей.

Чтобы справиться с этим, я обнаружил библиотеку python для связывания записей под названием fuzzymatcher .

С fuzzymatcher помощью связать 2 кадра данных, содержащих персональные данные физического лица, так же просто, как сделать:

 matched_results = fuzzymatcher.fuzzy_left_join(df_left, df_right, cols_left, cols_right)  
 

Давайте предположим cols_left = cols_right = ['name', 'city', 'state']

Я хотел бы присвоить name весу столбца 70%, city 20% и state 10%.

Я изучал библиотеку, и, похоже, для этого мне нужно было бы только изменить scorer class то, что она использует. Я даже думаю, что это должна быть функция для редактирования, но я не знаю, как это сделать:

 def score_match(self, record_left_id, record_right_id):

    record_left = self.matcher.left_records[record_left_id]
    record_right = self.matcher.right_records[record_right_id]
    # Need to find common tokens, and get their probabilities
    fields_left = record_left.fields

    prob = 1
    for f_left in fields_left:
        p = self._field_to_prob(f_left, record_left, record_right)
        prob = p * prob

    match_score = self.prob_to_score(prob)
    return {"match_prob" : prob, "match_score": match_score, "record_right": record_right} 
 

Примечание: Я также заглянул в другую библиотеку [Python Record Linkage Toolkit][3] , но нашел ее менее интуитивно понятной (например, документация не очень проста, а формат вывода-многоиндексные фреймы данных pandas… короче говоря, кажется, что это обеспечивает гораздо большую гибкость, но мне не удалось начать).