最近セキュリティ関係のコードばかり(Rで)書いていて、文字処理とかしていないのだが、そのセキュリティ関係のコードで文章内容の判定が必要になった。
東京工業大学の高村先生が公開されている語感情極性対応表をしばしば利用させてもらっているのだが、この辞書では同じ綴りでも読みが異なり、さらに感情値も違う場合がある。
dic <- read.table("http://www.lr.pi.titech.ac.jp/~takamura/pubs/pn_ja.dic",
sep = ":", stringsAsFactors = FALSE, fileEncoding = "CP932"
, encoding = "UTF-8"# Windowsでこの行は不要なので行頭に半角#を追記
)
dic %>% group_by(V1) %>% filter(n() > 1) %>% arrange(V1)
# A tibble: 4,504 x 4
# Groups: V1 [2,050]
V1 V2 V3 V4
<chr> <chr> <chr> <dbl>
1 アイス アイスボックス 名詞 -0.326
2 アイス アイス 名詞 -0.354
3 アイス アイスキャンデー 名詞 -0.368
4 アイス アイスクリーム 名詞 -0.497
5 アイス アイスホッケー 名詞 -0.575
6 あらあら あらあら 名詞 -0.134
7 あらあら あらあらかしこ 名詞 -0.305
8 あんぜん あんぜんマッチ 名詞 -0.178
9 あんぜん あんぜんピン 名詞 -0.438
10 イエロー イエロー 名詞 -0.167
# … with 4,494 more rows
同じ綴りの単語だから手抜きで平均値を使ってきたが、いい加減MeCabでも単語原型と読みの両方の情報を使って、感情値を照合しようと思った。
tmpf <- tempfile()
X <- "今日はアイスを食べた。"
write(X, file = tmpf)
library(RMeCab)
yomi <- RMeCabText(tmpf) %>% map_df( ~ tibble(V1 = .[1], V2 = .[9]))
# A tibble: 7 x 2
V1 V2
<chr> <chr>
1 今日 キョウ
2 は ハ
3 アイス アイス
4 を ヲ
5 食べ タベ
6 た タ
7 。 。
unlink(tmpf)
MeCabでは読みはカタカナに統一されているので、感情辞書の方で読みをカタカナに統一し、とりあえず語形で照合してみたのだが。
library(Nippon)
dic <- dic %>% mutate(V2 = hira2kata(V2))
yomi %>% left_join(dic, by = c("V1" = "V1"))
# A tibble: 12 x 5
V1 V2.x V2.y V3 V4
<chr> <chr> <chr> <chr> <dbl>
1 今日 キョウ コンニチ 名詞 0.264
2 今日 キョウ キょウビ 名詞 0.172
3 は ハ NA NA NA
4 アイス アイス アイスボックス 名詞 -0.326
5 アイス アイス アイス 名詞 -0.354
6 アイス アイス アイスキャンデー 名詞 -0.368
7 アイス アイス アイスクリーム 名詞 -0.497
8 アイス アイス アイスホッケー 名詞 -0.575
読みも違う場合があるのだな。ちょっと考え直そう。
あと Nippo パッケージでは、拗音はカタカナに変換できないのか?