SequenceMatcher:只记录一次匹配?

时间:2011-11-21 23:10:42

标签: python if-statement 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.matchre.find,我遇到了同样的问题。 上面的代码是我正在做的简单版本。我也是Python的新手。 非常感谢你!

2 个答案:

答案 0 :(得分:0)

简单的方法是跟踪匹配的名称,如果已经打印则不打印它们:

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'

答案 1 :(得分:0)

如果我正确地解释了您对该问题的评论(但我不是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],但应该已经输出您要存储的信息。

HTH!