开发者社区> 问答> 正文

根据模糊逻辑结果对CSV文件的搜索结果进行排序

我试图为自己创建一个小的数据框架或条目列表。我希望能够搜索这个数据库的具体条目。代码以我想要的方式工作,即使它可能不是最优雅的方式来编写它-我仍然是python的新手,我刚刚发现了csv模块前几天-。我可以输入一个短语,它会给出相应的单词和百分比值。 该文件是CSV文件的形式,我希望按百分比值对输出进行排序。因此,最相关的匹配应该在顶部,最不相关的应该在底部。我使用fuzzylogic来计算两个字符串之间的相似性,但是我使用了difflib。 最终结果是按字母顺序排列的,而不是按数字顺序,这是我的目标。我有试着用熊猫,但是我得到一大堆的错误,可能是我的错,因为我不知道如何使用它,但我想坚持“纯”python,可以说,目前因为我想更好地挂了。 总结一下我的整个问题:你对数字排序结果的解决方案是什么? 我将非常感谢你的帮助,感谢你花时间阅读这篇长文。

try:
        import csv,os,difflib,easygui,pickle,sys
        from fuzzywuzzy import fuzz
        from fuzzywuzzy import process
        import operator 

except ModuleNotFoundError:
    print ("You do not have the required modules installed.The progam will now close.")
    raise SystemExit

Suche = "Kunde"
Wahrscheinlichkeit = 60

Eintrag=[]
def aehnlichkeit(a, b)  
    ergebnis = fuzz.token_sort_ratio(a,b)
    return round (ergebnis,2)
with open('Platzhalter_Message_Keys.csv', 'rt') as csvfile: 
    Column=[]
    reader = csv.reader(csvfile, delimiter=';')
    for row in reader: 
        column=row[0],row[1],row[2]
        Column.append(column)
        eintrag=aehnlichkeit(Suche,row[1])
        Eintrag.append(eintrag)

    for Column,Eintrag in zip (Column,Eintrag): 
        if Eintrag >=Wahrscheinlichkeit:
            print([Eintrag,Column])

代码输出

[60, (' Index', 'Index', 'Index')]
[60, (' Keine', 'Keine', 'none')]
[100, (' Kunde', 'Kunde', 'Customer')]
[67, (' Kundenname', 'Kundenname', 'CustomerName')]
[77, (' Kundennr', 'Kundennr', 'CustomerNo')]
[62, (' KurzName', 'KurzName', 'ShortName')]
[62, (' Reklamation.Kunde_Email', 'Kunde_Email', 'Customer_email')]
[62, (' Reklamation.Kunde_L_Fax', 'Kunde_L_Fax', 'Customer_S_Fax')]
[62, (' Reklamation.Kunde_L_Ort', 'Kunde_L_Ort', 'Customer_S_City')]
[62, (' Reklamation.Kunde_L_PLZ', 'Kunde_L_PLZ', 'Customer_S_ZIPCode')]
[62, (' Reklamation.Kunde_R_Fax', 'Kunde_R_Fax', 'Customer_I_Fax')]
[62, (' Reklamation.Kunde_R_Ort', 'Kunde_R_Ort', 'Customer_I_City')]
[62, (' Reklamation.Kunde_R_PLZ', 'Kunde_R_PLZ', 'Customer_I_POBox')]

问题来源StackOverflow 地址:/questions/59380298/sorting-search-results-of-a-csv-file-according-to-the-fuzzy-logic-result

展开
收起
kun坤 2019-12-28 14:24:55 570 0
1 条回答
写回答
取消 提交回答
  • 如果想要对结果排序,就必须创建一个排序后的列表,这将需要额外的内存来存储—您的代码只是遍历两个列表中动态生成的对序列。 这很容易通过内置的sort()函数和operator.itemgetter()来实现,从而创建一个键函数作为对项进行排序的值——如下所示。 我还修复了一些我注意到的其他小问题。

    import csv
    from operator import itemgetter
    
    HI_TO_LO = False  # Order of sorted results.
    Eintrag = [60, 60, 100, 67, 77, 62, 62, 62, 62, 62, 62, 62, 62]
    Wahrscheinlichkeit = 60
    
    with open('Platzhalter_Message_Keys.csv', 'rt', newline='') as csvfile:
        Column=[]
    
        reader = csv.reader(csvfile, delimiter=';', skipinitialspace=True)
        for row in reader:
            column = row[0], row[1], row[2]
            Column.append(column)
            # Using hardcoded values for example.
            #eintrag = aehnlichkeit(Suche, row[1])
            #Eintrag.append(eintrag)
    
        sorted_results = sorted(zip(Column, Eintrag), key=itemgetter(1), reverse=HI_TO_LO)
        for Column, Eintrag in sorted_results:
            if Eintrag >= Wahrscheinlichkeit:
                print([Eintrag, Column])
    

    输出:

    [60, ('Index', 'Index', 'Index')]
    [60, ('Keine', 'Keine', 'none')]
    [62, ('KurzName', 'KurzName', 'ShortName')]
    [62, ('Reklamation.Kunde_Email', 'Kunde_Email', 'Customer_email')]
    [62, ('Reklamation.Kunde_L_Fax', 'Kunde_L_Fax', 'Customer_S_Fax')]
    [62, ('Reklamation.Kunde_L_Ort', 'Kunde_L_Ort', 'Customer_S_City')]
    [62, ('Reklamation.Kunde_L_PLZ', 'Kunde_L_PLZ', 'Customer_S_ZIPCode')]
    [62, ('Reklamation.Kunde_R_Fax', 'Kunde_R_Fax', 'Customer_I_Fax')]
    [62, ('Reklamation.Kunde_R_Ort', 'Kunde_R_Ort', 'Customer_I_City')]
    [62, ('Reklamation.Kunde_R_PLZ', 'Kunde_R_PLZ', 'Customer_I_POBox))')]
    [67, ('Kundenname', 'Kundenname', 'CustomerName')]
    [77, ('Kundennr', 'Kundennr', 'CustomerNo')]
    [100, ('Kunde', 'Kunde', 'Customer')]
    
    2019-12-28 14:25:01
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
《开放搜索查询分析服务架构分享》 立即下载
4个迭代,从批量交...1573957773.pdf 立即下载
RowKey与索引设计:技巧与案例分析 立即下载