18

テキストの大きなチャンクに対して OCR を実行し、特定の文字列が含まれているかどうかを確認する必要がありますが、OCR が不正確であるため、文字列に約 85% 一致するものが含まれているかどうかを確認する必要があります。

たとえば、テキストのチャンクをOCRして含まれていないことを確認する場合がありますno information availableが、OCRはn0 inf0rmation available多くの文字を認識または誤解する可能性があります。

Pythonでこれを行う簡単な方法はありますか?

4

5 に答える 5

35

が投稿したgaudenようSequenceMatcherdifflib、簡単な方法です。を使用すると、ドキュメントから、2 つの文字列間の類似性の間の値とそれに対応する値ratio()が返されます。01

ここで、T は両方のシーケンスの要素の総数、M は一致の数です。これは 2.0*M / T です。シーケンスが同一の場合は 1.0、共通点がない場合は 0.0 であることに注意してください。

例:

>>> import difflib
>>> difflib.SequenceMatcher(None,'no information available','n0 inf0rmation available').ratio()
0.91666666666666663

またget_close_matches、便利な もあります。距離カットオフを指定すると、リストからその距離内にあるすべての一致が返されます。

>>> difflib.get_close_matches('unicorn', ['unicycle', 'uncorn', 'corny', 
                              'house'], cutoff=0.8)
['uncorn']
>>> difflib.get_close_matches('unicorn', ['unicycle'  'uncorn', 'corny',
                              'house'], cutoff=0.5)
['uncorn', 'corny', 'unicycle']

更新:部分的なサブシーケンスの一致を見つける

3 つの単語シーケンスに近い一致を見つけるには、テキストを単語に分割し、それらを 3 つの単語シーケンスにグループ化してから、次difflib.get_close_matchesのように適用します。

import difflib
text = "Here is the text we are trying to match across to find the three word
        sequence n0 inf0rmation available I wonder if we will find it?"    
words = text.split()
three = [' '.join([i,j,k]) for i,j,k in zip(words, words[1:], words[2:])]
print difflib.get_close_matches('no information available', three, cutoff=0.9)
#Oyutput:
['n0 inf0rmation available']
于 2012-06-01T11:31:59.087 に答える
6

標準ライブラリモジュールのSequenceMatcherオブジェクトは、比率を直接提供します:difflib

于 2012-06-01T11:19:49.267 に答える
4

レーベンシュタイン距離を計算できます。Pythonの実装の1つを次に示します。http://pypi.python.org/pypi/python-Levenshtein/

于 2012-06-01T11:16:21.880 に答える
0

すぐに使用できる Python ライブラリについては知りませんが、見つけることができるかもしれません (または、C または C++ ライブラリを見つけて、そのための Python ラッパーを作成します)。

また、与えられた 2 つの文字間の「近接性」を定義し、これらの規則に基づいて「精度」を計算するルールを使用して、文字ごとの「ブルート フォース」比較に基づいて、独自のソリューションを展開することもできます (つまり、「o」 => "0" : 90% の精度、"o" => "w" : 1% の精度など)、またはより複雑な IA で遊ぶ (IA に慣れていない場合は、"Programming Collective Intelligence" の本を参照してください)やや貧弱な実装例にもかかわらず、開始しました)。

于 2012-06-01T11:28:58.667 に答える