BookTranslator
BookTranslator

OCR japońskiego tekstu w pionie: zachowanie porządku kolumn i obsługa furigana

Wyciągaj japoński tekst pionowy za pomocą odpowiednich ustawień układu, oddzielaj furiganę od tekstu głównego i sprawdzaj rzeczywiste wyniki OCR z pobieranymi próbnikami.

BookTranslator

BookTranslator Team

12 min read

W przypadku OCR japońskiego tekstu pionowego sprawdź kierunek pisma przed zmianą filtrów obrazu. Użyj japońskiego modelu i ustawienia segmentacji zdolnego do obsługi tekstu pionowego, zweryfikuj kolumny w ich zamierzonej kolejności i zdecyduj, czy potrzebujesz samego tekstu głównego, czy również furigany. Strona pełna rozpoznawalnych znaków może nadal być niezdatną do użytku transkrypcją, jeśli ich kolejność jest błędna.

Przeprowadziliśmy mały, powtarzalny eksperyment lokalny, aby te decyzje stały się konkretne. Konfiguracja pozioma pomieszała nasze trzy kolumny pionowe. Konfiguracja pionowa odzyskała zwykły tekst główny, ale dodanie furigany zmieniło dwa znaki interpunkcyjne, a wycięcie rubinów nie wyeliminowało błędów interpunkcyjnych.

Są to wyniki z celowo małej syntetycznej próbki, a nie roszczenie dotyczące dokładności wszystkich japońskich książek. Pożyteczna lekcja jest węższa: oceniaj rozpoznawanie znaków, kolejność czytania i obsługę adnotacji osobno. Nie wysyłaj wyniku do tłumaczenia tylko dlatego, że wygląda jak japoński.

Najpierw zidentyfikuj tekst, którego faktycznie chcesz

W konwencjonalnej japońskiej kompozycji pionowej znaki postępują w dół linii, a linie przebiegają od prawej do lewej. Ruby to mniejszy tekst powiązany ze znakami bazowymi; furigana zazwyczaj dostarcza ich wymowy. W3C Wymagania dotyczące układu tekstu japońskiego opisuje te kierunki pisma i relacje ruby.

Przed OCR oznacz znaczące regiony strony:

  • główne kolumny pionowe;
  • małe ruby obok treści;
  • nagłówki poziome, podpisy lub tabele;
  • numery stron i żywe paginy;
  • notatki na marginesie lub niepowiązane sąsiednie strony.

Nie traktuj każdego pionowego paska jako niezależnego akapitu. Pasek małej kana obok 図書館 może być jej odczytem, としょかん, a nie następnym zdaniem.

Wybierz politykę wyjściową przed oceną OCR:

Zadanie czytelnikaPożądany wynikCo liczy się jako problem
Szukaj lub tłumacz tekstTekst główny w kolejności; użyteczne odczyty zapisane osobnoRubiny wstawione w prose, pominięty tekst główny, zmieniona kolejność kolumn
Nauka wymowyTekst główny plus poprawnie powiązane odczytyBrakujący rubin lub odczyt przypisany do niewłaściwego słowa
Przygotuj wierną transkrypcjęZachowano tekst główny, relacje adnotacji oraz decyzje redakcyjneCiche usunięcie lub normalizacja materiału, który zamierzałeś zachować

Ten sam wynik może zdać jedno zadanie, a oblać inne. Nasz eksperyment wykorzystuje transkrypcję samego tekstu głównego jako cel porównawczy. Nie traktuje ona braku furigany jako akceptowalnego w wydaniu służącym do nauki wymowy.

Prawdziwy eksperyment OCR składający się z trzech zdań

Próbka wykorzystuje następujące autorskie zdania:

朝の図書館で本を読む。
古い地図には川が見える。
明日は友人と駅で会う。

Opisują one czytanie w bibliotece, widok rzeki na starej mapie oraz spotkanie z przyjacielem na stacji. Po usunięciu podziału wierszy tekst główny składa się z 34 punktów kodowych Unicode, w tym trzech japońskich kropek.

Wyrenderowaliśmy ten sam tekst w trzech formach:

  1. Tekst poziomy.
  2. Trzy kolumny pionowe, czytane od prawej do lewej.
  3. Te same kolumny pionowe z furiganą obok 図書館, 地図, 友人oraz 駅.

Syntetyczna japońska próbka OCR z trzema pionowymi kolumnami czytanymi od prawej do lewej oraz mniejszą furiganą po prawej stronie wybranych słów.

Są to czyste obrazy dydaktyczne, a nie skanowane strony z książki. Renderer używa czcionki Noto Sans CJK JP, znaków głównych o wielkości 64 pikseli, rubinów o wielkości 24 pikseli oraz uproszczonego rozmieszczenia pionowego glif po glifie. Rysuje pionowe kropki jako małe obrysowane kółka w ręcznie wybranych miejscach, zamiast stosować właściwe dla czcionki pozycjonowanie glifów pionowych; w rezultacie wyniki interpunkcyjne nie pozwalają ustalić, jak OCR radzi sobie z poprawnie złomaną książką. Nie odtwarza on wszystkich japońskich zasad składu. W teście nie występują rozmycia, skrzywienia, tekstura papieru, pismo odręczne, typografia historyczna ani strony o mieszanym kierunku czytania.

Silnik, modele i ustawienia

Eksperyment przeprowadzono 7 września 2026 r., używając Tesseract.js 7.0.0 z Tesseract.js-core 7.0.0 lokalnie na systemie macOS ARM64. Wszystkie udane wywołania korzystały z oficjalnych tessdata_fast modeli w komisji 87416418657359cb625c412a48b6e1d6d41c29bd, z OEM 1, czyli trybem wyłącznie silnika LSTM.

Oficjalne repozytorium modeli Tesseract dostarcza oddzielne pliki jpn i jpn_vert pliki. W jego dokumentacji PSM 5 opisano jako jednorodny blok ustawiony pionowo, a PSM 6 jako jednorodny blok tekstu; wybierz założenie segmentacji pasujące do rozpoznawanego regionu. Zobacz dokumentację segmentacji stron.

Nasze zarejestrowane przypadki używały jpn z PSM 6 dla tekstu poziomego, jpn_vert z PSM 5 dla tekstu pionowego oraz celowo niedopasowaną kontrolę pionową jpn/PSM 6. Zarówno model, jak i segmentacja zmieniają się pomiędzy tymi dwoma konfiguracjami pionowymi, więc jest to porównanie przepływu pracy, a nie eksperyment izolujący wpływ któregokolwiek z tych ustawień z osobna.

Początkowa próba z tessdata_best została przerwana w dostępnym rdzeniu WebAssembly przed wygenerowaniem tekstu OCR. Przełączyliśmy się na oficjalne modele całkowitoliczbowe tessdata_fast ze względu na zgodność i zarejestrowaliśmy ten błąd. Z tego przełączenia nie wynikają żadne wnioski na temat dokładności danej rodziny modeli.

Co faktycznie zwrócono

Porównanie usuwa białe znaki i stosuje normalizację Unicode NFC. Ono nie zastępuje interpunkcji, nie poprawia kanji ani nie zmienia układu tekstu. Kompletne surowe wyniki oraz hasze wersji/modelu, CSV porównania treści, oraz adnotacje błędów są do pobrania.

Dane wejściowe i konfiguracjaZaobserwowany wynik dla elementu docelowego zawierającego wyłącznie treść
Poziomo, jpn, PSM 6Wszystkie 34 punkty kodowe pasowały po usunięciu białych znaków
Pionowo, jpn, kontrola PSM 6Dane wyjściowe rozciągały się na kolumny i zawierały podstawienia znaków; proza niezdatna do użytku
Pionowo, jpn_vert, PSM 5Wszystkie 34 punkty kodowe pasowały po usunięciu białych znaków; porządek kolumn był poprawny
Pionowo z furiganą, jpn_vert, PSM 5Tekst główny pozostał w porządku, ale dwa znaki 。 stały się znakami ASCII .; rubiny nie zostały zwrócone jako osobne odczyty
Trzy wycinki kolumn tekstu z obrazu z furiganą, jpn_vert, PSM 5Pierwsza kolumna kończyła się na ., druga na ,, trzecia na 。; przycięcie nie usunęło wszystkich wad interpunkcyjnych

Na przykład w przypadku z furiganą zwrócono tę pierwszą linię:

Expected: 朝の図書館で本を読む。
Observed: 朝 の 図書 館 で 本 を 読む .

Spacje są ignorowane przez naszą określoną regułę porównania. Ostatni znak interpunkcyjny nie jest. Przepływ pracy oparty wyłącznie na wyszukiwaniu mógłby tolerować tę różnicę, ale wierna transkrypcja powinna ją zarejestrować i skorygować.

Niedopasowane sterowanie pionowe rozpoczęło się od 明 古 昌, przeskakując po górnych znakach kolumn zamiast podążać za zamierzonym pierwszym zdaniem. Jego wynik ilustruje, dlaczego rozpoznawanie poszczególnych symboli to nie to samo co rekonstrukcja sekwencji czytania.

Przeprowadzono siedem ukończonych wywołań OCR: cztery przypadki dla całego obrazu i trzy wycinki. Zachowaliśmy każdy wynik. Jeden agent porównał wyniki z autorską prawdą wzorcową i wzrokowo sprawdził obrazy; nie było ślepej oceny ludzkiej ani szerokiego korpusu benchmarkowego. Eksperyment nie ustala uniwersalnie najlepszego silnika, wskaźnika dokładności na poziomie książki ani wydajności na Twoim skanie.

Zastosuj przepływ pracy oparty najpierw na regionach na własnej stronie

1. Zachowaj orygines i wybierz jedną trudną stronę

Zachowaj oryginalny obraz lub plik PDF bez zmian. Pracuj na kopii i zanotuj numer strony. Wybierz stronę zawierającą problem, który próbujesz rozwiązać: gęste ruby, wąski margines między kolumnami, nagłówek poziomy nad tekstem pionowym lub nietypowo małą czcionkę.

Czysta strona tytułowa nie jest użytecznym testem akceptacyjnym dla książki, której strony treści mają inny układ. Jeśli źródłem jest plik PDF, wyodrębnij lub wyrenderuj wybraną stronę za pomocą zaufanego narzędzia przed uruchomieniem przepływu pracy OCR obejmującego wyłącznie obrazy. Skrypty tego artykułu akceptują pliki PNG; nie przetwarzają plików PDF ani nie budują przeszukiwalnych warstw PDF.

Aby zapoznać się z pełnym procesem przygotowania i tłumaczenia skanowanych dokumentów, skorzystaj z szerszego przepływu pracy dla skanowanych plików PDF. Ten przewodnik skupia się na kierunku japońskim, segmentacji, rubim i decyzjach dotyczących transkrypcji.

2. Skoryguj wady rejestracji bez niszczenia małego tekstu

Sprawdź rzeczywiste znaki na użytecznym poziomie powiększenia. Wyrównaj niezamierzone skrzywienie, usuń niepowiązane obramowania strony i zachowaj wystarczający kontrast, aby odróżnić małą kanę i interpunkcję. Unikaj traktowania agresywnego progowania lub wyostrzania jako automatycznego ulepszenia: porównaj wynikowy obraz z oryginałem przed zaufaniem wynikom OCR.

Wskazówki Tesserakta dotyczące jakości obrazu obejmują rozdzielczość, szum, skrzywienie i obramowania. Kwestie te są niezależne od kierunku pisania. Prostowanie strony sfotografowanej pod kątem to nie to samo operacja, co obracanie pionowego, wyprostowanego tekstu japońskiego na bok.

Przykładowe pliki zawierają metadane 300 dpi, ale ta liczba nie tworzy brakujących szczegółów. Ich rzeczywisty rozmiar glifów treści to 64 piksele. Zdjęcie o niskiej rozdzielczości oznaczone ponownie jako „300 dpi” nadal pozostaje tym samym zdjęciem o niskiej rozdzielczości.

3. Rozdziel regiony, gdy strona narusza jedno założenie dotyczące układu

Wypróbuj główny blok pionowy samodzielnie, zanim poprosisz jedno wywołanie OCR o obsługę poziomego nagłówka, pionowej prozy, ilustracji i numeru strony. Zachowaj prosty zapis regionu, taki jak „strona 12, treść, kolumna 1 od prawej”. Taki zapis sprawia, że późniejsze złożenie jest weryfikowalne.

W przypadku materiałów o mieszanym kierunku rozpoznaj region poziomy za pomocą odpowiedniego ustawienia poziomego, a region pionowy za pomocą ustawienia pionowego, a następnie zmontuj je w kolejności zamierzonej przez dokument. Jest to zalecany przepływ pracy do przetestowania na Twoim pliku, a nie zdolność do obsługi mieszanych układów zmierzona przez nasze trzy przykładowe obrazy.

Nasz eksperyment z przycinaniem wykorzystał dokładnie znane współrzędne, aby wykluczyć pasek ruby obok każdej syntetycznej kolumny, zachowując jednocześnie jej tekst treści i biały margines. Była to demonstracja ręcznego wyboru regionu, a nie automatyczny algorytm usuwania furigany. Nie stosuj jej współrzędnych do strony prawdziwej książki.

4. Sprawdź kolumny przed korektą poszczególnych znaków

Porównaj pierwszy i ostatni znak treści każdej kolumny, pracując w zamierzonym kierunku. Upewnij się, że żadna kolumna nie jest pominięta, zduplikowana, odwrócona ani połączona z sąsiednią. Następnie sprawdź zdania na granicach kolumn.

Dopiero po tym należy korygować poszczególne kanji, kana, interpunkcję, cyfry i imiona. W przeciwnym razie można stracić czas na dopracowywanie fragmentów, które zostaną złożone w niewłaściwym akapicie.

Przydatny przegląd w trzech przebiegach obejmuje:

  1. Regiony i kolejność: każdy docelowy region tekstu jest obecny raz i we właściwej kolejności.
  2. Znaki: porównaj rzeczywisty obraz z tekstem, uwzględniając drobną interpunkcję i znaki kana.
  3. Adnotacje: zdecyduj, czy każdy element ruby, notatka lub etykieta na marginesie zostają zachowane, oddzielone czy celowo pominięte.

Wartość pewności silnika nie zastępuje tych weryfikacji. Nasza przemieszana kontrola nadal zwracała podaną przez silnik wartość pewności; to nie sprawiało, że kolejność czytania stawała się akceptowalna.

Nie usuwaj furigana, dopóki nie dowiesz się dlaczego

W przypadku ekstrakcji wyłącznie tekstu głównego, znaki ruby nie powinny przypadkowo stawać się drugą warstwą prozy. Jednak usuwanie każdego małego ciągu znaków kana nie jest bezpieczną ogólną zasadą. Odczyt może pomóc w rozstrzygnięciu wieloznaczności imienia, zachować wybraną przez autora pronuncjację lub wesprzeć zadanie naukowe czytelnika.

Na naszym obrazie z furiganą wynik OCR zawierał główne kanji, ale nie zwrócił czterech odczytów jako osobnego zestawu adnotacji. Mogłoby to wystarczyć po korekcie interpunkcji do zadania wyszukiwania wyłącznie w tekście głównym. Jest to niewystarczające, jeśli produkt obiecane ma informacje o wymowie.

Przechowuj ważne odczyty osobno i powiązuj je z odpowiednim wystąpieniem. Na przykład:

Page: sample 1
Column: 1 from the right
Base text: 図書館
Reading shown: としょかん
Decision: retain body text; save reading in the annotation record

Przykładowa oddzielna transkrypcja ruby czyni tę zasadę jednoznaczną. Jest to prawda wzorcowa utworzona wraz z obrazem, a nie oświadczenie o sukcesie OCR.

Jeśli OCR wplata kana w słowo lub traci powiązanie, porównaj z obrazem i napraw transkrypcję. Nie proś modelu językowego o zgadywanie źródła i przedstawianie zgadki jako odzyskanego tekstu. Zamiast tego oznacz niepewny odczyt do weryfikacji.

Wyniki wykadrowania przemawiają również przeciwko uproszczonej zasadzie „usuń ruby, a wszystko się poprawi”: pozostały dwie różnice w interpunkcji i zmieniły się końcówki dotkniętych zdań. Ta obserwacja dotyczy tego konkretnego czystego zestawu testowego. Mówi nam ona, aby zweryfikować wynik po segmentacji, a nie że kadrowanie ogólnie pomaga lub szkodzi OCR.

Odtwórz test lub prowadź dziennik przeglądu

Pobierz plik README eksperymentu dla przypisanych modeli i źródeł czcionek, wersji zależności, opisów plików oraz poleceń. Plik generatora próbek, program uruchamiający OCR, i skrypt porównawczy oddzielne tworzenie, rozpoznawanie i ocenę obrazu.

Moduł uruchomieniowy korzysta ze udokumentowanego interfejsu API elementu roboczego Tesseract.js. W przypadku regionu pionowego jego najważniejsze ustawienia to:

const worker = await createWorker("jpn_vert", 1, {
  langPath: modelDirectory,
  gzip: false,
  cacheMethod: "none",
});
await worker.setParameters({
  tessedit_pageseg_mode: "5",
  user_defined_dpi: "300",
});

modelDirectory musi zawierać pobrany, nierozpakowany jpn_vert.traineddata plik. Jest to fragment, a nie kompletny program; dostarczony program uruchomieniowy zapisuje również surowe wyniki i kończy działanie wątków roboczych.

Jeśli korzystasz z innej aplikacji OCR, zachowaj te same dane dowodowe, nawet jeśli nazwy ustawień się różnią: region źródłowy, plik oryginalny, wersja modelu lub narzędzia, kierunek, wybór segmentacji, faktyczny wynik, poprawiony tekst i nierozpoznane znaki. Szablon rejestru przeglądu jest pusty, aby nie sugerować, że Twoje strony zostały już pomyślnie zweryfikowane.

Nie przekształcaj naszego małego wyniku dokładnego dopasowania w obiecany odsetek dla całej powieści. Różne czcionki, zatłoczone kolumny, formy historyczne, skany niskiej jakości i dymki dialogowe z mangi wymagają własnych reprezentatywnych testów. Układ mangi i rozpoznawanie pismo odręcznego nie wchodzą w zakres tego eksperymentu.

Tłumacz tylko wtedy, gdy odzyskany tekst źródłowy jest wiarygodny

Jeśli Twoim celem jest wyszukiwanie, kopiowanie cytatów lub sprawdzanie w słowniku, zweryfikowany japoński tekst może być ostatecznym rezultatem. Nie musisz tłumaczyć całego dokumentu tylko dlatego, że zaangażowane było OCR.

Jeśli barierę językową nadal uniemożliwia czytanie, a masz użyteczny plik, który możesz przesłać, kontynuuj za pomocą przepływu pracy tłumaczenia PDF. Zachowaj oryginalny skan i zweryfikowaną transkrypcję, aby móc odróżnić błędy rozpoznawania od błędów tłumaczenia. Przykładowy program uruchomieniowy generuje pliki tekstowe i TSV, a nie plik PDF gotowy do automatycznego przesłania; przygotuj rzeczywisty format wejściowy, którego wymaga kolejne narzędzie.

Tryb OCR programu BookTranslator rekonstruuje przetłumaczoną treść zamiast gwarantować oryginalny pionowy układ. Nie zakładaj, że zachowa każdą powiązaną rubinkę ani naprawi niezweryfikowanych błędów rozpoznawania. Sprawdź porządek czytania i formatowanie ostatecznego dokumentu za pomocą poradnika zachowania formatu PDF oraz ostatecznej listy kontrolnej QA dla plików PDF.

Niezawodne przekazanie nie oznacza „zakończono OCR”. Oznacza ono: „zamierzony japoński tekst jest obecny, jego sekwencja została sprawdzona, a sposób obsługi adnotacji jest udokumentowany”.

Powiązane wpisy