NoisOCR ialah perpustakaan Python yang direka bentuk untuk mensimulasikan hingar dalam teks yang dijana selepas Pengecaman Aksara Optik (OCR). Teks ini mungkin mengandungi ralat atau anotasi, mencerminkan cabaran mengendalikan OCR dalam dokumen atau manuskrip berkualiti rendah. Perpustakaan ini menawarkan ciri yang memudahkan simulasi ralat biasa dalam teks pasca OCR dan membahagikan teks ke dalam tetingkap gelongsor, dengan atau tanpa tanda sempang. Ini boleh menyumbang kepada latihan model rangkaian saraf untuk pembetulan ejaan.
Repositori GitHub: NoisOCR
PyPI: NoisOCR pada PyPI
Anda boleh memasang NoisOCR dengan mudah melalui pip:
pip install noisocr
Fungsi ini membahagikan teks kepada segmen bersaiz terhad, memastikan perkataan tetap utuh.
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.' # ]
Apabila menggunakan tanda sempang, fungsi ini cuba memuatkan perkataan yang melebihi had aksara setiap tetingkap dengan memasukkan tanda sempang jika perlu. Fungsi ini menyokong berbilang bahasa melalui pakej 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.' # ]
Fungsi simulate_errors membolehkan pengguna menambah ralat rawak pada teks, meniru isu yang biasa ditemui dalam teks pasca OCR. Pustaka typo menjana ralat, seperti pertukaran aksara, ruang yang tiada, aksara tambahan dan banyak lagi.
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!
Ciri simulasi anotasi membolehkan pengguna menambah penanda tersuai pada teks berdasarkan set anotasi, termasuk yang daripada set data 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.
Fungsi teras pustaka NoisOCR adalah berdasarkan memanfaatkan perpustakaan seperti kesilapan menaip untuk mensimulasikan ralat dan sempang untuk mengurus sempang perkataan merentas bahasa yang berbeza. Di bawah ialah penjelasan tentang fungsi kritikal.
Fungsi simulate_annotation memilih perkataan rawak daripada teks dan menganotasikannya, mengikut set anotasi yang ditentukan.
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
Fungsi simulate_errors menggunakan pelbagai ralat pada teks, dipilih secara rawak daripada pustaka typo.
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
Fungsi ini bertanggungjawab untuk membahagikan teks kepada tetingkap gelongsor, dengan atau tanpa tanda sempang.
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 menyediakan alatan penting untuk mereka yang bekerja pada pembetulan teks selepas OCR, menjadikannya lebih mudah untuk mensimulasikan senario dunia sebenar di mana teks didigitalkan terdedah kepada ralat dan anotasi. Sama ada untuk ujian automatik, pembangunan model pembetulan teks atau analisis set data seperti BRESSAY, pustaka ini ialah penyelesaian yang serba boleh dan mesra pengguna.
Lihat projek di GitHub: NoisOCR dan menyumbang kepada peningkatannya!
Atas ialah kandungan terperinci NoisOCR: Perpustakaan Python untuk Mensimulasikan Teks Noisy Pasca-OCR. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!