自然言語処理において、文書から重要な情報を効率的に抽出する技術は非常に重要です。この記事では、R言語を使用してテキストデータからキーワードを自動的に抽出する方法について説明します。特に、TF-IDF(Term Frequency-Inverse Document Frequency)というアルゴリズムに焦点を当て、その実装例を紹介します。
TF-IDFの基本概念
TF-IDFは、単語の重要度を評価するための手法であり、以下のように計算されます:
- TF(Term Frequency): 単語が特定の文書に出現する頻度。
- DF(Document Frequency): 特定の単語が含まれる文書の数。
- IDF(Inverse Document Frequency): 文書全体での単語の希少性を表す値で、一般的な計算式は次の通りです: IDF = log(文書総数 / (その単語を含む文書数 + 1))
最終的なスコアは次のように求められます: TF-IDF = TF * IDF
この方式では、文書内で頻繁に登場するが他の文書にはあまり現れない単語が高スコアとなり、それが文書を特徴付けるキーワードとみなされます。
R言語での実装
パッケージのインストールと準備
まず、必要なライブラリをインストールおよび読み込みます。
library(tidyverse)
library(tidytext)
library(jiebaRD)
データの読み込み
サンプルデータを用意し、それをR環境に読み込みます。以下のコードでは、インターネット企業の求人情報が格納されたデータセットを使用します。
hire_text <- readRDS("hire_text.rda")
分かち書きの実行
中国語のテキストに対しては、jiebaRDパッケージを使用して分かち書きを行います。また、専門用語や固有名詞を正確に認識するために、カスタム辞書を追加します。
# カスタム辞書の作成
custom_dict <- c("IT", "金融", "プログラミング")
# 分かち書きの実行
worker <- jiebaRD::worker()
result <- hire_text %>%
mutate(id = row_number()) %>%
mutate(words = map(hire_text, function(x) worker$segment(x, custom_dict)))
TF-IDFの計算
分かち書き後のデータを基に、各単語のTF-IDFスコアを計算します。
# 単語ごとの出現回数をカウント
word_counts <- result %>%
unnest(cols = c(words)) %>%
count(id, words, name = "freq")
# TF-IDFの計算
tf_idf_scores <- word_counts %>%
bind_tf_idf(term = words, document = id, n = freq)
# 各文書における上位3つのキーワードを抽出
top_keywords <- tf_idf_scores %>%
group_by(id) %>%
top_n(3, tf_idf) %>%
ungroup()
結果の可視化
最後に、抽出されたキーワードを使ってワードクラウドを作成します。
library(wordcloud2)
top_keywords %>%
count(words) %>%
top_n(200) %>%
wordcloud2(size = 2, fontFamily = "メイリオ",
color = "random-light", backgroundColor = "white")
このプロセスにより、文書の内容を要約するキーワードを効率的に抽出することが可能です。