外務省が発行する「外交青書2025」第1章「国際情勢認識と日本外交の展望」を対象としたテキストマイニング分析のサンプルプロジェクトです。
このリポジトリでは、日本語PDFドキュメントに対して以下のテキストマイニング手法を実装しています:
- 形態素解析: Janomeを使用した日本語テキストの単語分解
- 単語頻度分析: 出現頻度の高いキーワードの特定
- 共起分析: 同時に出現する単語ペアの分析とネットワーク可視化
- ワードクラウド: 単語頻度の視覚化
textmining-samples/
├── 1_2_1.pdf # 分析対象PDF(外交青書2025 第1章)
├── text_mining_analysis.ipynb # Python版 Jupyterノートブック(実行結果付き)
├── text_mining_analysis_r.ipynb # R版 Jupyterノートブック
├── word_frequency_analysis.py # 単語頻度分析スクリプト
├── wordcloud_generator.py # ワードクラウド生成スクリプト
├── word_frequency_results.csv # 単語頻度分析結果
├── cooccurrence_results.csv # 共起分析結果
├── wordcloud.png # ワードクラウド画像
├── stop_words.csv # ストップワード一覧
├── abstract.md # PDF要約
└── README.md # このファイル
- Python 3.8以上
- 日本語フォント(Noto Sans CJK等)
- R 4.0以上
- MeCab(日本語形態素解析エンジン)
- IRkernel(JupyterでRを実行するためのカーネル)
git clone https://github.com/kkawailab/textmining-samples.git
cd textmining-samplespython3 -m venv venv
source venv/bin/activate # Linux/macOS
# または
.\venv\Scripts\activate # Windowspip install pdfplumber janome wordcloud matplotlib japanize-matplotlib networkx jupyterUbuntu/Debian:
sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8macOS:
brew install mecab mecab-ipadicinstall.packages(c("pdftools", "RMeCab", "dplyr", "tidyr", "ggplot2",
"igraph", "wordcloud2", "stringr", "htmlwidgets"))install.packages("IRkernel")
IRkernel::installspec()統合ノートブックには全ての分析が含まれており、実行結果も確認できます。
jupyter notebook text_mining_analysis.ipynbノートブックの構成:
| セクション | 内容 |
|---|---|
| 1. 環境設定 | ライブラリのインポート |
| 2. 設定とパラメータ | 分析パラメータの定義 |
| 3. PDFからテキスト抽出 | pdfplumberでテキスト抽出 |
| 4. テキストの前処理 | クリーニング処理 |
| 5. 形態素解析 | Janomeで単語分解 |
| 6. 単語頻度分析 | 出現回数カウント・可視化 |
| 7. 共起分析 | 単語ペア分析・ネットワーク描画 |
| 8. 品詞別分析 | 品詞構成の分析 |
| 9. ワードクラウド生成 | 視覚化 |
| 10. 結果の保存 | CSV出力 |
| 11. 分析結果のまとめ | サマリー表示 |
R環境とMeCabが設定済みの場合、R版でも同様の分析が可能です。
jupyter notebook text_mining_analysis_r.ipynbR版ノートブックの構成:
| セクション | 内容 |
|---|---|
| 1. 環境設定 | ライブラリの読み込み |
| 2. 設定とパラメータ | 分析パラメータの定義 |
| 3. PDFからテキスト抽出 | pdftoolsでテキスト抽出 |
| 4. テキストの前処理 | クリーニング処理 |
| 5. 形態素解析 | RMeCabで単語分解 |
| 6. 単語頻度分析 | 出現回数カウント・可視化 |
| 7. 共起分析 | 単語ペア分析・igraphでネットワーク描画 |
| 8. 品詞別分析 | 品詞構成の分析 |
| 9. ワードクラウド生成 | wordcloud2で視覚化 |
| 10. 結果の保存 | CSV出力 |
| 11. 分析結果のまとめ | サマリー表示 |
python word_frequency_analysis.py出力:
- コンソールに上位30語のランキング表示
word_frequency_results.csvに全単語の頻度データを保存
python wordcloud_generator.py出力:
wordcloud.pngにワードクラウド画像を保存
| 項目 | 値 |
|---|---|
| 抽出文字数 | 6,547文字 |
| 総単語数 | 1,387語 |
| ユニーク単語数 | 586語 |
| 共起ペア数 | 445ペア |
| 順位 | 単語 | 出現回数 |
|---|---|---|
| 1 | 国際 | 56 |
| 2 | 社会 | 29 |
| 3 | 経済 | 20 |
| 4 | 日本 | 17 |
| 5 | 安全 | 16 |
| 6 | 秩序 | 15 |
| 7 | 課題 | 15 |
| 8 | 含む | 15 |
| 9 | 重要 | 14 |
| 10 | 情勢 | 13 |
| 順位 | 単語ペア | 共起回数 |
|---|---|---|
| 1 | 国際 - 社会 | 24 |
| 2 | 国際 - 秩序 | 12 |
| 3 | 保障 - 安全 | 11 |
| 4 | 国際 - 情勢 | 9 |
| 5 | 国際 - 日本 | 8 |
stop_words.csv または各スクリプト内の STOPWORDS 変数を編集してください。
STOPWORDS = {
'こと', 'もの', 'ため', 'よう', # 形式名詞
'する', 'いる', 'ある', 'なる', # 補助動詞
# ... 追加・削除
}デフォルトでは名詞・動詞・形容詞を抽出しています。
TARGET_POS = ['名詞', '動詞', '形容詞']WORDCLOUD_CONFIG = {
'width': 1200, # 画像幅
'height': 800, # 画像高さ
'background_color': 'white',
'max_words': 100, # 最大単語数
'colormap': 'viridis', # カラーマップ(plasma, inferno, magma等)
}| ライブラリ | 用途 |
|---|---|
| pdfplumber | PDFからテキスト抽出 |
| Janome | 日本語形態素解析 |
| wordcloud | ワードクラウド生成 |
| matplotlib | グラフ・画像表示 |
| japanize-matplotlib | matplotlib日本語対応 |
| networkx | 共起ネットワーク可視化 |
| ライブラリ | 用途 |
|---|---|
| pdftools | PDFからテキスト抽出 |
| RMeCab | 日本語形態素解析(MeCab使用) |
| dplyr, tidyr | データ操作 |
| ggplot2 | グラフ・画像表示 |
| igraph | 共起ネットワーク可視化 |
| wordcloud2 | ワードクラウド生成 |
| stringr | 文字列処理 |
このプロジェクトはサンプルコードとして公開しています。 分析対象のPDFファイル(外交青書)の著作権は外務省に帰属します。
- R版Jupyterノートブック(
text_mining_analysis_r.ipynb)を追加- pdftoolsによるPDFテキスト抽出
- RMeCabによる形態素解析
- igraphによる共起ネットワーク可視化
- wordcloud2によるワードクラウド生成
- READMEにR環境セットアップ手順を追加
- 使用ライブラリ一覧をPython版/R版に分離
- Jupyterノートブック形式(
text_mining_analysis.ipynb)を追加 - 共起分析機能を追加
- 文単位での共起頻度計算
- networkxによる共起ネットワーク可視化
- キーワード別共起単語分析
- 共起分析結果(
cooccurrence_results.csv)を追加 - ノートブックに実行結果を含めて保存
- 初回リリース
- PDFテキスト抽出機能
- 形態素解析(Janome)
- 単語頻度分析
- ワードクラウド生成
- ストップワード定義
- PDF要約(
abstract.md)
