Я пытаюсь понять роль is_junk и auto_junk в SequenceMatcher модуля difflib python. Но я не могу понять эту часть.
Из документации
isjunk должно быть None (по умолчанию) или функцией с одним аргументом, которая принимает элемент последовательности и возвращает true тогда и только тогда, когда элемент является «мусорным» и должен игнорироваться. Передача None для isjunk эквивалентна передаче lambda x: False; другими словами, никакие элементы не игнорируются.
Это означает, что всякий раз, когда нам нужно игнорировать определенные символы, мы можем определить в is_junk для игнорирования цели. Однако в приведенной ниже программе, почему он рассматривает пространство как общие совпадения? Он должен был игнорировать пробел.
import difflib
#Without the Is_junk ,setting the value as None
string1 = " abc def"
string2 = " abc def"
sequence_matcher = difflib.SequenceMatcher(None, string1, string2)
match = sequence_matcher.find_longest_match(0, len(string1), 0, len(string2))
print(sequence_matcher.get_matching_blocks())
print (string1[match.a:match.a + match.size])
[Match (a = 0, b = 0, size = 8), Match (a = 8, b = 8, size = 0)]
ab c def
import difflib
string1 = " abc def"
string2 = " abc def"
is_junk = lambda x: x in " _"
sequence_matcher = difflib.SequenceMatcher(is_junk, string1, string2)
match = sequence_matcher.find_longest_match(0, len(string1), 0, len(string2))
print(sequence_matcher.get_matching_blocks())
print (string1[match.a:match.a + match.size])
[Match (a = 0, b = 0, size = 8), Match (a = 8, b = 8, размер = 0)]
ab c
Мои вопросы
Как вы можете видеть, с установкой is_junk, get_matching_block возвращает вывод, включая пробел. Но is_junk установлен, чтобы игнорировать его. тогда почему он это рассматривает?
роль auto_junk?
Когда мы должны использовать is_junk, поскольку настройка None работает хорошо?
Пожалуйста, приведите несколько примеров для понимания.