Rumah > pembangunan bahagian belakang > Tutorial Python > NoisOCR: Perpustakaan Python untuk Mensimulasikan Teks Noisy Pasca-OCR

NoisOCR: Perpustakaan Python untuk Mensimulasikan Teks Noisy Pasca-OCR

Susan Sarandon
Lepaskan: 2024-10-13 06:16:30
asal
919 orang telah melayarinya

NoisOCR: A Python Library for Simulating Post-OCR Noisy Texts

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

Ciri-ciri

  • Tingkap gelongsor: Pisahkan teks panjang kepada segmen yang lebih kecil tanpa memecahkan perkataan.
  • Tetingkap gelongsor dengan sempang: Gunakan sempang untuk memasukkan perkataan dalam had aksara.
  • Simulasikan ralat teks: Tambahkan ralat rawak untuk mensimulasikan teks pasca-OCR ketepatan rendah.
  • Simulasikan anotasi teks: Masukkan anotasi seperti yang terdapat dalam set data BRESSAY untuk menandakan perkataan atau frasa dalam teks.

Pemasangan

Anda boleh memasang NoisOCR dengan mudah melalui pip:

pip install noisocr
Salin selepas log masuk

Contoh Penggunaan

1. Tingkap Gelongsor

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.'
# ]
Salin selepas log masuk

2. Tetingkap Gelongsor dengan Sempang

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.'
# ]
Salin selepas log masuk

3. Mensimulasikan Ralat Teks

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!
Salin selepas log masuk

4. Mensimulasikan Anotasi Teks

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.
Salin selepas log masuk

Gambaran Keseluruhan Kod

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.

1. Simulate_annotation Function

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
Salin selepas log masuk

2. Simulate_errors Fungsi

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
Salin selepas log masuk

3. sliding_window dan sliding_window_with_hyphenation Functions

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
Salin selepas log masuk

Kesimpulan

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!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan