0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rのquantedaで始める日本語分析(LDA)

Last updated at Posted at 2025-03-09

はじめに

Rのパッケージであるquantedaを用いて日本語のテキストマイニングを行いたいと思いましたが、ドンピシャで自分にハマる記事を見つけられませんでした。なので自分で書きたいと思います。

参考ページではAPIでデータのダウンロードを行っていますが、汎用性を意識して、ここではcsv形式を用いて分析をしてみます。

(*初投稿です。日本語が拙かったらすみません...)

参考にしたサイトは以下のquanteda公式のクイック・スタートガイドです。
事例: 衆議院外務委員会の議事録

必要なパッケージの読み込み

参考ページをコピペ+csvを読み込む時に使う"tidyverse"を読み込みます。
もし過不足あれば、コメントしていただけると幸いです。

package
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行で終わるとは、すごいですね。

lda
set.seed(100)
    lda <- LDA(convert(speech_dfm, to = "topicmodels"), k = 10)
get_terms(lda, 10) |> knitr::kable()

最後に

ここでは何のデータを使っているか明記していない手前、分析方法はLDAのみにしました。ただ、公式クイックスタートガイドにはLDAに他に、相対頻度分析や狂気ネットワーク分析などもありました。反響があれば書いてみたいですね。

今私の研究室で、地方議会(主に近畿地方の市議会)を対象としたデータベースの構築中です。
このDBが完成したら、DBからダウンロードしたデータを用いた分析用に書き直そうかな。と構想中です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?