1

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 新手。非常感谢你!

4

2 回答 2

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'
于 2011-11-21T23:30:07.663 回答
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] 工作,而且应该已经输出你想要存储的信息。

于 2011-11-22T00:27:58.153 回答