tokensは文書を語に分割した状態で効率的に処理するquantedaの独自オブジェクト。tokensの作成・操作を行う関数はtokens_*
と命名されている。トークン化(tokenization)とは、自然言語を機械が扱える形に変換する処理を指す。
tokens()
はICUに内蔵された辞書に基づき、日本語(および中国語)のトークン化を行うたため、MecabやChasenなどの形態素解析ツールを必要としない。テキストがあらかじめ半角スペースで分かち書きされている場合は、what = "fastestword"
とする。
require(quanteda) # パッケージの読み込み
# 分かち書きされている場合
load('data/data_corpus_asahi_2016_seg.rda') # Mecabで分かち書き済み
toks <- tokens(data_corpus_asahi_2016_seg, what = "fastestword", remove_punct = FALSE)
# 分かち書きされていない場合
load('data/data_corpus_asahi_2016.rda')
toks <- tokens(data_corpus_asahi_2016, remove_punct = FALSE)
quantedaはMecabを呼び出す関数を含んでいないが、RMeCabを用いると容易にMecabによる分かち書きを行える
tokensは語の位置を保持するためpadding = TRUE
とすると、削除した語が空文字となり、元々の語の距離を維持することができる。
# 文字以外を削除
toks <- tokens_select(toks, '^[0-9ぁ-んァ-ヶー一-龠]+$', valuetype = 'regex', padding = TRUE)
# ひらがなを削除
toks <- tokens_remove(toks, '^[ぁ-ん]+$', valuetype = 'regex', padding = TRUE)
# KWICで用例を確認
head(kwic(toks, "トランプ"), 20)
##
## [text12, 357] 放言 続ける | トランプ |
## [text13, 420] 党 トップ 走る | トランプ |
## [text13, 490] 右翼 | トランプ |
## [text68, 342] 実業 家 ドナルド | トランプ |
## [text68, 438] 逆に 上がる | トランプ |
## [text68, 481] 影響 大 | トランプ |
## [text303, 53] 不動産 王 | トランプ |
## [text303, 106] 不信 感 強い | トランプ |
## [text303, 136] | トランプ |
## [text303, 224] 過ぎ | トランプ |
## [text303, 255] 叫 | トランプ |
## [text303, 296] 大 隔たる | トランプ |
## [text337, 1059] 候補 座 争う | トランプ |
## [text376, 578] 首位 走る ドナルド | トランプ |
## [text431, 50] 人気 集める ドナルド | トランプ |
## [text431, 105] 訴え 国際 面 | トランプ |
## [text431, 438] 爆撃 主張 | トランプ |
## [text443, 342] 党 大統領 候補 | トランプ |
## [text443, 417] 強 批判 | トランプ |
## [text444, 61] 首位 走る ドナルド | トランプ |
##
## 氏 人気 衰え
## 氏 メキシコ 移民
## 氏 敵
## 氏 支持 率
## 氏 当選 可能性
## 氏 に関する 話題 大統領
## 氏 優位 立
## 氏 心理
## 人気
## 人気 衰え 見
## 氏 有力
## 流 ポピュリズム 大衆 迎合
## 氏 イスラム教 徒
## 氏 イスラム教 徒
## 氏 排外 主義 的
## 氏 批判 随所
## 氏 イスラム教 徒
## 氏 イスラム教 徒
## 氏 排外 主義
## 氏 暗 批判
# KWICをより見やすく別のウィンドウで表示
View(head(kwic(toks, "トランプ"), 100))
# Nグラムの生成
toks_ngram <- tokens_ngrams(toks, n = 2)
head(toks_ngram[[1]], 20)
## [1] "衆_院" "院_議員" "残り_3" "3_年" "年_近く"
## [6] "安倍_晋" "晋_三" "三_首相" "衆_参" "参_同日"
## [11] "同日_選" "衆_院" "院_解散" "憲法_改正" "含む_今夏"
## [16] "今夏_以降" "政権_運営" "同日_選" "続く_三つ" "判断_材料"
# 地理的辞書の読み込み (Watanabe 2017)
dict <- dictionary(file = 'extra/watanabe_country.yml')
head(dict['ASIA'])
## Dictionary object with 1 primary key entry and 3 nested levels.
## - [ASIA]:
## - [CENTER]:
## - [KZ]:
## - カザフスタン*, カザフ*, アスタナ
## - [KG]:
## - キルギスタン*, キルギス*, ビシュケク
## - [TJ]:
## - タジキスタン*, タジック*, ドゥシャンベ
## - [TM]:
## - トルクメニスタン*, トルクメン*, アシャバード
## - [UZ]:
## - ウズベキスタン*, ウズベク*, タシケント
## - [EAST]:
## - [CN]:
## - 中華人民共和国*, 中国*, 北京, 上海
## - [TW]:
## - 中華民国*, 台湾*, 台北
## - [HK]:
## - 香港*
## - [MO]:
## - マカオ*
## - [KP]:
## - 朝鮮民主主義人民共和国*, 北朝鮮*, 平壌
## - [JP]:
## - 日本*, 東京
## - [MN]:
## - モンゴル*, ウランバートル
## - [KR]:
## - 大韓民国*, 韓国, ソウル
## - [SOUTH]:
## - [AF]:
## - アフガニスタン*, アフガン, カブール
## - [BD]:
## - バングラデシュ*, ダッカ
## - [BT]:
## - ブータン*, ティンプー
## - [IN]:
## - インド*, ムンバイ, ニューデリー
## - [IR]:
## - イラン*, テヘラン
## - [MV]:
## - モルディブ*
## - [NP]:
## - ネパール*, カトマンズ
## - [PK]:
## - パキスタン*, イスラマバード
## - [LK]:
## - スリランカ*, コロンボ
## - [SOUTH-EAST]:
## - [BN]:
## - ブルネイ*
## - [KH]:
## - カンボジア*, プノンペン
## - [ID]:
## - インドネシア*, ジャカルタ
## - [LA]:
## - ラオス*, ビエンチャン
## - [MY]:
## - マレーシア*, クアラルンプール, プトラジャヤ
## - [MM]:
## - ミャンマー*, ビルマ*, ヤンゴン, ナイピドー
## - [PH]:
## - フィリピン*, マニラ
## - [SG]:
## - シンガポール*
## - [TH]:
## - タイ*, バンコク
## - [TL]:
## - 東ティモール*, ディリ
## - [VN]:
## - ベトナム*, ハノイ, ホーチミン市
## - [WEST]:
## - [AM]:
## - アルメニア*, イェレヴァン
## - [AZ]:
## - アゼルバイジャン*, アゼリ*, バクー
## - [BH]:
## - バーレーン*, マナマ
## - [CY]:
## - キプロス*, ニコシア
## - [GE]:
## - グルジア*, トビリシ
## - [IQ]:
## - イラク*, バグダッド
## - [IL]:
## - イスラエル*, エルサレム
## - [JO]:
## - ヨルダン*, アンマン
## - [KW]:
## - クウェート*, クウェートシティ
## - [LB]:
## - レバノン*, ベイルート
## - [PS]:
## - パレスチナ*, ガザ市, ガザ, ウェストバンク
## - [OM]:
## - オマーン*, マスカット
## - [QA]:
## - カタール*, ドーハ
## - [SA]:
## - サウジアラビア*, リヤド
## - [SY]:
## - シリア*, ダマスカス
## - [TR]:
## - トルコ*, アンカラ, イスタンブール
## - [AE]:
## - アラブ首長国連邦*, ドバイ, アブダビ
## - [YE]:
## - イエメン*, サナア
# 国コードでtokensを作成
toks_country <- tokens_lookup(toks, dict, levels = 3)
head(toks_country)
## tokens from 6 documents.
## text1 :
## [1] "TH" "TH" "JP"
##
## text2 :
## [1] "KR" "KR" "KR" "JP" "KR" "KR" "KR" "JP" "KR" "KR"
##
## text3 :
## [1] "HK" "JP" "JP" "HK" "JP" "JP" "JP" "JP" "JP" "JP" "JP" "JP" "JP" "JP"
## [15] "JP" "JP" "JP"
##
## text4 :
## [1] "US" "US" "JP" "CN" "CN" "US" "US" "CN" "CN" "CN" "US" "JP" "CN" "CN"
## [15] "US" "CN" "CN" "JP" "VN" "US" "US" "US" "QA" "US" "US" "US" "CN" "US"
##
## text5 :
## [1] "CN" "CN" "CN"
##
## text6 :
## [1] "KR" "KR" "KR" "JP" "KR" "KR" "KR" "KR" "KR" "JP" "JP" "KR"
# 集計
mx_country <- dfm(toks_country)
county_top <- topfeatures(mx_country)
barplot(county_top)
連続的共起語を分析する際は、どのような種類の語の連続を抽出するのかを考慮し、句読点を削除する際も語の間の距離が維持されている必要がある。このために、上記の例では、tokens()
においてremove_punct = FALSE
とし、tokens_remove()
おいてはpadding = TRUE
としてある。
# 連続的共起語の抽出
seqs <- textstat_collocations(toks, method = 'lambda', min_count = 10)
head(seqs, 20)
## collocation count count_nested length lambda z
## 1 2 0 17664 0 2 3.912125 414.8268
## 2 0 0 12074 0 2 3.431085 321.9955
## 3 1 0 14115 0 2 3.159691 321.7225
## 4 万 円 4310 0 2 6.860684 299.2863
## 5 1 9 9438 0 2 3.633802 291.9676
## 6 写真 説明 5692 0 2 9.107553 285.1837
## 7 参院 選 5316 0 2 8.256177 284.7346
## 8 自 民 4034 0 2 9.096058 268.3871
## 9 委員 会 4185 0 2 7.568652 258.9181
## 10 選挙 区 2849 0 2 6.039747 247.8189
## 11 1 8 7347 0 2 3.319673 245.2910
## 12 米 軍 2702 0 2 7.137082 243.9430
## 13 億 円 2639 0 2 7.021595 235.3968
## 14 安全 保障 2435 0 2 8.846559 233.4832
## 15 安倍 政権 2158 0 2 6.816112 232.3488
## 16 0 年 5774 0 2 3.343906 225.7959
## 17 5 年 4781 0 2 3.648890 224.6263
## 18 関係 者 2696 0 2 5.509666 224.2081
## 19 1 5 7185 0 2 2.879554 218.7052
## 20 4 年 4404 0 2 3.612114 214.7963
# 共起語の結合
toks_comp <- tokens_compound(toks, seqs[seqs$z > 3,], concatenator = '') # p<0.001 の有意水準で共起語を選択
head(kwic(toks, "トランプ*", window = 10)) # 結合前
##
## [text12, 357] 入国 禁止 放言 続ける | トランプ |
## [text13, 420] 大統領 選 共和 党 トップ 走る | トランプ |
## [text13, 490] 過激派 右翼 | トランプ |
## [text68, 342] 政治 経験 乏しい 実業 家 ドナルド | トランプ |
## [text68, 438] 支持 下がる 逆に 上がる | トランプ |
## [text68, 481] 影響 大 | トランプ |
##
## 氏 人気 衰え 分断 分断
## 氏 メキシコ 移民 イスラム教 徒 敵
## 氏 敵 戦
## 氏 支持 率 首位 走る
## 氏 当選 可能性 高い
## 氏 に関する 話題 大統領 選 乗 取
head(kwic(toks_comp, "トランプ*", window = 10)) # 結合後
##
## [text12, 331] イスラム教徒 入国禁止 放言 続ける | トランプ氏 |
## [text13, 384] 注目 米大統領選 共和党 トップ 走る | トランプ氏 |
## [text13, 451] 過激派 右翼 | トランプ氏 |
## [text68, 297] 縫 政治経験 乏しい 実業家 ドナルド | トランプ氏 |
## [text68, 388] 支持 下がる 逆に 上がる | トランプ氏 |
## [text68, 429] 影響 大 | トランプ氏 |
##
## 人気 衰え 分断 分断
## メキシコ 移民 イスラム教徒 敵
## 敵 戦
## 支持率 首位 走る 手法
## 当選 可能性 高い
## に関する 話題 大統領選 乗 取