DOCXの作成、編集、分析
概要
ユーザーが.docxファイルの作成、編集、または内容の分析を依頼することがあります。.docxファイルは基本的にXMLファイルやその他のリソースを含むZIPアーカイブであり、読み取りや編集が可能です。タスクごとにさまざまなツールとワークフローが用意されています。
ワークフロー判断ツリー
読み取り/分析
以下の「テキスト抽出」または「生XMLアクセス」セクションを使用してください。
新しいドキュメントを作成
「新しいWord文書の作成」ワークフローを使用してください。
既存のドキュメントを編集
-
自分自身のドキュメント + 簡単な変更 「基本的なOOXML編集」ワークフローを使用してください。
-
他の人のドキュメント 「Redliningワークフロー」(推奨デフォルト)を使用してください。
-
法務、学術、ビジネス、政府文書 「Redliningワークフロー」(必須)を使用してください。
読み取りと内容分析
テキスト抽出
ドキュメントのテキスト内容を読み取るだけの場合は、pandocを使用してドキュメントをMarkdownに変換してください。Pandocはドキュメント構造を保持する優れたサポートを提供し、変更履歴も表示できます。
# 変更履歴を含めてドキュメントをMarkdownに変換
pandoc --track-changes=all path-to-file.docx -o output.md
# オプション: --track-changes=accept/reject/all
生XMLアクセス
次の機能には生XMLアクセスが必要です:コメント、複雑な書式設定、ドキュメント構造、埋め込みメディア、メタデータ。これらの機能のいずれかについては、ドキュメントを解凍して生のXML内容を読み取る必要があります。
ファイルの解凍
python ooxml/scripts/unpack.py <office_file> <output_directory>
主要なファイル構造
word/document.xml- メインドキュメントの内容word/comments.xml- document.xmlで参照されるコメントword/media/- 埋め込まれた画像とメディアファイル- 変更履歴は
<w:ins>(挿入)および<w:del>(削除)タグを使用します
新しいWord文書の作成
新しいWord文書を新規作成する場合は、docx-jsを使用してください。これにより、JavaScript/TypeScriptを使用してWord文書を作成できます。
ワークフロー
- 必須 - ファイル全体を読む:
docx-js.md(約500行)を最初から最後まで完全に読んでください。このファイルを読む際には範囲制限を設定しないでください。文書作成に進む前に、詳細な構文、重要な書式設定ルール、ベストプラクティスについてファイルの全内容を読んでください。 - Document、Paragraph、TextRunコンポーネントを使用してJavaScript/TypeScriptファイルを作成します(すべての依存関係はインストール済みと仮定できますが、インストールされていない場合は以下の依存関係セクションを参照してください)。
- Packer.toBuffer()を使用して.docxとしてエクスポートします。
既存のWord文書の編集
既存のWord文書を編集する場合は、Document Library(OOXML操作用のPythonライブラリ)を使用してください。このライブラリは自動的にインフラストラクチャを設定し、ドキュメント操作用のメソッドを提供します。複雑なシナリオでは、ライブラリを通じて基盤となるDOMに直接アクセスできます。
ワークフロー
- 必須 - ファイル全体を読む:
ooxml.md(約600行)を最初から最後まで完全に読んでください。このファイルを読む際には範囲制限を設定しないでください。Document LibraryのAPIとドキュメントファイルを直接編集するためのXMLパターンについてファイルの全内容を読んでください。 - ドキュメントを解凍します:
python ooxml/scripts/unpack.py <office_file> <output_directory> - Document Libraryを使用してPythonスクリプトを作成して実行します(ooxml.mdの「Document Library」セクションを参照)。
- 最終的なドキュメントをパックします:
python ooxml/scripts/pack.py <input_directory> <office_file>
Document Libraryは、一般的な操作のための高レベルメソッドと、複雑なシナリオのための直接DOMアクセスの両方を提供します。
ドキュメントレビューのためのRedliningワークフロー
このワークフローでは、Markdownを使用して包括的な変更履歴を計画してから、OOXMLで実装できます。重要: 完全な変更履歴を実現するには、すべての変更を体系的に実装する必要があります。
バッチ戦略: 関連する変更を3~10個のバッチにグループ化します。これにより、デバッグが管理しやすくなり、効率を維持できます。各バッチをテストしてから次のバッチに進みます。
原則: 最小限で正確な編集
変更履歴を実装する際は、実際に変更されるテキストのみをマークしてください。変更されていないテキストを繰り返すと、編集がレビューしにくくなり、プロフェッショナルではないように見えます。置換は次のように分割します:[変更なしのテキスト] + [削除] + [挿入] + [変更なしのテキスト]。変更なしのテキストの元のランのRSIDは、元の<w:r>要素を抽出して再利用することで保持します。
例 - 文中の「30日」を「60日」に変更する場合:
# 悪い例 - 文全体を置換
'<w:del><w:r><w:delText>期間は30日です。</w:delText></w:r></w:del><w:ins><w:r><w:t>期間は60日です。</w:t></w:r></w:ins>'
# 良い例 - 変更された部分のみをマークし、変更なしのテキストには元の<w:r>を保持
'<w:r w:rsidR="00AB12CD"><w:t>期間は</w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t>日です。</w:t></w:r>'
変更履歴ワークフロー
-
Markdown表現を取得: 変更履歴を保持したままドキュメントをMarkdownに変換します:
pandoc --track-changes=all path-to-file.docx -o current.md -
変更を特定してグループ化: ドキュメントをレビューし、必要なすべての変更を特定して、論理的なバッチに整理します:
位置特定方法(XML内の変更を見つけるため):
- セクション/見出し番号(例:「セクション3.2」、「第4条」)
- 番号付きの段落識別子
- 一意の周囲テキストを使用したgrepパターン
- ドキュメント構造(例:「最初の段落」、「署名欄」)
- Markdownの行番号を使用しないでください - XML構造にマッピングされません
バッチ整理(1バッチあたり3~10の関連変更をグループ化):
- セクション別:「バッチ1:セクション2の修正」、「バッチ2:セクション5の更新」
- 種類別:「バッチ1:日付の修正」、「バッチ2:当事者名の変更」
- 複雑性別:単純なテキスト置換から始め、複雑な構造変更に取り組みます
- 順次:「バッチ1:1~3ページ」、「バッチ2:4~6ページ」
-
ドキュメントを読んで解包:
- 必須 - ファイル全体を読む:
ooxml.md(約600行)を最初から最後まで完全に読んでください。このファイルを読む際には範囲制限を設定しないでください。「Document Library」と「Tracked Change Patterns」セクションに特に注意してください。 - ドキュメントを解凍:
python ooxml/scripts/unpack.py <file.docx> <dir> - 提案されたRSIDを書き留める: 解凍スクリプトは、変更履歴に使用するRSIDを提案します。このRSIDをコピーして手順4bで使用します。
- 必須 - ファイル全体を読む:
-
バッチで変更を実装: 変更を論理的にグループ化し(セクション別、種類別、近接性別)、単一のスクリプトでまとめて実装します。このアプローチ:
- デバッグが容易になります(バッチが小さいほどエラーの特定が容易)
- 段階的な進捗が可能
- 効率を維持します(3~10個の変更のバッチサイズが適切)
推奨バッチグループ化:
- ドキュメントセクション別(例:「セクション3の変更」、「定義」、「終了条項」)
- 変更タイプ別(例:「日付の変更」、「当事者名の更新」、「法的用語の置換」)
- 近接性別(例:「1~3ページの変更」、「前半の変更」)
関連する各変更バッチについて:
a. テキストをXMLにマッピング:
word/document.xml内のテキストをgrepして、テキストがどのように<w:r>要素に分割されているかを確認します。b. スクリプトを作成して実行:
get_nodeを使用してノードを見つけ、変更を実装し、doc.save()を実行します。パターンについては、ooxml.mdの**「Document Library」**セクションを参照してください。注: スクリプトを作成する直前に必ず
word/document.xmlをgrepして、現在の行番号を取得し、テキスト内容を確認してください。行番号はスクリプト実行後に変わります。 -
ドキュメントをパック: すべてのバッチが完了したら、解凍したディレクトリを.docxに戻します:
python ooxml/scripts/pack.py unpacked reviewed-document.docx -
最終検証: 完全なドキュメントの包括的なチェックを行います:
- 最終ドキュメントをMarkdownに変換:
pandoc --track-changes=all reviewed-document.docx -o verification.md - すべての変更が正しく適用されたことを確認:
grep "元のフレーズ" verification.md # 見つからないはず grep "置換フレーズ" verification.md # 見つかるはず - 意図しない変更が導入されていないことを確認します
- 最終ドキュメントをMarkdownに変換:
ドキュメントを画像に変換
Word文書を視覚的に分析するために、2段階のプロセスで画像に変換します:
-
DOCXをPDFに変換:
soffice --headless --convert-to pdf document.docx -
PDFページをJPEG画像に変換:
pdftoppm -jpeg -r 150 document.pdf pageこれにより、
page-1.jpg、page-2.jpgなどのファイルが作成されます。
オプション:
-r 150: 解像度を150 DPIに設定(品質/サイズのバランスを調整)-jpeg: JPEG形式で出力(必要に応じて-pngでPNGに)-f N: 変換開始ページ(例:-f 2で2ページ目から開始)-l N: 変換終了ページ(例:-l 5で5ページ目で停止)page: 出力ファイルのプレフィックス
特定範囲の例:
pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page # 2~5ページのみ変換
コードスタイルガイドライン
重要: DOCX操作用のコードを生成する場合:
- 簡潔なコードを書くこと
- 冗長な変数名や不要な操作を避けること
- 不要なprint文を避けること
依存関係
必要な依存関係(利用できない場合はインストール):
- pandoc:
sudo apt-get install pandoc(テキスト抽出用) - docx:
npm install -g docx(新しい文書作成用) - LibreOffice:
sudo apt-get install libreoffice(PDF変換用) - Poppler:
sudo apt-get install poppler-utils(pdftoppmでPDFを画像に変換するため) - defusedxml:
pip install defusedxml(安全なXML解析用)