SequenceMatcher не может различить «заменить» и «вставить» - PullRequest
0 голосов
/ 28 октября 2019

Первый пример:

one = ['billy', 'sally', 'gd', 'kk', 'btb']
two = ['billy', 'sally', 'hh', 'kk', 'ff', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()

правильно возвращает insert ff :

[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 9, 6, 9), ('insert', 9, 9, 9, 11), ('equal', 9, 10, 11, 12)]
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 9, 6, 9), ('delete', 9, 11, 9, 9), ('equal', 11, 12, 9, 10)]

Теперь я бы хотел get_opcodes() найти 'insert', который находится рядом с 'replace' ... но это невозможно.

Второй пример:

one = ['billy', 'sally', 'gd', 'kk', 'btb']
two = ['billy', 'sally', 'hh', 'kk1', 'ff', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()

возвращает:

[('equal', 0, 2, 0, 2), ('replace', 2, 4, 2, 5), ('equal', 4, 5, 5, 6)]
[('equal', 0, 2, 0, 2), ('replace', 2, 5, 2, 4), ('equal', 5, 6, 4, 5)]

В следующем примере мы заставляем разницу быть распознанной . Я добавил отступы ... что удивительно игнорируется ... это так удивительно, потому что 'kk' в первом примере 1031 * действует как заполнение, мешая 'gd' против 'hh' бытьсчитается частью 'ff' вставки

Третий пример:

one = ['///////', 'billy', '///////', 'sally', '///////', 'gd', '///////', 'kk', '///////', 'btb']
two = ['///////', 'billy', '///////', 'sally', '///////', 'hh', '///////', 'kk1', '///////', 'ff', '///////', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()

возвращает:

[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 7, 6, 7), ('replace', 7, 8, 7, 10), ('equal', 8, 10, 10, 12)]
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 7, 6, 7), ('replace', 7, 10, 7, 8), ('equal', 10, 12, 8, 10)]

Еще раз, не в состоянии распознатьвведите значение ff , когда оно явно там.

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