文法はよくわからないけれど
- 僕は勉強する
- ヒトが記述した文章には文法というものがあるようだけれど、よくわからない
- でも、エッセンスは抜き出せそうだ
- 僕の友達に文章を適当に分解して、「エッセンス」を取り出すための情報に砕いてくれるMeCab君がいる。ここがそのサイト
- MeCab君と相談して、文章を読み込んで、形態素分解して、MeCab君が「名詞」と判定したもののみを学ぶことにした
- 僕にとっての勉強とは、要素同士を結びつけることだから、「名詞」のどれを結びつけるのかが問題だ
- MeCab君によれば、"。"で表される、句点というものは文章を区切る印であって、それも取り出せるよ、とのことだった
- なので、ヒトが記述した文章を"。"で区切って、区切られた塊の中にある「名詞」同士には結びつきを作ることにした
- これなら、僕の「ヒト」である友人(すぐに「面倒くさいな」と言って入力ファイルづくりをやめてしまう人なのだ)に頭を下げる必要もないし、快適だ
- やってみよう
- MeCab君とそれをRで使う方法については、こちらを。ここを見れば、テキストファイルの文章を取り込んでMecab形態素分解をしたものをRのオブジェクトにすることができる
- 勉強したい文章の前に、「名詞」と「。」とを知っておきたいから、「名詞」と「。」がMeCab君はどのように教えてくれるのかを確認しておこう。"hanagasaku.txt"というファイルを作る→
花が咲く。
- これを読んで、「名詞」と「。」を取り出しておく
library(RMeCab) hanagasaku <- RMeCabText("hanagasaku.txt") hanagasaku.m <- matrix(unlist(hanagasaku),byrow=TRUE,ncol=10) hanagasaku.m meishi <- hanagasaku.m[1,2] kuten <-hanagasaku.m[4,1] meishi kuten
> hanagasaku.m [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] "花" "名詞" "一般" "*" "*" "*" "*" "花" "ハナ" "ハナ" [2,] "が" "助詞" "格助詞" "一般" "*" "*" "*" "が" "ガ" "ガ" [3,] "咲く" "動詞" "自立" "*" "*" "五段・カ行イ音便" "基本形" "咲く" "サク" "サク" [4,] "。" "記号" "句点" "*" "*" "*" "*" "。" "。" "。" > meishi <- hanagasaku.m[1,2] > kuten <-hanagasaku.m[4,1] > meishi [1] "名詞" > kuten [1] "。"
- 次に勉強したい教科書(文章、テキストファイル)を読もう。今日の勉強はWikiの環論のページの冒頭部としよう。知らないことがたくさんあってわくわくする。これを"kanron.txt"としておこう
数学において、環論(かんろん、英: ring theory)は(加法と乗法が定義され、整数の持つ性質とよく似た性質を満足する代数的構造である)環を研究する学問分野である。環論の研究対象となるのは、環の構造や環の表現(環上の加群)などについての一般論、および(群環、可除環、普遍展開環などの)具体的な特定の環のクラスあるいは理論と応用の両面で興味深い様々な環の性質(たとえばホモロジー的性質や多項式の等式)などである。 可換環は非可換の場合と比べてその性質はよく調べられている。可換環の自然な例を多く提供する代数幾何学や代数的数論は可換環論の発展の大きな原動力であった。この二つは可換環に密接に関係する分野であるから、一般の環論の一部というよりは、可換環論や可換体論の一部と考えるほうが普通である。 非可換環は可換の場合と比べて奇妙な振る舞いをすることが多くあるので、その理論は可換環論とは極めて毛色の異なったものとなる。非可換論は、それ自身の独自の方法論を用いた発展をする一方で、可換環論の方法論に平行する形で(仮想的な)「非可換空間」上の函数環として幾何学的な方法である種の非可換環のクラスを構築するという方法論が新興している。このような傾向は1980年代の非可換幾何学の発展と量子群の発見に始まる。こうした新たなパラダイムは、非可換環(特に非可換ネーター環)のよりよい理解を導くこととなった (Goodearl 1989)。
# 入力ファイル名を教えて input.file <- "kanron.txt" # RとMeCab君とで形態素解析をしよう。リストに納まる daisuugaku <- RMeCabText(input.file) # 行列にしよう daisuugaku.m <- matrix(unlist(daisuugaku),byrow=TRUE,ncol=10) # MeCab君が「名詞」と教えてくれたのは何行目か? daisuugaku.meishi.id <- which(daisuugaku.m[,2]==meishi) # MeCab君が「。」と教えてくれたのは何行目か? daisuugaku.kuten.id <- which(daisuugaku.m[,1]==kuten) # ちょっと細工をして daisuugaku.kuten.id <- c(0,daisuugaku.kuten.id) # 「。」までごとに「名詞」を取り出して、その完全グラフのエッジを作る edges <- matrix(NA,0,2) for(i in 1:(length(daisuugaku.kuten.id)-7)){ st <- daisuugaku.kuten.id[i] end <- daisuugaku.kuten.id[i+1] tmp <- which(daisuugaku.meishi.id>st & daisuugaku.meishi.id<end) tmp2 <- as.matrix(expand.grid(tmp,tmp)) tmp3 <- tmp2[which(tmp2[,1]!=tmp2[,2]),] edges <- rbind(edges,tmp3) } # エッジに「名詞」のテキストを入れよう edges.name <- matrix(daisuugaku.m[daisuugaku.meishi.id[edges],1],ncol=2) # グラフオブジェクトを扱うパッケージを使う library(igraph) # グラフにする daisuugaku.g <- graph.edgelist(edges.name) # ノードの名称でプロットしてみる plot(daisuugaku.g,vertex.label=V(daisuugaku.g)$name,vertex.size=3,edge.arrow.mode=0)