RとJ-LIWC2015によるテキスト解析

五十嵐 祐 (@tasukuigarashi)

はじめに

※2024/11/05 jliwcパッケージの公開により、WindowsのRでも分析が可能となりました。また、設定の手順が大幅に簡略化され、MeCabや他のRパッケージのインストールが不要となりました。

このページでは、RでJ-LIWC2015(Igarashi, Okuda, & Sasahara, 2022) による日本語テキスト解析を行う方法を紹介しています。jliwcパッケージの紹介ページ(英語)がベースとなっています。

J-LIWC2015は、英単語の言語学的・心理学的特性を数値化したテキスト解析の標準的な辞書である、Linguistic Inquiry and Word Count 2015 (LIWC2015) の公式日本語版です。J-LIWC2015は、11,609の単語、69のカテゴリを含み、心理学者、計算科学者によってその信頼性・妥当性が確認されています。

J-LIWC2015のライセンスは、Pennebaker Conglomerates, Inc.が所有しています。J-LIWC2015は、大学での学術研究目的に限り無料で利用できます(英語による説明)。研究成果の公開時には、必ず下記論文を引用してください。

Igarashi, T., Okuda, S., & Sasahara, K. (2022). Development of the Japanese Version of the Linguistic Inquiry and Word Count Dictionary 2015. Frontiers in Psychology, 13:841534. https://doi.org/10.3389/fpsyg.2022.841534

商用利用に関しては、Receptiviまでお問い合わせください。

フィードバックは、https://github.com/tasukuigarashi/j-liwc2015-Rまでお願いします。

事前準備

RでJ-LIWC2015による解析を行うには、以下の環境・ファイルが必要です。

  1. R (≥ 4.2.0)
  2. J-LIWC2015の辞書ファイル(Japanese_dictionary.dic あるいは LIWC2015 Dictionary - Japanese.dicx(LIWC2015、あるいはLIWC-22のライセンスが必要です)
  3. jliwcパッケージ

R (≥ 4.2.0)

Windows、Mac、Linuxいずれの環境でも実行できます。R Version 4.2.0以降では、デフォルトの文字エンコーディングがUTF-8となったため、Windows環境でも分析が実行可能となりました。

J-LIWC2015の辞書ファイル

LIWC2015あるいはLIWC-22のライセンス(シリアル番号)が必要です。J-LIWC2015の利用に際して、LIWC2015のライセンスがある場合、新たにLIWC-22のライセンスを購入する必要はありません。このチュートリアルは、LIWC2015形式とLIWC-22形式、両方の辞書フォーマットに対応しています。

LIWC2015形式の辞書は、以下の手順でダウンロードしてください:LIWC2015の辞書サイトにアクセス→LIWC2015のシリアル番号を入力し、Loginをクリック→Dictionariesをクリック→Next>ボタンをクリック→Japanese Dictionaryをクリック→同意事項を読み、I agreeをチェック→Download this Dictionaryをクリック

なお、LIWC2015は販売終了となっており、2022年2月から、Pennebaker Conglomerates, Inc. のサイトで、LIWC-22が購入可能です(30日~3年のサブスクリプション契約のみ)。LIWC-22のシリアル番号は、LIWC2015とは異なります。LIWC-22の辞書サイトからログインし、LIWC-22形式のJ-LIWC2015の辞書ファイルをダウンロードしてください(フォーマットが異なりますが、内容は同一です)。

jliwcパッケージ

GitHubからインストールします。remoteパッケージがインストールされていない場合は、先にインストールしてください。

# RとJ-LIWC2015によるテキスト解析

# remoteパッケージのインストール(一度のみ)
if (!requireNamespace("remote", quietly = TRUE)) {
  install.packages("remote")
}

# jliwcパッケージのインストール(一度のみ)
remotes::install_github("tasukuigarashi/jliwc")

Windowsでエラーが出てインストールできない場合、Rtoolsをインストールしてください。Rのバージョンごとに対応するRtoolsのバージョンが異なるため、注意してください。

Rでの解析

事前準備を済ませたら、RでJ-LIWC2015による日本語テキスト解析を行っていきます。

辞書のインストール

jliwcパッケージで日本語のテキストデータを解析するには、(1) IPAdic、(2) ユーザー辞書、(3) J-LIWC2015 辞書の 3 つの辞書をインストールする必要があります。これは最初に一度だけ実行する必要があります。

辞書のインストールには、install_dictionaries()を使用します。デフォルトでは、辞書はアプリケーションディレクトリ (tools::R_user_dir("jliwc", "data")) にインストールされます。多くの場合はこの設定で問題ありませんので、Yを入力して進んでください。J-LIWC2015辞書のインストールは、R GUIまたはRStudioの場合、ファイル選択ダイアログで辞書ファイルを選択してください。コマンドラインからRを使用する場合は、辞書ファイルのパスを入力してください。

library(jliwc)

# 一度だけ実行、すべての辞書をインストール
install_dictionaries()

# 辞書を個別にインストールする場合は以下を実行
# install_ipadic()
# install_userdic()
# install_jliwcdic()

Windowsでは、ユーザー名に非ASCII文字またはスペースが含まれている場合 (例: C:/Users/山田 太郎)、辞書を正しくインストールできないことがあります。辞書をデフォルト以外のディレクトリにインストールする場合は、options(jliwc_project_home = "インストール先のパス") でパスを指定できます。インストール先のパスには、スペースを含まないASCII文字 (1バイトの英字または数字) で名前を付けることを推奨します (例: C:/JLIWC)。

# すべての辞書をデフォルトのディレクトリにインストールした場合、以下は実行不要

# 辞書のインストール先を指定
options(jliwc_project_home = "C:/JLIWC")

# 一度だけ実行、すべての辞書をインストール
install_dictionaries()

辞書の読み込み

辞書がインストールできたら、load_dictionaries()で辞書を読み込みます。次回以降は、jliwcパッケージを読み込んでから、load_dictionaries()を実行するだけでOKです。

# 辞書の読み込み
load_dictionaries()

テキストデータの解析

load_dictionaries()で辞書ファイルを読み込んだら、liwc_analysis()で日本語のテキストを分析できます。この関数はテキストの前処理とIPAdicによる形態素解析を行った後、テキストのLIWCカテゴリスコアを含むデータフレームを返します。

辞書をデフォルト以外のディレクトリにインストールした場合は、辞書をロードする前にoptions(jliwc_project_home = "インストール先のパス")でパスを指定してください。

# 辞書ファイルの読み込み
# デフォルト以外の場所(例:"C:/JLIWC")に辞書ファイルをインストールした場合、以下を先に実行
# options(jliwc_project_home = "C:/JLIWC")

library(jliwc)

load_dictionaries()

# サンプル(銀河鉄道の夜)
texts <- gibasa::ginga
head(texts)
#>  [1] "銀河鉄道の夜"
#>  [2] "宮沢賢治"
#>  [3] "一 午後の授業"
#>  [4] "「ではみなさんは、そういうふうに川だと言われたり、乳の流れたあとだと言われたりしていた、..."
#>  [5] " カムパネルラが手をあげました。それから四、五人手をあげました。ジョバンニも手をあげようとして、..."
#>  [6] " ところが先生は早くもそれを見つけたのでした。"

# データフレームの作成
# 分析対象の列名は"text"とする
texts_df <- data.frame(text = texts)

liwc_results_df <- texts_df |> liwc_analysis()

dplyr::tibble(liwc_results_df)
#> # A tibble: 553 × 85
#>    doc_id    WC   Dic `function` pronoun ppron     i    we   you shehe  they
#>    <chr>  <int> <dbl>      <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 1          4  50         25      0        0     0     0     0     0     0
#>  2 2          2   0          0      0        0     0     0     0     0     0
#>  3 3          4 100         25      0        0     0     0     0     0     0
#>  4 4         75  76         46.7    5.33     0     0     0     0     0     0
#>  5 5         80  83.8       47.5    3.75     0     0     0     0     0     0
#>  6 6         12  91.7       50      8.33     0     0     0     0     0     0
#>  7 7         10  70         40     10       10     0     0    10     0     0
#>  8 8         62  69.4       45.2    1.61     0     0     0     0     0     0
#>  9 9         15  66.7       46.7    6.67     0     0     0     0     0     0
#> 10 10        22  68.2       50      0        0     0     0     0     0     0
#> # ℹ 543 more rows
#> # ℹ 74 more variables: ipron <dbl>, casepart <dbl>, auxverb <dbl>,
#> #   adverb <dbl>, conj <dbl>, negate <dbl>, verb <dbl>, interrog <dbl>,
#> #   number <dbl>, quant <dbl>, adjverb <dbl>, preadj <dbl>, affect <dbl>,
#> #   posemo <dbl>, negemo <dbl>, anx <dbl>, anger <dbl>, sad <dbl>,
#> #   social <dbl>, family <dbl>, friend <dbl>, female <dbl>, male <dbl>,
#> #   cogproc <dbl>, insight <dbl>, cause <dbl>, discrep <dbl>, tentat <dbl>,
# ℹ Use `print(n = ...)` to see more row

# テキストの配列を直接渡すことも可能
liwc_results <- texts |> liwc_analysis()

dplyr::tibble(liwc_results)
#> ... (上と同様)

テキストファイルの解析

テキストファイルの読み込みには、 read_text_files()を使用できます。 この関数は、単一または複数のファイルへのパス、あるいはテキストファイルを含むディレクトリのパスルを引数に指定すると、テキストを含むデータフレームを返します。liwc_analysis()には、このデータフレームを直接渡すことができます。

# 辞書ファイルの読み込み
load_dictionaries()

# サンプルテキスト「名大会話コーパス」(https://mmsrv.ninjal.ac.jp/nucc/)
# 出典:Fujimura, I., Chiba, S., & Ohso, M. (2012).
# Lexical and grammatical features of spoken and written Japanese in contrast:
# Exploring a lexical profiling approach to comparing spoken and written corpora.
# In Proceedings of the VIIth GSCP International Conference. Speech and Corpora (pp. 393-398).

# コーパスデータのダウンロードと展開
temp_zip_file <- tempfile(fileext = ".zip")
temp_dir <- tempdir()

download.file(url = "https://mmsrv.ninjal.ac.jp/nucc/nucc.zip", dest = temp_zip_file, mode = "wb")
unzip(zipfile = temp_zip_file, exdir = temp_dir)

# ディレクトリの指定
nucc_dir <- file.path(temp_dir, "nucc")

# テキストファイルの一覧を作成
text_files <- list.files(nucc_dir, pattern = "\\.txt$", full.names = TRUE)

head(text_files)
#> [1] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data001.txt"
#> [2] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data002.txt"
#> [3] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data003.txt"
#> [4] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data004.txt"
#> [5] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data005.txt"
#> [6] "C:\\Users\\username\\AppData\\Local\\Temp\\RtmpCMTg7o/nucc/data006.txt"

# テキストファイルの読み込み
# ファイル名の指定
files1 <- read_text_files(text_files)
#> Number of files read: 129
#> Total bytes: 7843788

# ディレクトリを指定することも可能
# 結果はファイル名を指定した場合と同様
files2 <- read_text_files(nucc_dir, filetype = "txt")
#> Number of files read: 129
#> Total bytes: 7843788

# 自分のデータをread_text_files()で読み込むことも可能
# 'filetype'(拡張子)を必要に応じて変更
# file1 <- read_text_files("/path/to/directory/", filetype = "txt")

# テキストファイルの分析
# サンプルデータのため、最低限の前処理(デフォルト)のみを行っている
# 実際のデータを分析する際には、適切な前処理を行う必要がある
liwc_results_files <- files1 |> liwc_analysis()

dplyr::tibble(liwc_results_files)
#> # A tibble: 129 × 85
#>    doc_id         WC   Dic `function` pronoun ppron      i     we
#>    <chr>       <int> <dbl>      <dbl>   <dbl> <dbl>  <dbl>  <dbl>
#>  1 data001.txt  8774  64.0       34.8    3.93 0.809 0.399  0.194 
#>  2 data002.txt 14291  65.7       35.5    3.74 0.917 0.567  0.238 
#>  3 data003.txt  7315  65.8       34.0    4.02 0.902 0.574  0.123 
#>  4 data004.txt  8368  62.0       32.7    5.65 1.55  0.406  0.0478
#>  5 data005.txt 13223  59.6       32.2    4.30 1.31  0.159  0.0908
#>  6 data006.txt 11948  59.7       33.6    4.36 1.19  0.737  0.0251
#>  7 data007.txt  8550  63.5       36.5    4.62 0.795 0.0351 0.0234
#>  8 data008.txt 19817  68.3       38.2    5.63 1.18  0.636  0.0908
#>  9 data009.txt 19010  67.4       37.1    5.52 1.38  0.0789 0.0473
#> 10 data010.txt 10542  64.5       33.3    4.23 1.07  0.0664 0.0854
#> # ℹ 119 more rows
#> # ℹ 77 more variables: you <dbl>, shehe <dbl>, they <dbl>,
#> #   ipron <dbl>, casepart <dbl>, auxverb <dbl>, adverb <dbl>,
#> #   conj <dbl>, negate <dbl>, verb <dbl>, interrog <dbl>,
#> #   number <dbl>, quant <dbl>, adjverb <dbl>, preadj <dbl>,
#> #   affect <dbl>, posemo <dbl>, negemo <dbl>, anx <dbl>,
#> #   anger <dbl>, sad <dbl>, social <dbl>, family <dbl>, …
#> # ℹ Use `print(n = ...)` to see more rows

J-LIWC2015、MeCabのカテゴリー一覧

jliwcパッケージでは、各単語の品詞の分類を2つの形式で行います。1つはJ-LIWC2015辞書で付与されるカテゴリー、もう1つはMeCab(形態素解析に使用するプログラム)で付与されるカテゴリーです。MeCabのカテゴリーは、末尾に「2」がついています。MeCabのカテゴリーのほうが包括的であり、J-LIWC2015辞書のカテゴリーよりも多くの単語をカバーしているため、品詞の分析や解釈にはMeCabのカテゴリーを使用することを推奨します。

Category カテゴリー LIWCでの表記 単語例 単語数
Linguistic dimensions 言語次元
Function words 機能語 function あいつ、非常に、ない 1808
Pronouns 代名詞 pronoun 私、あなた、ここ 111
Personal pronouns 人称代名詞 ppron 私、あなた、彼女 61
1st person singular 一人称単数 i 私、僕、おれ 13
1st person plural 一人称複数 we 我々、達、たち 3
2nd person 二人称 you あなた、君、お前 16
3rd person singular 三人称単数 shehe 彼女、彼、あいつ 8
3rd person plural 三人称複数 they 彼女ら、彼ら、奴等 8
Impersonal pronouns 不定代名詞 ipron ここ、之、全て 75
Case particles 格助詞 casepart とか、から、以来 187
Auxiliary verbs 助動詞 auxverb だ、できる、如し 110
Adverbs 副詞 adverb すっかり、非常に、目下 1268
Conjunctions 接続詞 conj すなわち、一方、及び 149
Negations 否定詞 negate ず、ない、未 44
Other grammar その他の文法
Verbs 動詞 verb わかる、行く、住む 2271
Interrogatives 疑問詞 interrog なぜ、どうして、何 18
Numbers 数詞 number ゼロ、百、率 52
Quantifiers 数量詞・助数詞 quant 数多く、いろんな、バレル 261
Adjective verbs 形容動詞 adjverb シンプル、大まか、平気 184
Prenoun adjectival 連体詞 preadj ほんの、そんな、如何なる 35
Psychological processes 心理的プロセス
Affective processes 感情プロセス affect おかしい、敏感、マジ 2067
Positive emotions ポジティブ感情 posemo 上品、善、最愛 941
Negative emotions ネガティブ感情 negemo 不信、いいかげん、いや 1075
Anxiety 不安 anx 不吉、ナーバス、警鐘 157
Anger 怒り anger 不快、逆ギレ、ハラスメント 329
Sadness 悲しみ sad 不幸、悲観、自滅 168
Social processes 社会的(相互作用)プロセス social 迎える、語る、ふれあい 1027
Family 家族 family 両親、いとこ、一家 122
Friends 友人 friend 友達、盟友、相棒 92
Female references 女性 female ウーマン、乙女、ママ 137
Male references 男性 male おじさん、殿、婿 105
Cognitive Processes 認知プロセス cogproc 心がけ、図る、補う 1307
Insight 洞察 insight 信念、注目、探索 384
Causation 原因 cause 誘引、影響、動機 229
Discrepancies 不一致 discrep 意外、ふつう、誤 107
Tentative あいまいさ tentat 推定、気まぐれ、様々 281
Certainty 確かさ certain 常に、厳密、パーフェクト 247
Differentiation 差別化 differ 識別、相違、対照的 137
Perceptual processes 知覚プロセス percept 五感、体験、味 970
See 視覚・知覚 see 一見、写す、白 351
Hear 聴覚 hear 歌唱、鳴る、静 205
Feel 感覚(触覚・味覚・嗅覚) feel 鋭利、感覚、うずうず 307
Biological processes 生物学的プロセス bio 遺伝、生態、成熟 956
Body 身体 body つま先、脳、眠い 286
Health 健康 health 鎮痛、かゆい、しこり 384
Sexual sexual ポルノ、欲情、変質者 118
Ingestion 摂取 ingest ビール、雑穀、ベジタリアン 225
Drives 動因 drives 主権、威力、同胞 2083
Affiliation つながり affiliation 身内、談笑、友情 418
Achievement 達成 achieve 称賛、リーダー、誇る 546
Power 社会的地位・権力 power ランキング、当局、捕まる 959
Reward 報酬 reward 発展、向上心、功績 237
Risk リスク risk 事故、コスト、セキュリティ 252
Relativity 相対性 relativ 原点、前後、無限 2342
Motion 動作 motion 回す、握る、忍び足 844
Space 空間 space 領域、距離、溝 760
Time 時間 time やっと、週末、最近 814
Personal concerns 個人的な事柄
Work 仕事・学業 work 転職、取り引き、幼稚園 837
Leisure 趣味・余暇 leisure 歌う、園芸、小説 399
Home home キッチン、枕、リフォーム 148
Money 金銭 money 給料、負債、ディスカウント 317
Religion 宗教 relig 密教、神主、供える 183
Death death 追悼、不滅、四十九日 89
Informal language インフォーマル informal 何だ、あいつ、み 589
Swear words 罵倒 swear 非国民、アホ、雑魚 56
Netspeak ネットスラング netspeak うp、なう、ぴえん 346
Assent うなずき assent そう、是非とも、おk 16
Nonfluencies 間投詞 nonflu あぁ、はて、へえ 121
Filler words フィラー filler うむ、さて、はは 25
Symbols (MeCab) 記号2 symbol2
Adjectives (MeCab) 形容詞2 adj2
Case particles (MeCab) 助詞2 particle2
Auxiliary verbs (MeCab) 助動詞2 auxverb2
Conjunctions (MeCab) 接続詞2 conj2
Prefixes (MeCab) 接頭詞2 prefix2
Verbs (MeCab) 動詞2 verb2
Adverbs (MeCab) 副詞2 adverb2
Nouns (MeCab) 名詞2 noun2
Prenoun adjectival (MeCab) 連体詞2 preadj2
Other grammers (MeCab) その他2 others2
Filler words (MeCab) フィラー2 filler2
Interjections (MeCab) 感動詞2 interject2

その他

  • CP932 (Shift-JIS)、EUC、UTF-16などのエンコーディングで保存されているテキストファイルは、Rでの読み込み時に文字コードを正しく指定しないと文字化けする場合があります。

License

This software is released under the GPL-3.0 License.

Copyright (c) 2022-2024 Tasuku Igarashi