Python と Spire.Doc を利用した Word 文書内の単語頻度の解析方法

大量の Word 文書から特定キーワードの出現回数を抽出する必要がある場合、手作業での検索は非効率的です。Python を活用すれば、このようなタスクを自動化し、文書全体やセクション、段落単位で正確に頻度を集計できます。本記事では、Spire.Doc for Python を使用して、DOCX ファイル内のテキスト頻度を統計する手法を紹介します。

Spire.Doc for Python は、Microsoft Office に依存せずに Word 文書を読み書きできるライブラリです。ドキュメントの解析、編集、変換が可能で、大規模な文書処理にも適しています。

環境準備

以下のコマンドでライブラリをインストールします:

pip install spire.doc

文書全体におけるキーワード頻度のカウント

まず、指定したキーワードが文書内で何回出現するかを調べる基本的な処理を実装します。たとえば、「AIアート」という語句がどのくらい登場するかを確認したいケースです。

手順は以下の通りです:

  • Document クラスを使ってファイルを読み込む
  • 対象キーワードを定義
  • FindAllString() メソッドで一致箇所をすべて取得
  • 結果のリスト長さから出現回数を算出

コード例:

from spire.doc import *
from spire.doc.common import *

# ドキュメントの読み込み
doc = Document()
doc.LoadFromFile("input/AIアートの影響分析.docx")

# 検索キーワード
target_word = "AIアート"

# 大文字小文字を区別せず、全文検索
matches = doc.FindAllString(target_word, False, True)
frequency = len(matches)

print(f'"{target_word}" は文書内で {frequency} 回出現しています。')

doc.Close()

セクション単位での頻度集計

Word 文書は複数のセクション(Section)に分けられることがあります。それぞれのセクション内でキーワードが何度使われているかを調べることで、内容の構成傾向を把握できます。

この処理では、正規表現を併用してより柔軟なマッチングを行います。特に、完全一致や大文字小文字の無視に対応可能です。

実装コード:

import re
from spire.doc import *

doc = Document()
doc.LoadFromFile("input/AIアートの影響分析.docx")

keyword = "AIアート"
total_occurrences = 0

# 全セクションを走査
for sec_index in range(doc.Sections.Count):
    section = doc.Sections.get_Item(sec_index)
    section_text = ""
    
    # 各段落のテキストを結合
    for para_index in range(section.Paragraphs.Count):
        paragraph = section.Paragraphs.get_Item(para_index)
        section_text += paragraph.Text + " "
    
    # 正規表現でキーワードをカウント(エスケープ処理付き)
    count_in_section = len(re.findall(re.escape(keyword), section_text, re.IGNORECASE))
    total_occurrences += count_in_section
    
    print(f"セクション {sec_index + 1}: {count_in_section} 回")

print(f"合計出現回数: {total_occurrences}")
doc.Close()

段落単位での詳細な頻度分析

さらに細かいレベルとして、各段落ごとにキーワードが何回出現するかを表示する方法もあります。これは、特定の主張がどこに集中しているかを分析する際に有効です。

実装手順:

  • すべてのセクションと段落をループ
  • 段落番号を追跡しながらテキストを取得
  • 正規表現でキーワード出現数をカウント
  • ヒットした段落のみ出力

コード例:

import re
from spire.doc import *

doc = Document()
doc.LoadFromFile("input/AIアートの影響分析.docx")

search_term = "AIアート"
overall_count = 0
paragraph_number = 1

for sec_idx in range(doc.Sections.Count):
    section = doc.Sections.get_Item(sec_idx)
    for para_idx in range(section.Paragraphs.Count):
        para = section.Paragraphs.get_Item(para_idx)
        content = para.Text
        
        # 段落内の出現回数を計算
        count = len(re.findall(re.escape(search_term), content, re.IGNORECASE))
        
        if count > 0:
            print(f"段落 {paragraph_number}: \"{search_term}\" が {count} 回出現")
            overall_count += count
        paragraph_number += 1

print(f"全段落中の合計出現回数: {overall_count}")
doc.Close()

まとめ

Spire.Doc for Python を使うことで、Word 文書に対するキーワード頻度の統計処理を簡単に自動化できます。文書全体、セクション、段落といった異なる粒度で分析が可能であり、コンテンツの質的評価や監査用途にも応用できます。正規表現と組み合わせれば、より高度なパターンマッチングも実現可能です。

タグ: Python Spire.Doc Word テキスト分析 正規表現

9月17日 09:39 投稿