尝试将Excel Fuzzy逻辑转换为Python函数

时间:2019-04-10 16:15:02

标签: django python-3.x fuzzy-logic

我目前在Excel中使用以下模糊逻辑命令从参考表中选择一个值: =IF(E49>0,VLOOKUP(E49,'Ref Table'!$D$4:$E$22,2,FALSE),"--")

我正在尝试编写Django / Python函数,该函数将提供最接近所提供数字的值。 (例如:得分= 14.5-返回的值为0.021)

我安装了Fuzzywuzzy,但是我不确定这是实现此目的的最佳方法。

下面是到目前为止没有模糊逻辑的函数示例。

@register.simple_tag
def get_perc(score):
    if score is None:
        return '--'
    else:
        pct_dict = {
            14: 0.016,
            14.7: 0.021,
            15.3: 0.026,
            16: 0.034,
            16.7: 0.04,
            17.3: 0.05,
            18: 0.07,
            18.7: 0.09,
            19.3: 0.11,
            20: 0.13,
            20.7: 0.17,
            21.3: 0.21,
            22: 0.26,
            22.7: 0.31,
            23.3: 0.38,
            24: 0.47,
            24.7: 0.56,
            25.3: 0.68,
            26: 0.82,
            26.7: 0.98,
            27.3: 1.17,
            28: 1.39,
            29.3: 1.94,
            30: 2.28
        }
    if score in pct_dict.keys():
        return pct_dict[score]
    else:
        return '--'

(例如:分数= 14.5-返回值为0.021)

2 个答案:

答案 0 :(得分:0)

如果您只是想使用Fuzzywuzzy将输入与某个键进行模糊匹配,则可以尝试如下操作:

dropground()

我对您的原始代码做了一些更改,并在注释中进行了说明。

我从没使用过Fuzzywuzzy,但是基于Fuzzywuzzy自述文件的“用法”部分:https://github.com/seatgeek/fuzzywuzzy

答案 1 :(得分:0)

谢谢,您的帮助很大。我还了解到,与FuzzyWuzzy一起使用的数据必须转换为文本才能正常工作。我能够将数据括在''中,并使用str()转换输入的得分。我目前正在寻找一种在多维数组上使用str()命令的方法,以消除在数据中使用''的需要。

这是我的工作代码:

@register.simple_tag
def get_perc(score):
    MATCH_THRESHOLD = 80
    pct_dict = {'14': '0.016', '14.7': '0.021', '15.3': '0.026', '16': '0.034', '16.7': '0.04', '17.3': '0.05', '18': '0.07', '18.7': '0.09', '19.3': '0.11', '20': '0.13', '20.7': '0.17', '21.3': '0.21', '22': '0.26', '22.7': '0.31', '23.3': '0.38', '24': '0.47'}
    if not score:
        return '--'
    elif score < 24:
        return '<1'

    match, match_score = process.extractOne(str(score), pct_dict.keys())

    if match_score >= MATCH_THRESHOLD:
        return pct_dict[match]
    else:
        return '--'