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

2024-09-30 01:26:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为自己创建一个小数据框或条目列表,如果你愿意的话。我希望能够在这个数据库中搜索特定的条目。代码的工作方式正是我想要的,即使它可能不是最优雅的写作方式-我仍然是新的python和我刚刚发现了csv模块的前几天-。我可以输入一个短语,它会给我相应的单词的百分比值

该文件是一个CSV文件的形式,我想有一个百分比值排序的输出。所以,最相关的匹配应该在顶部,最不相关的应该在底部。我使用fuzzylogic来计算两个字符串之间的相似性,但是我使用了difflib

最终结果是按字母顺序排序的,但不是按数字排序的,这是我的目标。我尝试过使用Panda,但是我得到了一大堆错误,可能是我的错,因为我不知道如何使用它,但是我想坚持使用“纯”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')]

Tags: csvimportindex排序条目columncustomerreader
1条回答
网友
1楼 · 发布于 2024-09-30 01:26:29

如果要对结果进行排序,则必须创建一个排序的结果列表,这将需要额外的内存来存储-您的代码只是在两个列表中动态生成的成对序列中进行迭代

使用内置的^{}函数和^{}可以很容易地创建一个key函数,作为用于排序项目的值—如下所示

我还修复了我注意到的其他一些小问题

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')]

相关问题 更多 >

    热门问题