BookTranslator
BookTranslator

OCR de texto vertical en japonés: preserva el orden de las columnas y gestiona el furigana

Extrae texto vertical en japonés con la configuración de diseño adecuada, separa el furigana del texto principal y comprueba resultados reales de OCR con muestras descargables.

BookTranslator

BookTranslator Team

15 min read

Para el OCR de texto vertical en japonés, comprueba la dirección de escritura antes de cambiar los filtros de imagen. Utiliza un modelo en japonés y una configuración de segmentación que puedan manejar texto vertical, verifica las columnas en su orden previsto y decide si necesitas solo el texto principal o también el furigana. Una página llena de caracteres reconocibles puede seguir siendo una transcripción inutilizable si su secuencia es incorrecta.

Realizamos un experimento local pequeño y reproducible para concretar esas decisiones. Una configuración horizontal desordenó nuestras tres columnas verticales. Una configuración vertical recuperó el texto principal plano, pero añadir furigana cambió dos signos de puntuación, y recortar los caracteres ruby no eliminó los errores de puntuación.

Esos son resultados de una muestra sintética deliberadamente pequeña, no una afirmación de precisión sobre todos los libros en japonés. La lección útil es más específica: evalúa por separado el reconocimiento de caracteres, el orden de lectura y el tratamiento de las anotaciones. No envíes el resultado a traducción solo porque parezca japonés.

Primero identifica el texto que realmente deseas

En la composición vertical japonesa convencional, los caracteres avanzan hacia abajo en una línea y las líneas avanzan de derecha a izquierda. El ruby es el texto más pequeño asociado con los caracteres base; el furigana suele proporcionar su pronunciación. Las Requirements for Japanese Text Layout de la W3C describen estas direcciones de escritura y relaciones de ruby.

Antes del OCR, etiqueta las regiones significativas de la página:

  • columnas verticales principales;
  • ruby pequeño junto al cuerpo principal;
  • encabezados horizontales, pies de foto o tablas;
  • números de página y encabezados corrientes;
  • notas marginales o páginas adyacentes no relacionadas.

No trates cada franja vertical como un párrafo independiente. Una franja de kana pequeño junto a 図書館 puede ser su lectura, としょかん, no la siguiente frase.

Elige la directriz de salida antes de juzgar el OCR:

Tarea del lectorResultado deseadoQué cuenta como un problema
Buscar o traducir el cuerpoTexto principal en orden; lecturas útiles guardadas por separadoRuby insertado en la prosa, texto del cuerpo omitido, columnas reordenadas
Estudiar la pronunciaciónTexto principal más lecturas asociadas correctamenteRuby faltante o lectura adjunta a la palabra incorrecta
Producir una transcripción fielTexto principal, relaciones de anotación y decisiones editoriales conservadasEliminación o normalización silenciosa de material que pretendías conservar

El mismo resultado puede aprobar una tarea y fallar otra. Nuestro experimento utiliza transcripción solo del cuerpo como su objetivo de comparación. No considera aceptable la omisión de furigana para una edición de estudio de pronunciación.

Un experimento real de OCR de tres oraciones

La muestra utiliza estas oraciones de autoría propia:

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

Describen la lectura en una biblioteca, la visión de un río en un mapa antiguo y el encuentro con un amigo en una estación. Hay 34 puntos de código Unicode de texto de cuerpo cuando se eliminan los saltos de línea, incluidos los tres puntos finales japoneses.

Representamos el mismo cuerpo en tres formas:

  1. Texto horizontal.
  2. Tres columnas verticales, leídas de derecha a izquierda.
  3. Las mismas columnas verticales con furigana junto a 図書館, 地図, 友人, y 駅.

Muestra de OCR en japonés sintético con tres columnas verticales leídas de derecha a izquierda y furigana más pequeño a la derecha de las palabras seleccionadas.

Estas son imágenes de enseñanza limpias, no páginas escaneadas de un libro. El renderizador utiliza Noto Sans CJK JP, caracteres de cuerpo de 64 píxeles, ruby de 24 píxeles y ubicación vertical simplificada glifo por glifo. Dibuja puntos finales verticales como pequeños círculos contorneados en posiciones elegidas manualmente en lugar de usar el posicionamiento correcto de glifos verticales de la fuente; por lo tanto, los resultados de puntuación no establecen cómo funciona el OCR en un libro debidamente compuesto. No reproduce todas las reglas de composición tipográfica japonesa. No hay desenfoque, inclinación, textura de papel, escritura a mano, tipografía histórica o página de dirección mixta en la prueba.

Motor, modelos y configuración

El experimento se ejecutó el 7 de septiembre de 2026, utilizando Tesseract.js 7.0.0 con Tesseract.js-core 7.0.0 localmente en macOS ARM64. Todas las llamadas exitosas utilizaron el oficial tessdata_fast modelos en el commit 87416418657359cb625c412a48b6e1d6d41c29bd, con OEM 1, el modo de motor exclusivo LSTM.

El repositorio oficial de modelos de Tesseract proporciona por separado jpn y jpn_vert archivos. Su documentación describe PSM 5 como un bloque uniforme alineado verticalmente y PSM 6 como un bloque de texto uniforme; elija una suposición de segmentación que se adapte a la región que se va a reconocer. Véase la página de documentación de segmentación de páginas.

Nuestros casos registrados utilizaron jpn con PSM 6 para texto horizontal, jpn_vert con PSM 5 para texto vertical, y un control vertical desalineado deliberadamente con jpn/PSM 6. Tanto el modelo como la segmentación cambian entre las dos configuraciones verticales, por lo que se trata de una comparación de flujos de trabajo y no de un experimento que aísle el efecto de cualquiera de los ajustes por sí solo.

Un intento inicial con tessdata_best se abortó en el núcleo de WebAssembly disponible antes de producir texto OCR. Cambiamos al número entero oficial tessdata_fast modelos para compatibilidad y registramos ese fallo. De ese cambio no se puede deducir ninguna conclusión sobre la precisión de una familia de modelos.

Lo que realmente se obtuvo

La comparación elimina los espacios en blanco y aplica la normalización Unicode NFC. Esto no reemplaza la puntuación, corrige kanji ni reorganiza el texto. Los datos completos resultados sin procesar y hashes de versión/modelo, CSV de comparación de cuerpos, y anotaciones de errores son descargables.

Entrada y configuraciónResultado observado frente al objetivo exclusivo del cuerpo
Horizontal, jpn, PSM 6Los 34 puntos de código coincidieron después de eliminar los espacios en blanco
Vertical, jpn, control PSM 6La salida se ejecutó a través de columnas e incluyó sustituciones de caracteres; no es prosa utilizable
Vertical, jpn_vert, PSM 5Los 34 puntos de código coincidieron después de eliminar los espacios en blanco; el orden de las columnas era correcto
Vertical con furigana, jpn_vert, PSM 5El texto principal se mantuvo en orden, pero dos 。 marcas se convirtieron en ASCII .; el ruby no se devolvió como lecturas separadas
Tres recortes de columnas del cuerpo de la imagen con furigana, jpn_vert, PSM 5La primera columna terminó con ., la segunda con ,, la tercera con 。; el recorte no eliminó todos los defectos de puntuación

Por ejemplo, el caso con furigana devolvió esta primera línea:

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

Los espacios son ignorados por nuestra regla de comparación establecida. La puntuación final no lo es. Un flujo de trabajo basado exclusivamente en búsquedas podría tolerar esa diferencia, pero una transcripción fiel debe registrarla y corregirla.

El control vertical desalineado comenzó con 明 古 昌, saltando a través de los caracteres superiores de las columnas en lugar de seguir la primera oración prevista. Su resultado ilustra por qué reconocer símbolos individuales no es lo mismo que reconstruir una secuencia de lectura.

Hubo siete llamadas de OCR completadas: cuatro casos de imagen completa y tres recortes. Conservamos cada resultado. Un agente comparó los resultados con la verdad fundamental generada y examinó visualmente las imágenes; no hubo revisión humana a ciegas ni un corpus de referencia amplio. El experimento no establece un motor universalmente mejor, una tasa de precisión a nivel de libro ni el rendimiento en su escaneo.

Utilice un flujo de trabajo centrado en regiones en su propia página

1. Preserve la fuente y elija una página difícil

Mantenga la imagen o el PDF original sin cambios. Trabaje en una copia y anote el número de página. Elija una página que contenga el problema que intenta resolver: furigana denso, un medianil estrecho, un encabezado horizontal sobre texto vertical o un tipo de letra inusualmente pequeño.

Una página de título limpia no es una prueba de aceptación útil para un libro cuyas páginas de cuerpo tienen un diseño diferente. Si la fuente es un PDF, extraiga o renderice la página seleccionada utilizando una herramienta de su confianza antes de ejecutar un flujo de trabajo de OCR exclusivo de imágenes. Los scripts de este artículo aceptan archivos PNG; no procesan archivos PDF ni generan capas de PDF susceptibles de búsqueda.

Para todo el proceso de preparación y traducción de documentos escaneados, utilice el flujo de trabajo de PDF escaneados más amplio. Esta guía se centra en la dirección japonesa, la segmentación, el furigana y las decisiones de transcripción.

2. Corrija los defectos de captura sin destruir el texto pequeño

Inspeccione los caracteres reales a un nivel de zoom útil. Endereze la inclinación involuntaria, elimine los bordes de página no relacionados y preserve el suficiente contraste para distinguir los kana pequeños y la puntuación. Evite tratar la binarización agresiva o el enfoque como una mejora automática: compare la imagen resultante con la original antes de confiar en el OCR.

La guía de calidad de imagen de Tesseract abarca la resolución, el ruido, la inclinación y los bordes. Estos aspectos son independientes de la dirección de escritura. Corregir la inclinación de una página fotografiada en un ángulo no es la misma operación que rotar de lado un texto vertical japonés erguido.

Los archivos de muestra contienen metadatos de 300 ppp, pero ese número no crea detalles faltantes. El tamaño real de sus glifos corporales es de 64 píxeles. Una foto de baja resolución reetiquetada como "300 ppp" sigue siendo la misma foto de baja resolución.

3. Separe las regiones cuando la página viole una suposición de diseño

Pruebe el bloque vertical principal por sí solo antes de pedirle a una sola llamada de OCR que maneje un título horizontal, prosa vertical, una ilustración y un número de página. Mantenga un registro de regiones sencillo, como "página 12, cuerpo, columna 1 desde la derecha". Dicho registro hace que el ensamblaje posterior seaauditable.

Para material de dirección mixta, reconozca la región horizontal con la configuración horizontal adecuada y la región vertical con una configuración vertical, luego ensámblelas en el orden que pretende el documento. Este es un flujo de trabajo recomendado para probar en su archivo, no una capacidad de diseño mixto medida por nuestras tres imágenes de muestra.

Nuestro experimento de recorte utilizó coordenadas exactas conocidas para excluir la franja de furigana situada junto a cada columna sintética, conservando al mismo tiempo su texto principal y un margen blanco. Fue una demostración de selección manual de regiones, no un algoritmo automático de eliminación de furigana. No aplique sus coordenadas a la página de un libro real.

4. Verifique las columnas antes de corregir los caracteres individuales

Compare el primer y el último carácter del cuerpo de cada columna, trabajando en la dirección prevista. Confirme que no falte ninguna columna, que no esté duplicada, invertida o mezclada con su vecina. A continuación, inspeccione las oraciones en los límites de las columnas.

Solo después de eso debes corregir los kanji individuales, kana, puntuación, números y nombres. De lo contrario, puedes perder el tiempo puliendo fragmentos que se ensamblan en el párrafo incorrecto.

Una revisión útil de tres pasadas es:

  1. Regiones y orden: cada región de texto prevista está presente una vez y en secuencia.
  2. Caracteres: compara la imagen real con el texto, incluidos los signos de puntuación pequeños y las marcas de kana.
  3. Anotaciones: decide si cada elemento ruby, nota o etiqueta marginal se conserva, se separa o se excluye deliberadamente.

El valor de confianza de un motor no sustituye a estas comprobaciones. Nuestra prueba de control desordenada aun así devolvió un número de confianza informado por el motor; eso no hizo que su orden de lectura fuera aceptable.

No elimines el furigana hasta que sepas por qué

Para la extracción exclusiva de texto principal, el texto ruby no debería convertirse accidentalmente en una segunda capa de prosa. Pero eliminar cada cadena pequeña de kana no es una regla general segura. Una lectura puede ayudar a desambiguar un nombre, preservar la pronunciación elegida por un autor o apoyar la tarea de estudio del lector.

En nuestra imagen con furigana, la salida de OCR contenía el kanji principal pero no devolvió las cuatro lecturas como un conjunto de anotaciones separado. Eso podría ser suficiente tras la corrección de puntuación para una tarea de búsqueda exclusiva de texto principal. Es insuficiente si el resultado entregable promete información de pronunciación.

Almacena las lecturas importantes por separado y asíociarlas con la ocurrencia correcta. Por ejemplo:

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

La transcripción ruby separada del ejemplo hace explícita esa directriz. Es una verdad fundamental creada junto con la imagen, no una afirmación de éxito del OCR.

Si el OCR mezcla kana en una palabra o pierde su asociación, compáralo con la imagen y repara la transcripción. No le pidas a un modelo de lenguaje que adivine la fuente y presente la suposición como texto recuperado. En su lugar, marca una lectura incierta para su revisión.

Los resultados del recorte también argumentan en contra de una regla simplista de «eliminar ruby y todo mejora»: persistieron dos diferencias de puntuación y los finales de oración afectados cambiaron. Esa observación pertenece a este elemento de prueba limpio en particular. Nos indica que debemos verificar el resultado después de la segmentación, no que el recorte beneficie o perjudique al OCR en general.

Reproduce la prueba o mantén un registro de revisión

Descarga el archivo README del experimento para consultar las fuentes de modelos y fuentes tipográficas fijadas, las versiones de dependencias, las descripciones de archivos y los comandos. El generador de muestras, ejecutor de OCR, y script de comparación la creación, el reconocimiento y la evaluación de imágenes por separado.

El ejecutable utiliza la documentada API de workers de Tesseract.js. Para una región vertical, su configuración esencial es:

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 debe contener el archivo descargado y descomprimido jpn_vert.traineddata . Este es un fragmento, no el programa completo; el ejecutable suministrado también guarda los resultados sin procesar y finaliza los workers.

Si utilizas otra aplicación de OCR, mantén la misma evidencia incluso cuando los nombres de la configuración difieran: región de origen, archivo original, versión del modelo o herramienta, dirección, opción de segmentación, salida real, texto corregido y caracteres sin resolver. La plantilla de registro de revisión está en blanco para que no dé a entender que tus páginas ya han sido aprobadas.

No conviertas nuestro resultado exacto en un porcentaje prometido para toda una novela. Las fuentes diferentes, las columnas apiñadas, las formas históricas, los escaneos de baja calidad y los bocadillos de los mangas requieren sus propias pruebas representativas. El diseño de los mangas y el reconocimiento de escritura a mano quedan fuera de este experimento.

Traduce solo cuando la fuente recuperada sea confiable

Si tu objetivo es buscar, copiar citas o consultar el diccionario, el texto japonés verificado puede ser el resultado final. No necesitas traducir un documento entero simplemente porque se haya utilizado OCR.

Si la barrera del idioma sigue impidiendo la lectura y tienes un archivo utilizable que puedas subir, continúa con el flujo de trabajo de traducción de PDF. Conserva el escaneo original y la transcripción comprobada para poder distinguir los errores de reconocimiento de los errores de traducción. El ejecutable de ejemplo produce archivos de texto y TSV, no un PDF listo para su carga automática; prepara el formato de entrada real que requiera tu siguiente herramienta.

El modo OCR de BookTranslator reconstruye el contenido traducido en lugar de garantizar el diseño vertical original. No des por sentado que conservará todas las asociaciones de ruby ni que reparará los errores de reconocimiento no verificados. Revisa el orden de lectura y el formato del documento final utilizando la guía de preservación de formato de PDF y la lista de comprobación final de control de calidad de PDF.

La entrega fiable no es «OCR completado». Es «el texto en japonés previsto está presente, su secuencia ha sido verificada y el tratamiento de las anotaciones está documentado».

Publicaciones relacionadas