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'
Другие вопросы по тегам