Понимание is_junk и auto_junk в SequenceMatcher в python [модуль difflib] - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь понять роль 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

Мои вопросы

  1. Как вы можете видеть, с установкой is_junk, get_matching_block возвращает вывод, включая пробел. Но is_junk установлен, чтобы игнорировать его. тогда почему он это рассматривает?

  2. роль auto_junk?

  3. Когда мы должны использовать is_junk, поскольку настройка None работает хорошо?

Пожалуйста, приведите несколько примеров для понимания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...