Python从列表及其变体中创建正则表达式

时间:2018-07-27 12:11:12

标签: python list difflib

我有一个拉丁美洲月份的清单:

latinMonths = ['januarii', 'februarii','martii', 'aprilis', 'maii', 'junii', 'julii', 'augusti', 'septembris', 'octobris', 'novembris', 'decembris']

不幸的是,在我的文字中,我发现它们的变体拼写不同,例如:“ januarij”或“ septembrjs”等...

我正在尝试扫描文本以查找与列表或变体形式完全相同的词。

我知道我可以使用difflib并发现我可以在这篇文章中检查一个带有单词列表的句子:Python: how to determine if a list of words exist in a string。有什么办法可以将两者结合起来,从而在字符串中找到一个实例,该实例中存在列表中的月份或它的变体?

ex:如果我有文本“ primo januarij 1487”,我想返回true,因为januarij与january非常接近,而如果我有“ I love Tomatos”,则两个单词都不是与之完全匹配或完全匹配。列表中的单词

1 个答案:

答案 0 :(得分:1)

使用fuzzywuzzy可以实现以下可能的解决方案:

from fuzzywuzzy import fuzz

def fuzzy_months(text:str, months:list, treshold:float = 0.9)->bool:
    """Return if a word within the given text is close enough to any given month."""
    return max([fuzz.ratio(month,word) for month in latinMonths for word in test_string.split()])/100>= treshold

例如,考虑以下短语test_string = 'lorem ipsum siptum abet septembrjs'fail_string = 'do you want to eat at McDonald?'

fuzzy_months(test_string, latinMonths)
>>> True

fuzzy_months(fail_string, latinMonths)
>>> False