共起される単語に着目して分析する。
以前、Word Cloudという自然言語処理技術について投稿した。
こういった技術を用いると、従来はできなかった分析や可視化が可能になる。
今回は別の手法で共起語ネットワークという可視化を行ってみたい。
共起語ネットワークとは一言でいうとテキスト内で一緒に出現する単語の関係を視覚化し、単語間の関連性やパターンを分析するための手法である。これにより、テキストデータ内の意味関係や構造を可視化し、従来はできなかった分析が可能になる。
実行環境はGoogle Colaboratory を想定している。
textの部分に自分が分析したい文章を入れて欲しい。
!pip install japanize_matplotlib
!pip install janome
import matplotlib.pyplot as plt
import networkx as nx
import nltk
from nltk.corpus import stopwords
import japanize_matplotlib # 日本語表示のために追加
from janome.tokenizer import Tokenizer # 日本語のトークナイザ
# NLTKのストップワードリストとパンクトをダウンロード(初回のみ)
nltk.download('punkt', quiet=True)
nltk.download('stopwords', quiet=True)
t = Tokenizer()
def find_cooccurrences(tokens, window_size=2):
"""指定されたウィンドウサイズ内での単語の共起関係を見つける"""
cooccurrences = [(tokens[i], tokens[j])
for i in range(len(tokens))
for j in range(i+1, min(i + window_size + 1, len(tokens)))]
return cooccurrences
def preprocess_text_japanese(text):
"""日本語テキストを前処理し、トークンのリストを返す(ここでは簡易版)"""
tokens = [token.surface for token in t.tokenize(text) if token.part_of_speech.split(',')[0] in ['名詞', '動詞']] # 名詞と動詞のみ抽出
return tokens
def visualize_network(cooccurrences):
"""共起関係を元にネットワークを可視化する"""
G = nx.Graph()
G.add_edges_from(cooccurrences)
# ノードの位置を決定(自動的に配置)
pos = nx.spring_layout(G)
plt.figure(figsize=(10, 10))
nx.draw_networkx(G, pos, with_labels=True, font_family='IPAexGothic')
plt.show()
# テキストのサンプル
text = '''
'''
# テキストの前処理と共起関係の検出
tokens = preprocess_text_japanese(text)
cooccurrences = find_cooccurrences(tokens)
# ネットワークの可視化
visualize_network(cooccurrences)
ちなみに適当なサンプルファイルで作成した例がこちら。