RでBKB
いい話がある。
http://gg-hogehoge.hatenablog.com/entry/2014/11/01/124501
私もバイク川崎バイクは大好きなのでRで作ってみた。
Windows7なので前準備としてkakasiをインストールしてPATHを通している。
RMeCabパッケージでMeCabを、Nipponパッケージでkakasiを叩いている。
結果
こんな感じ。
> getBKB("私は世のいはゆる健全なる美徳 清貧だの倹約の精神だの 困苦欠乏に耐へる美徳だの 謙譲の美徳などといふものはみんな嫌ひで 美徳ではなく 悪徳だと思つてゐる") file = C:\************** 私は世のいはゆる健全なる美徳 清貧だの倹約の精神だの 困苦欠乏に耐へる美徳だの 謙譲の美徳などといふものはみんな嫌ひで 美徳ではなく 悪徳だと思つてゐる 美徳 倹約 美徳 b! k! b! ひぃーあ!!! > getBKB("君は僕のことを馬鹿だという") file = C:\************** 君は僕のことを馬鹿だという 僕 こと 馬鹿 b! k! b! ひぃーあ!!!
コード
getBKB <- function(txt, items=c("名詞", "動詞","形容詞","副詞")){ require(RMeCab) require(Nippon) tmpdir <- tempdir() td <- tempfile("tmp", tmpdir = tmpdir) write(txt , file = td) res_mecab <- RMeCabText(td) # ファイル名出力を抑制したいがやり方がわからない # 分かち書きの結果(語、品詞、カナ)を取得 res_mecab <- do.call("rbind", lapply(res_mecab, function(x)x[c(1,2,10)])) trg_kakasi <- res_mecab[res_mecab[,2]%in%items, 1] # kakasiでアルファベットに変換して語の先頭一文字のみを取得 headchar <- paste(collapse="", lapply(strsplit(kakasi(trg_kakasi), split=""), function(x)x[1])) if(regexpr("b.*k.*b",headchar) == -1){ return("NoBKB...") } # bkbの探索 num <- regexpr("b.*k.*b",headchar)[1] num2 <- regexpr("k.*b",substring(headchar, first=num+1))[1] + num num3 <- regexpr("b",substring(headchar, first=num2+1))[1] + num2 # 結果出力 bkbword <- trg_kakasi[c(num, num2, num3)] cat(paste("\n",txt,"\n", paste(collapse=" ", bkbword), "\n", "b! k! b!","\n","ひぃーあ!!!" )) }