音声データを文字起こして、ワードクラウドで可視化する

今回の記事ではタイトル通り、音声データを音声認識ソフトを用いて文字起こしし、その後ビジュアライゼーションをした一連の流れをまとめておく。

対象となるデータは自分たちがレコードしたポッドキャストのエピソードであるが、手法はおそらく全ての日本語音声データに適用できると思われる。

open.spotify.com

音声認識に関しては、手間を省略するためAWSAmazon Transcribeを利用した。理由としては安価に利用できる(無料枠もある)し、すでにAWSのアカウントを持っていたため使いやすかったからである。

aws.amazon.com

音声認識を行ったあとは、トランスクリプションデータをテキストデータとして保存する。今回は'text_data/#10_dataclysm.txt'として保存した。

library(RMeCab)
library(wordcloud2)
file_path = 'text_data/#10_dataclysm.txt'

また今回は、形態素解析にRMeCabを、可視化にはwordcloud.jsをバックとしたwordcloud2パッケージを使用した。ggplot2などを使った行い方もあるが出力が個人的に好きなのでwordcoud2を使用した。

www.r-graph-gallery.com

text_dat <- RMeCabFreq(file_path)

># A tibble: 1,109 x 4
   Term       Info1    Info2  Freq
   <chr>      <chr>    <chr> <int>
 1 あ         フィラー *         4
 2 あの       フィラー *        16
 3 あのー     フィラー *        43
 4 うん       フィラー *        67
 5 うんと     フィラー *         2
 6 え         フィラー *        14
 7 えーっと   フィラー *         7
 8 そうですね フィラー *         2
 9 なんか     フィラー *       121
10 ま         フィラー *        55
# … with 1,099 more rows

出力としては、分割された語、品詞、活用、頻度のデータが得られます。dplyrを用いてこれらのデータから必要なデータのみを抽出する処理を簡単に書けるため作業がとても楽です。

'%!in%' <- function(x,y)!('%in%'(x,y))

wordcloud_data <- text_dat %>% 
  filter(Info1 %in% c("名詞","形容詞","動詞"),
         Info2 != "数",
         Term %!in% stop_words,
         Freq > 1) %>% 
  select(Term, Freq)

ここではstop_wordsというとこで特に含めたくない単語を排除する操作を%!in%関数を自作することで行っています。また、Freqカラムを参照することで頻度が極端に少ない単語も除去しています。

wordcloud2(wordcloud_data, backgroundColor = "white")

f:id:kokiando:20200817183324p:plain

コンソール上や、HTMLにレンダリングしたレポート上ではこのワードクラウドの歌詞がインタラクティブになっている点が好きなのだが、ブログに載せる上では静止画となっているし解像度もかなり低くなってしまっている。 今回は自分の作業の備忘録としてブログに残したが、もし興味がある人がいたら是非とも手元で再現してみてはいかがだろうか。 以上。