用語同士の関係

  • 位相空間」は「位相」が「空間」を修飾してできている
  • 位相空間」は「空間」に含まれる
  • 「含む」「含まれる」には向きがある
  • 「修飾」「被修飾」にも向きがある
  • それを反映する

被覆空間を論じるためのハウスドルフ空間,包含,複合用語,位相空間,ハウスドルフ空間
被覆空間を論じるためのハウスドルフ空間,修飾,複合用語,弧状連結,ハウスドルフ空間
被覆空間を論じるためのハウスドルフ空間,修飾,複合用語,局所弧状連結,ハウスドルフ空間
被覆,登録,用語,-,被覆
空間,登録,用語,-,空間
被覆空間,登録,複合用語,-,被覆空間
被覆空間,修飾,複合用語,被覆,被覆空間
被覆空間,包含,複合用語,空間,被覆空間
位相,登録,用語,-,位相
位相空間,登録,複合用語,-,位相空間
位相空間,修飾,複合用語,位相,位相空間
位相空間,包含,複合用語,空間,位相空間
ハウスドルフ,登録,固有名詞,-,ハウスドルフ
ハウスドルフ空間,修飾,複合用語,ハウスドルフ,ハウスドルフ空間
ハウスドルフ空間,包含,複合用語,空間,ハウスドルフ空間
ハウスドルフ空間は位相空間の一つ,包含,-,位相空間,ハウスドルフ空間
弧,登録,用語,-,弧
連結,登録,用語,-,連結
弧状連結,修飾,複合用語,弧,弧状連結
弧状連結,包含,複合用語,連結,弧状連結
局所,登録,用語,-,局所
局所弧状連結,修飾,複合用語,局所,局所弧状連結
局所弧状連結,包含,複合用語,弧状連結,局所弧状連結
infile <- read.table("input2.txt", sep = ",", fill =TRUE)
# 行列の方が好きなので行列にする
infile.m <- as.matrix(infile)
# 1,2,3列目を分離する
feature1 <- infile.m[,1]
feature2 <- infile.m[,2]
feature3 <- infile.m[,3]

# 1,2,3列のユニークを取って、それを連番ID化する
feature1.uni <- unique(feature1)
feature2.uni <- unique(feature2)
feature3.uni <- unique(feature3)
# 連番を取り出す
feature1.val <- apply(outer(feature1,feature1.uni,"=="),1,which,TRUE)
feature2.val <- apply(outer(feature2,feature2.uni,"=="),1,which,TRUE)
feature3.val <- apply(outer(feature3,feature3.uni,"=="),1,which,TRUE)

# エッジに関係するところだけを取り出す
infile.m <- infile.m[,4:length(infile.m[1,])]
# ノードをユニークにする
unique.word <- unique(c(infile.m))
unique.word <- unique.word[which(unique.word != "")]
# ノードの名前に順序idをつける
v.name <- unique.word
# エッジリストを名前と順序idとで作る
el.name <- el.id <- NULL
# エッジの性質をfeature情報から与える
el.type <- NULL
# 行ごとに要素数を数えて
for(i in 1:length(infile.m[,1])){
	num.kids <- length(which(infile.m[i,] != ""))-1
	for(j in 1:num.kids){
		el.name <- rbind(el.name,c(infile.m[i,1],infile.m[i,1+j]))
		el.type <- c(el.type,feature2.val[i])
	}
}
el.id <- matrix(0,length(el.name[,1]),length(el.name[1,]))
for(i in 1:length(v.name)){
	el.id[which(el.name == v.name[i])] <- i
}
library(igraph)
g <- graph.empty(length(v.name), directed =TRUE)
#g <- set.vertex.attribute(g, "name", value = unique.word)
g <- add.edges(g, c(t(el.id)))
plot(g, layout = layout.kamada.kawai(g))


# グラフを絵にするには、ノードの座標を決める必要がある
# layoutはその座標を決めるルールのこと
# 座標決めルールの一つkamada.kawai法を用いることとする
coords <- layout.kamada.kawai(g)

# グラフとして描く
plot(g,layout = coords)

# ノードの名前を文字列にするために別の方法をとる
# ノードに色を付けよう
v.col <- rep(1,length(coords[,1]))
plot(coords,cex = 2, pch = 19, col = v.col)

# エッジを描く
# エッジにも色を付けよう
#e.col <- rep(1,length(el.id[,1]))
# エッジの色はfeature由来の数字とする
e.col <- el.type
#segments(coords[el.id[,1],1],coords[el.id[,1],2],coords[el.id[,2],1],coords[el.id[,2],2], col = e.col)
arrows(coords[el.id[,1],1],coords[el.id[,1],2],coords[el.id[,2],1],coords[el.id[,2],2], col = e.col)

# 文字列を重ねる
par(new =TRUE)
# ノードから少しずらした位置に文字列を描かせる
coords2 <- cbind(coords[,1],coords[,2]-0.1)
text(coords2,unique.word,xlim = range(coords[,1]),ylim=range(coords[,2]))