はじめに
Azure AI Document Intelligence は、ドキュメントからテキストや表などの構造を機械可読な形で抽出できる強力なサービスです。レイアウト(テキスト・表・チェックボックス等)の抽出に対応し、OCRと深層学習を組み合わせて文書構造を取り出せます。
一方で、Officeドキュメントに含まれるルビ(ふりがな)が、そのまま抽出テキストに連結され、後段の検索(Azure AI Search等)でノイズになることがあります。本稿では、この問題に対して新規作成・公開した Python ライブラリ office_ruby_remover
を用いた前処理のアプローチを解説します。
背景:なぜルビがノイズになるのか
-
Excelのふりがなは、セルに付随する読み情報です。OOXML(SpreadsheetML)では phoneticPr / rPh などの要素で表現され、VBA/APIの世界では Phonetics や
PHONETIC()
関数でも扱えます。
-
Wordのルビは、OOXML(WordprocessingML)で
w:ruby
要素として格納されます。
これらの“読み”は人間には有用ですが、Document Intelligenceに載せると、たとえば「東京」に「トウキョウ」が後続連結された文字列(例: 東京トウキョウ
)として取り込まれ、Azure AI Searchを利用した検索語との一致判定やスコアリングに悪影響となる場合があります(リコール/適合率の低下、意図しないヒットの増加など)。
例:Document IntelligenceのJSON出力(観測例)
{
"content": "日本の首都は東京トウキョウです。",
"spans": [...]
}
※この連結挙動は筆者の実観測に基づくものであり、仕様として明記されていない点は留意ください(Document Intelligenceはレイアウト/テキストを構造化抽出するAPI群を提供)。
解決策:Pythonライブラリ「office-ruby-remover」の開発
この問題に対処するため、Document Intelligenceへのアップロード前処理として、Word (.docx
) と Excel (.xlsx
) ファイルからルビ情報をプログラムで除去するPythonライブラリ office-ruby-remover
を開発し、公開しました。
スターをいただけるととても励みになります
このライブラリを利用することで、Document Intelligenceが処理するドキュメントからルビ情報を事前に取り除き、よりクリーンなテキストデータを抽出させることが可能になります。
PyPIへの公開が初めてだったので、Kenta Nakamura氏 (@c60evaporator) が公開されている以下の記事を参考にさせていただきました。非常に有益な情報に感謝いたします。
実証:ライブラリ適用による出力結果の比較
office-ruby-remover
を用いた前処理の効果を、Document Intelligenceの出力結果で比較します。
1. 前処理の実行
まず、以下のPythonコードで対象ファイルのルビを除去します。
import pathlib
from office_ruby_remover import remove_excel_ruby, remove_word_ruby
in_dir = pathlib.Path("in_docs")
out_dir = pathlib.Path("out_docs")
out_dir.mkdir(exist_ok=True)
for p in in_dir.glob("**/*"):
if p.suffix.lower() == ".xlsx":
remove_excel_ruby(p, out_dir / p.name, overwrite=True)
elif p.suffix.lower() == ".docx":
remove_word_ruby(p, out_dir / p.name, overwrite=True)
2. 出力結果の比較
-
Before(前処理なし)
{ "content": "日本の首都は東京トウキョウです。", "spans": [...] }
-
After(前処理あり)
{ "content": "日本の首都は東京です。", "spans": [...] }
前処理を施したファイルをDocument Intelligenceで処理することで、ルビ情報が除去された純粋なテキストデータのみを抽出できました。これにより、Azure AI Searchにおける検索ノイズの問題を未然に防ぐことができます。
まとめ
- Officeのルビ/ふりがなは、人に優しい一方で検索インデックスにはノイズになり得ます。
-
office_ruby_remover
で前処理除去することで、抽出テキストをクリーン化し、検索精度やスコアの安定性に寄与します。 - ルビ自体が価値のある場面では、本文と読みを分離保管し、用途に応じて使い分ける設計が安全です。
本ライブラリが、Officeドキュメントを扱う皆さまの前処理品質向上の一助になれば幸いです。