SequenceMatcher: запись не совпадает только один раз?
Я использую SequenceMatcher
найти набор слов в группе текстов. Проблема, с которой я столкнулся, заключается в том, что мне нужно записывать, когда совпадение не найдено, а один раз на текст. Если я пытаюсь использовать оператор if, он дает мне результат каждый раз, когда сравнение с другим словом не удается.
names=[JOHN, LARRY, PETER, MARY]
files = [path or link]
for file in files:
for name in names:
if SequenceMatcher(None, name, file).ratio() > .9:
do something
else:
print name + 'not found'
Я также пытался re.match
а также re.find
и я сталкиваюсь с той же проблемой. Приведенный выше код является простой версией того, что я делаю. Я тоже новичок в Python. Большое спасибо!
2 ответа
Если я правильно интерпретирую ваш комментарий к вопросу (но я не уверен на 100%!), Это может проиллюстрировать общий механизм, которым вы можете следовать:
>>> text = 'If JOHN would be married to PETER, then MARY would probably be unhappy'
>>> names = ['JOHN', 'LARRY', 'PETER', 'MARY']
>>> [text.find(name) for name in names]
[3, -1, 28, 40] #This list will be always long as the names list
Под "механизмом, которым вы можете следовать" я подразумеваю, что SequenceMatcher
(что я подставил встроенным методом find
) должен не только работать как тест [True|False], но уже выводить информацию, которую вы хотите сохранить.
НТН!
Простой способ - отслеживать совпадающие имена и не печатать их, если они уже были напечатаны:
seen = {}
for file in files:
for name in names:
if SequenceMatcher(None, name, file).ratio() > .9:
do something
elif name not in seen:
seen[name] = 0
print name + 'not found'