はじめに
Rのパッケージであるquantedaを用いて日本語のテキストマイニングを行いたいと思いましたが、ドンピシャで自分にハマる記事を見つけられませんでした。なので自分で書きたいと思います。
参考ページではAPIでデータのダウンロードを行っていますが、汎用性を意識して、ここではcsv形式を用いて分析をしてみます。
(*初投稿です。日本語が拙かったらすみません...)
参考にしたサイトは以下のquanteda公式のクイック・スタートガイドです。
事例: 衆議院外務委員会の議事録
必要なパッケージの読み込み
参考ページをコピペ+csvを読み込む時に使う"tidyverse"を読み込みます。
もし過不足あれば、コメントしていただけると幸いです。
library(quanteda)
library(stringr)
library(lubridate)
library(topicmodels)
library(tidyverse)
データの読み込みとコーパスの作成
必要なデータを読み込みます。私は研究で用いている市議会の発言内容のcsvファイルを読み込んで使いました。
読み込んだcsvファイルをコーパスにするところまで一気にしてしまいます。
df <- read_csv("sample.csv")
my_corpus <- corpus(df, text_field = "(分析テキストの入った)カラム名", docid_field = "行番号")
トークン化
ここでは、読み込んだコーパスをトークンにしています。基本的なコードは、quanteda公式のクイックスタートガイドそのままです。
toks <- tokens(my_corpus)
toks <- tokens_select(toks, "^[0-9ぁ-んァ-ヶー一-龠]+$", valuetype = "regex", padding = TRUE)
toks <- tokens_remove(toks, c("御", "君"), padding = TRUE)
min_count <- 10
# 漢字
library("quanteda.textstats")
kanji_col <- tokens_select(toks, "^[一-龠]+$", valuetype = "regex", padding = TRUE) |>
textstat_collocations(min_count = min_count)
toks <- tokens_compound(toks, kanji_col[kanji_col$z > 3,], concatenator = "")
# カタカナ
kana_col <- tokens_select(toks, "^[ァ-ヶー]+$", valuetype = "regex", padding = TRUE) |>
textstat_collocations(min_count = min_count)
toks <- tokens_compound(toks, kana_col[kana_col$z > 3,], concatenator = "")
# 漢字,カタカナおよび数字
any_col <- tokens_select(toks, "^[0-9ァ-ヶー一-龠]+$", valuetype = "regex", padding = TRUE) |>
textstat_collocations(min_count = min_count)
toks <- tokens_compound(toks, any_col[any_col$z > 3,], concatenator = "")
文書行列の作成
ここも基本的には参考ページのまま
speech_dfm <- dfm(toks) |>
dfm_remove("") |>
dfm_remove("^[ぁ-ん]+$", valuetype = "regex", min_nchar = 2) |>
dfm_trim(min_termfreq = 0.50, termfreq_type = "quantile", max_termfreq = 0.99)
LDA分析
ldaの分析に入ります。トピック数は任意ですが、ここでは10にしておきます。
lda分析がたったコード3行で終わるとは、すごいですね。
set.seed(100)
lda <- LDA(convert(speech_dfm, to = "topicmodels"), k = 10)
get_terms(lda, 10) |> knitr::kable()
最後に
ここでは何のデータを使っているか明記していない手前、分析方法はLDAのみにしました。ただ、公式クイックスタートガイドにはLDAに他に、相対頻度分析や狂気ネットワーク分析などもありました。反響があれば書いてみたいですね。
今私の研究室で、地方議会(主に近畿地方の市議会)を対象としたデータベースの構築中です。
このDBが完成したら、DBからダウンロードしたデータを用いた分析用に書き直そうかな。と構想中です。