У меня есть список месяцев на латыни:
latinMonths = ['januarii', 'februarii','martii', 'aprilis', 'maii', 'junii', 'julii', 'augusti', 'septembris', 'octobris', 'novembris', 'decembris']
которые, к сожалению, в моем тексте я нахожу, что их варианты различаются по-разному: "januarij" или "septembrjs" и т.д....
Я пытаюсь отсканировать текст, чтобы найти точное слово в виде списка или его вариантов.
Я знаю, что могу использовать difflib и обнаружил, что могу проверить предложение со списком слов в этом сообщении: Python: как определить, существует ли список слов в строке. Есть ли способ, которым я могу объединить оба, таким образом находя экземпляр в строке, где существуют месяцы в списке или ее вариациях?
ex: Если у меня есть текст "primo januarij 1487", я хотел бы вернуть true, поскольку januarij - это близкое совпадение с январем, а если у меня есть "я люблю помидоры", ни одно из слов не является близким совпадением или точным соответствием словам в список
Возможное решение может быть достигнуто с помощью 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