Как перебрать максимальные значения для Fuzz Ratio и экспортировать в новый файл CSV - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь написать код, который будет принимать два списка имен из двух файлов CSV, и использовать библиотеку fuzzywuzzy, чтобы найти наиболее похожие сравнения и экспортировать их в третий файл CSV.

Две проблемы с моим кодом:

  • Во-первых, он не оптимизирует, просто экспортирует все вычисляемые мной коэффициенты.
  • Во-вторых, все экспортируется в один столбецвместо того, чтобы вставлять все значения в соответствующие столбцы, такие как CSV1, CSV2, Fuzz Ratio

    from fuzzywuzzy import fuzz
    import csv
    
    with open('Documents/test_CSV_1.csv', 'r') as t1, open('Documents/test_CSV_2.csv', 'r') as t2:
        fileone = t1.readlines()
        filetwo = t2.readlines()
    
    with open('update.csv', 'w') as outFile:
        for i in fileone:
            for j in filetwo:
                outFile.write(i + j+ str(fuzz.ratio(i,j)) + ", " + "\n")
    

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете попробовать следующий код:

Импортировать пакеты

import pandas as pd
from fuzzywuzzy import fuzz

Прочитать два файла CSV:

df1 = pd.read_csv(''Documents/test_CSV_1.csv')
df2 = pd.read_csv('Documents/test_CSV_2.csv')

Создать пустой список

matched_names = []

Напишите Fuzzywuzzy, соответствующий коду

for row1 in df1.index:
    name1 = df1.get_value(row1,"Name1") #Name1 is the column name of df1 of an entity to be matched
    for row2 in df2.index:
        name2= df2.get_value(row2,"Name2")  #Name2 is the column name of df2 of entity to be matched
        matched_token=fuzz.partial_ratio(name1,name2)
        if matched_token> 80: #This is the threshold, you can change according to your neds
            matched_names.append([name1,name2,matched_token])

Запишите список в df и csv:

df_partial_ratio = pd.DataFrame(columns=['name1', 'name2','matched_token'], data=matched_names)
df_partial_ratio.to_csv("Output.csv",  encoding='utf-8')

В качестве альтернативы вы также можете использовать следующие функции, такие как fuzz.ratio и fuzz.token_sort_ratio в соответствии с вашими данными и потребностями.Эти функции можно использовать, просто изменив строку в коде, как показано ниже:

matched_token=fuzz.ratio(name1,name2)
matched_token=fuzz.token_sort_ratio(name1,name2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...