Python-Fuzzy-Matching (FuzzyWuzzy) - nur das Beste Match

Ich versuche zu fuzzy-match-zwei csv-Dateien, die jeweils eine Spalte von Namen, die ähnliche aber nicht die gleichen.

Mein code bisher wie folgt aus:

import pandas as pd
from pandas import DataFrame
from fuzzywuzzy import process
import csv

save_file = open('fuzzy_match_results.csv', 'w')
writer = csv.writer(save_file, lineterminator = '\n')

def parse_csv(path):

with open(path,'r') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        yield row


if __name__ == "__main__":
## Create lookup dictionary by parsing the products csv
data = {}
for row in parse_csv('names_1.csv'):
    data[row[0]] = row[0]

## For each row in the lookup compute the partial ratio
for row in parse_csv("names_2.csv"):
    #print(process.extract(row,data, limit = 100))
    for found, score, matchrow in process.extract(row, data, limit=100):
        if score >= 60:
            print('%d%% partial match: "%s" with "%s" ' % (score, row, found))
            Digi_Results = [row, score, found]
            writer.writerow(Digi_Results)


save_file.close()

Die Ausgabe ist wie folgt:

Name11 , 90 , Name25 
Name11 , 85 , Name24 
Name11 , 65 , Name29

Das Skript funktioniert. Die Ausgabe ist wie erwartet.
Aber was ich Suche, ist nur das beste match.

Name11 , 90 , Name25
Name12 , 95 , Name21
Name13 , 98 , Name22

Also muss ich irgendwie ablegen, die doppelte Namen in Spalte 1, basierend auf dem höchsten Wert in Spalte 2.
Es sollte ziemlich einfach sein, aber ich kann nicht scheinen, um es herauszufinden.
Jede Hilfe würde geschätzt werden.

Ein straight-forward Weg ist, um zwei temp-Wert Datensatz der aktuelle Datensatz ist höchste übereinstimmung und die Bewertung. Dann nur schreiben, dass Sie die Datei sofort nach der inneren Schleife beendet

InformationsquelleAutor Kvothe | 2015-08-17

Schreibe einen Kommentar