def compare_strings(cls, string1, string2, *, tolerance=None,
method='uwratio'):
"""
Check if the strings provided have a similarity ratio within the
specified tolerance.
Return True if yes, otherwise return False.
Use fuzzywuzzy (https://pypi.python.org/pypi/fuzzywuzzy).
:param string1: str
:param string2: str
:param tolerance: number
:param method: str, one of: 'uwratio', 'partial_ratio',
'token_sort_ratio', 'token_set_ratio',
'ratio'
:rtype: bool
:Example:
>>> MatchBlock.compare_strings('Beatles', 'The Beatles', tolerance=10)
True
>>> MatchBlock.compare_strings('AB', 'AC', tolerance=0, method='ratio')
False
"""
str_number = any(
char.isdigit() for string in (string1, string2) for char in string)
if tolerance is None:
if str_number:
tolerance = cls.str_number_tolerance
else:
tolerance = cls.string_tolerance
if not str_number:
if cls.is_abbreviation(string1, string2):
return True
methods = {'uwratio': fuzz.UWRatio,
'partial_ratio': fuzz.partial_ratio,
'token_sort_ratio': fuzz.token_sort_ratio,
'token_set_ratio': fuzz.token_set_ratio,
'ratio': fuzz.ratio}
if method not in methods:
msg = 'wrong method, use available: {}'
raise ValueError(msg.format(', '.join(sorted(methods))))
return methods[method](string1, string2) >= 100 - tolerance
评论列表
文章目录