#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… короче говоря, кажется, что это обеспечивает гораздо большую гибкость, но мне не удалось начать).