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'

licensed under cc by-sa 3.0 with attribution.