如何遍历Fuzz Ratio的最大值并导出到新的CSV文件

时间:2018-09-18 14:13:39

标签: python python-3.x fuzzy-comparison fuzzywuzzy

我正在尝试编写一些代码,这些代码将从两个csv文件中提取两个名称列表,并使用fuzzywuzzy库查找最相似的比较并将它们导出到第三个csv文件中。

我的代码有两个问题:

  • 首先,它并没有优化,只是导出了我正在计算的所有比率。
  • 第二,它们全部导出到单个列,而不是将所有值都粘贴在自己的相关列中,即CSV1,CSV2,模糊比

    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 :(得分:1)

您可以尝试以下代码:

导入软件包

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 = []

编写模糊模糊匹配代码

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.ratiofuzz.token_sort_ratio。只需在下面的代码中更改一行即可使用这些功能:

matched_token=fuzz.ratio(name1,name2)
matched_token=fuzz.token_sort_ratio(name1,name2)