1

私はSequenceMatcherテキストのグループ内の単語のセットを見つけるために使用しています。私が抱えている問題は、一致するものが見つからない場合に記録する必要があるということですが、テキストごとに1回です。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を初めて使用します。どうもありがとうございます!

4

2 に答える 2

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!

于 2011-11-22T00:27:58.153 に答える
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 に答える