BookTranslator
BookTranslator

OCR de Texto Vertical em Japonês: Preserve a Ordem das Colunas e Lide com o Furigana

Extraia texto vertical em japonês com as configurações corretas de layout, separe o furigana do corpo do texto e verifique os resultados reais de OCR em relação a amostras para download.

BookTranslator

BookTranslator Team

14 min read

Para o OCR de texto vertical em japonês, verifique a direção da escrita antes de alterar os filtros de imagem. Use um modelo japonês e uma configuração de segmentação que consiga lidar com texto vertical, verifique as colunas na ordem pretendida e decida se você precisa apenas do texto principal ou também do furigana. Uma página cheia de caracteres reconhecíveis ainda pode ser uma transcrição inutilizável se a sequência estiver errada.

Executamos um pequeno experimento local e reproduzível para tornar essas decisões concretas. Uma configuração horizontal embaralhou nossas três colunas verticais. Uma configuração vertical recuperou o texto principal sem formatação, mas a adição do furigana alterou dois sinais de pontuação, e o corte do ruby não eliminou os erros de pontuação.

Estes são resultados de uma amostra sintética propositalmente pequena, e não uma afirmação de precisão sobre todos os livros em japonês. A lição útil é mais específica: avalie separadamente o reconhecimento de caracteres, a ordem de leitura e o tratamento de anotações. Não envie o resultado para tradução apenas porque ele se parece com o japonês.

Primeiro, identifique o texto que você realmente deseja

Na composição vertical japonesa convencional, os caracteres progridem para baixo em uma linha e as linhas prosseguem da direita para a esquerda. O ruby é o texto menor associado aos caracteres base; o furigana comumente fornece a pronúncia deles. O documento do W3C Requirements for Japanese Text Layout descreve essas direções de escrita e as relações do ruby.

Antes do OCR, rotule as regiões significativas da página:

  • colunas verticais principais;
  • ruby pequeno ao lado do corpo do texto;
  • cabeçalhos horizontais, legendas ou tabelas;
  • números de página e cabeçalhos correntes;
  • notasmarginais ou páginas adjacentes não relacionadas.

Não trate todas as faixas verticais como um parágrafo independente. Uma faixa de kana pequeno ao lado de 図書館 pode ser sua leitura, としょかん, e não a próxima frase.

Escolha a política de saída antes de julgar o OCR:

Tarefa do leitorResultado desejadoO que conta como um problema
Pesquisar ou traduzir o corpoTexto principal em ordem; leituras úteis salvas separadamenteRuby inserido na prosa, texto do corpo omitido, colunas reordenadas
Estudar a pronúnciaTexto principal mais leituras associadas corretamenteRuby ausente ou uma leitura anexada à palavra errada
Produzir uma transcrição fielTexto principal, relações de anotação e decisões editoriais preservadasExclusão silenciosa ou normalização de material que você pretendia reter

A mesma saída pode passar em uma tarefa e falhar em outra. Nosso experimento usa transcrição apenas do corpo como seu alvo de comparação. Ele não trata furigana ausente como aceitável para uma edição de estudo de pronúncia.

Um experimento real de OCR de três frases

A amostra usa estas frases de autoria própria:

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

Elas descrevem a leitura em uma biblioteca, a visão de um rio em um mapa antigo e o encontro com um amigo em uma estação. Há 34 pontos de código Unicode de texto de corpo quando as quebras de linha são removidas, incluindo os três pontos finais japoneses.

Renderizamos o mesmo corpo em três formas:

  1. Texto horizontal.
  2. Três colunas verticais, lidas da direita para a esquerda.
  3. As mesmas colunas verticais com furigana ao lado de 図書館, 地図, 友人, e 駅.

Amostra sintética de OCR em japonês com três colunas verticais lidas da direita para a esquerda e furigana menor à direita de palavras selecionadas.

Estas são imagens limpas para ensino, não páginas escaneadas de um livro. O renderizador usa Noto Sans CJK JP, caracteres de corpo de 64 pixels, ruby de 24 pixels e posicionamento vertical simplificado glifo por glifo. Ele desenha pontos finais verticais como pequenos círculos contornados em posições escolhidas manualmente, em vez de usar o posicionamento de glifos verticais adequado da fonte; portanto, os resultados de pontuação não estabelecem como o OCR se sai em um livro devidamente diagramado. Ele não reproduz todas as regras de editoração japonesa. Não há desfoque, inclinação, textura de papel, caligrafia, tipo histórico ou página de direção mista no teste.

Mecanismo, modelos e configurações

O experimento foi executado em 7 de setembro de 2026, usando o Tesseract.js 7.0.0 com Tesseract.js-core 7.0.0 localmente no macOS ARM64. Todas as chamadas bem-sucedidas usaram o oficial tessdata_fast modelos no commit 87416418657359cb625c412a48b6e1d6d41c29bd, com OEM 1, o modo de mecanismo somente LSTM.

O repositório de modelos oficial do Tesseract fornece separadamente jpn e jpn_vert arquivos. Sua documentação descreve o PSM 5 como um bloco alinhado verticalmente uniforme e o PSM 6 como um bloco de texto uniforme; escolha uma suposição de segmentação que se adeque à região que está sendo reconhecida. Consulte a documentação de segmentação de página.

Nossos casos registrados usaram jpn com PSM 6 para texto horizontal, jpn_vert com PSM 5 para texto vertical e um jpn/PSM 6 controle vertical deliberadamente incompatível. Tanto o modelo quanto a segmentação mudam entre as duas configurações verticais, portanto, esta é uma comparação de fluxo de trabalho, e não um experimento isolando o efeito de qualquer configuração isoladamente.

Uma tentativa inicial com tessdata_best foi abortada no núcleo WebAssembly disponível antes de produzir texto OCR. Mudamos para o inteiro oficial tessdata_fast modelos para compatibilidade e registramos essa falha. Nenhuma conclusão sobre a precisão de uma família de modelos decorre dessa mudança.

O que realmente retornou

A comparação remove espaços em branco e aplica a normalização Unicode NFC. Ela não substitui a pontuação, corrige kanjis ou reorganiza o texto. O completo saídas brutas e hashes de versão/modelo, CSV de comparação de corpo, e anotações de erro podem ser baixados.

Entrada e configuraçãoResultado observado em relação ao alvo apenas do corpo
Horizontal, jpn, PSM 6Todos os 34 pontos de código corresponderam após a remoção de espaços em branco
Vertical, jpn, controle PSM 6A saída estendeu-se pelas colunas e incluiu substituições de caracteres; prosa inutilizável
Vertical, jpn_vert, PSM 5Todos os 34 pontos de código corresponderam após a remoção de espaços em branco; a ordem das colunas estava correta
Vertical com furigana, jpn_vert, PSM 5O texto principal permaneceu em ordem, mas dois 。 marcas tornaram-se ASCII .; o ruby não foi retornado como leituras separadas
Três cortes de colunas de corpo da imagem com furigana, jpn_vert, PSM 5A primeira coluna terminou com ., a segunda com ,, a terceira com 。; o recorte não removeu todos os defeitos de pontuação

Por exemplo, o caso do furigana retornou esta primeira linha:

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

Os espaços são ignorados pela nossa regra de comparação estabelecida. A pontuação final, não. Um fluxo de trabalho baseado apenas em busca pode tolerar essa diferença, mas uma transcrição fiel deve registrá-la e corrigi-la.

O controle vertical desalinhado começou com 明 古 昌, saltando pelos caracteres superiores das colunas em vez de seguir a primeira frase pretendida. Sua saída ilustra por que reconhecer símbolos individuais não é o mesmo que reconstruir uma sequência de leitura.

Houve sete chamadas de OCR concluídas: quatro casos de imagem inteira e três recortes. Retivemos todas as saídas. Um agente comparou os resultados com a verdade de referência autoral e inspecionou visualmente as imagens; não houve revisão humana cega ou corpus de benchmark amplo. O experimento não estabelece um motor universalmente melhor, uma taxa de precisão em nível de livro ou o desempenho em sua digitalização.

Use um fluxo de trabalho centrado em regiões em sua própria página

1. Preserve a fonte e escolha uma página difícil

Mantenha a imagem original ou o PDF inalterados. Trabalhe em uma cópia e registre o número da página. Escolha uma página que contenha o problema que você está tentando resolver: furigana denso, uma medianiz estreita, um título horizontal acima de texto vertical ou caracteres incomumente pequenos.

Uma página de rosto limpa não é um teste de aceitação útil para um livro cujas páginas de corpo têm um layout diferente. Se a fonte for um PDF, extraia ou renderize a página selecionada usando uma ferramenta em que você confie antes de executar um fluxo de trabalho de OCR apenas com imagens. Os scripts deste artigo aceitam arquivos PNG; eles não processam PDFs nem criam camadas de PDF pesquisáveis.

Para todo o processo de preparação e tradução de documentos digitalizados, use o fluxo de trabalho de PDF digitalizado mais abrangente. Este guia concentra-se na direção japonesa, segmentação, furigana e decisões de transcrição.

2. Corrija defeitos de captura sem destruir textos pequenos

Inspecione os caracteres reais em um nível de zoom útil. Endireite a inclinação não intencional, remova margens de página irrelevantes e preserve contraste suficiente para distinguir pequenos kana e pontuação. Evite tratar a binarização agressiva ou o aprimoramento como uma melhoria automática: compare a imagem resultante com a original antes de confiar no OCR.

A orientação sobre a qualidade de imagem do Tesseract aborda resolução, ruído, inclinação e bordas. Esses aspectos são separados da direção da escrita. Desinclinar uma página fotografada em um ângulo não é a mesma operação que girar texto japonês vertical na horizontal.

Os arquivos de amostra carregam metadados de 300 dpi, mas esse número não cria detalhes ausentes. O tamanho real dos glifos do corpo deles é de 64 pixels. Uma foto de baixa resolução rotulada como “300 dpi” continua sendo a mesma foto de baixa resolução.

3. Separe as regiões quando a página violar uma premissa de layout

Experimente o bloco vertical principal sozinho antes de pedir a uma única chamada de OCR que processe um título horizontal, prosa vertical, uma ilustração e um número de página. Mantenha um registro simples de regiões, como “página 12, corpo, coluna 1 da direita”. Esse registro torna a montagem posterior auditável.

Para materiais de direção mista, reconheça a região horizontal com a configuração horizontal apropriada e a região vertical com uma configuração vertical, depois monte-as na ordem pretendida pelo documento. Este é um fluxo de trabalho recomendado para testar em seu arquivo, e não uma capacidade de layout misto medida por nossas três imagens de amostra.

Nosso experimento de recorte usou coordenadas exatas conhecidas para excluir a faixa de furigana ao lado de cada coluna sintética, mantendo o texto do corpo e uma margem branca. Foi uma demonstração manual de seleção de regiões, e não um algoritmo automático de remoção de furigana. Não aplique suas coordenadas à página de um livro real.

4. Verifique as colunas antes de revisar caracteres individuais

Compare o primeiro e o último caractere do corpo de cada coluna, trabalhando na direção pretendida. Confirme se nenhuma coluna está faltando, duplicada, invertida ou misturada com a vizinha. Em seguida, inspecione as frases nas fronteiras das colunas.

Somente depois disso você deve corrigir kanji individuais, kana, pontuação, números e nomes. Caso contrário, você pode perder tempo polindo fragmentos que são montados no parágrafo errado.

Uma revisão útil em três etapas é:

  1. Regiões e ordem: cada região de corpo pretendida está presente uma vez e em sequência.
  2. Caracteres: compare a imagem real com o texto, incluindo pequena pontuação e marcas de kana.
  3. Anotações: decida se cada item de ruby, nota ou rótulo marginal é preservado, separado ou deliberadamente excluído.

O valor de confiança de um mecanismo não substitui essas verificações. Nosso controle embaralhado ainda retornou um número de confiança relatado pelo mecanismo; isso não tornou sua ordem de leitura aceitável.

Não remova o furigana até saber o porquê

Para extração apenas do corpo, o ruby não deve acidentalmente se tornar uma segunda camada de prosa. Mas excluir cada pequena string de kana não é uma regra geral segura. Uma leitura pode ajudar a desambiguar um nome, preservar a pronúncia escolhida por um autor ou apoiar a tarefa de estudo do leitor.

Em nossa imagem de furigana, a saída de OCR continha o kanji principal, mas não retornou as quatro leituras como um conjunto de anotações separado. Isso pode ser suficiente após a correção de pontuação para uma tarefa de pesquisa apenas no corpo. É insuficiente se o entregável promete informações de pronúncia.

Armazene leituras importantes separadamente e associe-as à ocorrência certa. Por exemplo:

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

O transcrição de ruby separada da amostra torna essa política explícita. É uma verdade fundamental criada junto com a imagem, não uma alegação de sucesso de OCR.

Se o OCR misturar kana em uma palavra ou perder sua associação, compare com a imagem e repare a transcrição. Não peça a um modelo de linguagem para adivinhar a fonte e apresentar o palpite como texto recuperado. Em vez disso, marque uma leitura incerta para revisão.

Os resultados do corte também argumentam contra uma regra simplista de “remover ruby e tudo melhora”: duas diferenças de pontuação permaneceram e os finais de frase afetados mudaram. Essa observação pertence a este teste limpo específico. Ela nos diz para verificar o resultado após a segmentação, e não que o corte geralmente ajuda ou prejudica o OCR.

Reproduza o teste ou mantenha um registro de revisão

Baixe o README do experimento para fontes de modelo e fontes fixas, versões de dependência, descrições de arquivos e comandos. O gerador de amostras, executor de OCR, e script de comparação separa a criação de imagens, o reconhecimento e a avaliação.

O executor usa a documentada API de worker do Tesseract.js. Para uma região vertical, suas configurações essenciais são:

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 deve conter o arquivo baixado e descompactado jpn_vert.traineddata. Este é um trecho, não o programa completo; o executor fornecido também salva os resultados brutos e encerra os workers.

Se você usar outro aplicativo de OCR, mantenha as mesmas evidências, mesmo que os nomes das configurações diferiram: região de origem, arquivo original, versão do modelo ou ferramenta, direção, escolha de segmentação, saída real, texto corrigido e caracteres não resolvidos. O modelo de log de revisão está em branco para não dar a entender que suas páginas já passaram.

Não converta nosso pequeno resultado de correspondência exata em uma porcentagem prometida para um romance inteiro. Fontes diferentes, colunas lotadas, formas históricas, digitalizações de baixa qualidade e balões de fala de mangá exigem seus próprios testes representativos. O layout de mangá e o reconhecimento de manuscrito estão fora deste experimento.

Traduza apenas quando a fonte recuperada for confiável

Se o seu objetivo é pesquisar, copiar citações ou consultar o dicionário, o texto em japonês verificado pode ser o resultado final. Você não precisa traduzir um documento inteiro apenas porque o OCR esteve envolvido.

Se uma barreira linguística ainda impedir a leitura e você tiver um arquivo utilizável que possa carregar, prossiga com o fluxo de trabalho de tradução de PDF. Preserve a digitalização original e a transcrição verificada para poder distinguir erros de reconhecimento de erros de tradução. O executor de exemplo produz arquivos de texto e TSV, e não um PDF pronto para carregamento automático; prepare o formato de entrada real que sua próxima ferramenta exige.

O modo OCR do BookTranslator reconstrói o conteúdo traduzido em vez de garantir o layout vertical original. Não assuma que ele preservará todas as associações de ruby ou corrigirá erros de reconhecimento não verificados. Revise a ordem de leitura e a formatação do documento final usando o guia de preservação de formato de PDF e o checklist final de controle de qualidade de PDF.

A transferência confiável não é “OCR concluído”. É “o texto em japonês pretendido está presente, sua sequência foi verificada e o tratamento das anotações está documentado”.

Posts Relacionados