NoisOCR は、光学式文字認識 (OCR) 後に生成されたテキストのノイズをシミュレートするように設計された Python ライブラリです。これらのテキストには、低品質の文書や原稿で OCR を処理する際の課題を反映して、エラーや注釈が含まれている場合があります。このライブラリは、OCR 後のテキストにおける一般的なエラーのシミュレーションや、ハイフネーションの有無にかかわらず、テキストをスライディング ウィンドウに分割することを容易にする機能を提供します。これは、スペル修正のためのニューラル ネットワーク モデルのトレーニングに貢献できます。
GitHub リポジトリ: NoisOCR
PyPI: PyPI 上の NoisOCR
pip 経由で NoisOCR を簡単にインストールできます:
pip install noisocr
この関数は、単語をそのままにしながら、テキストを限られたサイズのセグメントに分割します。
import noisocr text = "Lorem Ipsum is simply dummy...type specimen book." max_window_size = 50 windows = noisocr.sliding_window(text, max_window_size) # Output: # [ # 'Lorem Ipsum is simply dummy text of the printing', # ... # 'type and scrambled it to make a type specimen', # 'book.' # ]
ハイフネーションを使用する場合、関数は必要に応じてハイフンを挿入することで、ウィンドウごとの文字制限を超える単語を収めようとします。この機能は、PyHyphen パッケージを通じて複数の言語をサポートします。
import noisocr text = "Lorem Ipsum is simply dummy...type specimen book." max_window_size = 50 windows = noisocr.sliding_window_with_hyphenation(text, max_window_size, 'en_US') # Output: # [ # 'Lorem Ipsum is simply dummy text of the printing ', # 'typesetting industry. Lorem Ipsum has been the in-', # ... # 'scrambled it to make a type specimen book.' # ]
simulator_errors 関数を使用すると、ユーザーはテキストにランダムなエラーを追加して、OCR 後のテキストでよく見られる問題をエミュレートできます。タイポ ライブラリは、文字の入れ替え、スペースの欠落、余分な文字などのエラーを生成します。
import noisocr text = "Hello world." text_with_errors = noisocr.simulate_errors(text, interactions=1) # Output: Hello, wotrld! text_with_errors = noisocr.simulate_errors(text, 2) # Output: Hsllo,wlorld! text_with_errors = noisocr.simulate_errors(text, 5) # Output: fllo,w0rlr!
注釈シミュレーション機能を使用すると、BRESSAY データセットの注釈を含む一連の注釈に基づいて、テキストにカスタム マーキングを追加できます。
import noisocr text = "Hello world." text_with_annotation = noisocr.simulate_annotation(text, probability=0.5) # Output: Hello, $$--xxx--$$ text_with_annotation = noisocr.simulate_annotation(text, probability=0.5) # Output: Hello, ##--world!--## text_with_annotation = noisocr.simulate_annotation(text, 0.01) # Output: Hello world.
NoisOCR ライブラリのコア機能は、エラーをシミュレートする typo や、さまざまな言語間での単語のハイフネーションを管理する hyphen などのライブラリを活用することに基づいています。以下は重要な機能の説明です。
simulator_annotation 関数は、テキストからランダムな単語を選択し、定義された一連の注釈に従ってそれに注釈を付けます。
import random annotations = [ '##@@???@@##', '$$@@???@@$$', '@@???@@', '##--xxx--##', '$$--xxx--$$', '--xxx--', '##--text--##', '$$--text--$$', '##text##', '$$text$$', '--text--' ] def simulate_annotation(text, annotations=annotations, probability=0.01): words = text.split() if len(words) > 1: target_word = random.choice(words) else: return text if random.random() < probability: annotation = random.choice(annotations) if 'text' in annotation: annotated_text = annotation.replace('text', target_word) else: annotated_text = annotation result_text = text.replace(target_word, annotated_text, 1) return result_text else: return text
simulator_errors 関数は、タイプミス ライブラリからランダムに選択されたさまざまなエラーをテキストに適用します。
import random import typo def simulate_errors(text, interactions=3, seed=None): methods = ["char_swap", "missing_char", "extra_char", "nearby_char", "similar_char", "skipped_space", "random_space", "repeated_char", "unichar"] if seed is not None: random.seed(seed) else: random.seed() instance = typo.StrErrer(text) method = random.choice(methods) method_to_call = getattr(instance, method) text = method_to_call().result if interactions > 0: interactions -= 1 text = simulate_errors(text, interactions, seed=seed) return text
これらの関数は、ハイフネーションの有無にかかわらず、テキストをスライディング ウィンドウに分割します。
from hyphen import Hyphenator def sliding_window_with_hyphenation(text, window_size=80, language='pt_BR'): hyphenator = Hyphenator(language) words = text.split() windows = [] current_window = [] remaining_word = "" for word in words: if remaining_word: word = remaining_word + word remaining_word = "" if len(" ".join(current_window)) + len(word) + 1 <= window_size: current_window.append(word) else: syllables = hyphenator.syllables(word) temp_word = "" for i, syllable in enumerate(syllables): if len(" ".join(current_window)) + len(temp_word) + len(syllable) + 1 <= window_size: temp_word += syllable else: if temp_word: current_window.append(temp_word + "-") remaining_word = "".join(syllables[i:]) + " " break else: remaining_word = word + " " break else: current_window.append(temp_word) remaining_word = "" windows.append(" ".join(current_window)) current_window = [] if remaining_word: current_window.append(remaining_word) if current_window: windows.append(" ".join(current_window)) return windows
NoisOCR は、OCR 後のテキスト修正に取り組む人に不可欠なツールを提供し、デジタル化されたテキストにエラーや注釈が入りやすい現実のシナリオを簡単にシミュレートできるようにします。自動テスト、テキスト修正モデルの開発、または BRESSAY のようなデータセットの分析のいずれの場合でも、このライブラリは多用途でユーザーフレンドリーなソリューションです。
GitHub: NoisOCR でプロジェクトをチェックし、その改善に貢献してください!
以上がNoisOCR: OCR後のノイズの多いテキストをシミュレートするためのPythonライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。