文アルLOD試作① TSVからTurtleを作ってみるテスト

ちょっと、RDF触ってないなあと思ってやってみました。 VS Codeでちょっと次のようなTSVを書き、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[bungo:]	rdfs:label	schema:isBasedOn[chname:]	rdfs:seeAlso[pxd:]	schema:perforedBy[pxd:]
芥川龍之介 芥川龍之介 芥川龍之介 芥川龍之介(文豪とアルケミスト) 諏訪部順一
太宰治 太宰治 太宰治 太宰治(文豪とアルケミスト) 中村悠一
中原中也 中原中也 中原中也 中原中也(文豪とアルケミスト) 柿原徹也
島崎藤村 島崎藤村 島崎藤村 島崎藤村(文豪とアルケミスト) 立花慎之介
織田作之助 織田作之助 織田作之助 織田作之助(文豪とアルケミスト) 小野坂昌也
徳田秋声 徳田秋声 徳田秋声 徳田秋声(文豪とアルケミスト) 渡辺拓海
坂口安吾 坂口安吾 坂口安吾 坂口安吾(文豪とアルケミスト) 杉田智和
萩原朔太郎 萩原朔太郎 萩原朔太郎 萩原朔太郎(文豪とアルケミスト) 野島健児
室生犀星 室生犀星 室生犀星 室生犀星(文豪とアルケミスト) 逢坂良太
志賀直哉 志賀直哉 志賀直哉 志賀直哉(文豪とアルケミスト) 前野智昭
武者小路実篤 武者小路実篤 武者小路実篤 武者小路実篤(文豪とアルケミスト) KENN
菊池寛 菊池寛 菊池寛 菊池寛(文豪とアルケミスト) 三木眞一郎
久米正雄 久米正雄 久米正雄 久米正雄(文豪とアルケミスト) 吉野裕行
佐藤春夫 佐藤春夫 佐藤春夫 佐藤春夫(文豪とアルケミスト) 泰勇気
谷崎潤一郎 谷崎潤一郎 谷崎潤一郎 谷崎潤一郎(文豪とアルケミスト) 岡本信彦
堀辰雄 堀辰雄 堀辰雄 堀辰雄(文豪とアルケミスト) 髙橋孝治
檀一雄 檀一雄 檀一雄 檀一雄(文豪とアルケミスト) 小野友樹

PowerShellでちょっとスクリプトを書いて

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$sourceTsv = "./bungo_list.tsv"
$prefixLines = Get-Content "./commonPrefix.ttl"

$destTtl ="./bungo_list.ttl"

[string[]]$lines = ""
$lines += $prefixLines

# Get TSV Header
$heads = (Get-Content $sourceTsv -TotalCount 1 -Encoding UTF8).split("`t")
$headsLength = $heads.Length

# import TSV
$list = Import-Csv $sourceTsv -Delimiter "`t" -Encoding UTF8
$list | ForEach-Object {
# Subject
$line = $_
$subject = $heads[0]
if ($subject -match ":") {
$prefix = ($heads[0] -replace "\[(\S+:)\]", "`$1")
$stem = $line.($heads[0])
$newLine = $prefix + $stem
$lines += $newLine
}
# Predicate and Object
(1..(($headsLength) - 1)) | ForEach-Object {
$head = $heads[$_]
if ($_ -eq (($headsLength) - 1)) {
$punc = " ."
} else {
$punc = " ;"
}
if ($head -match "\[\S+:\]") {
$predicate = $head -replace "^(\S+)\[\S+:\]", "`$1"
$objPrefix = $head -replace "^\S+\[(\S+:)\]", "`$1"
$objStem = $line.($heads[$_])
$newLine = " " + $predicate + " " + $objPrefix + $objStem + $punc
}
else {
$predicate = $head
$object = '"' + $line.($heads[$_]) + '"'
$newLine = " " + $predicate + " " + $object + $punc
}
$newLine = $newLine -replace "\(","\u0028"
$newLine = $newLine -replace "\)","\u0029"
$lines += $newLine
}
}
$lines | Out-File $destTtl -Encoding UTF8

次のようなRDF(Turtle)が得られました。(Prefixは省略)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
bungo:芥川龍之介
rdfs:label "芥川龍之介" ;
schema:isBasedOn chname:芥川龍之介 ;
rdfs:seeAlso pxd:芥川龍之介\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:諏訪部順一 .
bungo:太宰治
rdfs:label "太宰治" ;
schema:isBasedOn chname:太宰治 ;
rdfs:seeAlso pxd:太宰治\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:中村悠一 .
bungo:中原中也
rdfs:label "中原中也" ;
schema:isBasedOn chname:中原中也 ;
rdfs:seeAlso pxd:中原中也\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:柿原徹也 .
bungo:島崎藤村
rdfs:label "島崎藤村" ;
schema:isBasedOn chname:島崎藤村 ;
rdfs:seeAlso pxd:島崎藤村\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:立花慎之介 .
bungo:織田作之助
rdfs:label "織田作之助" ;
schema:isBasedOn chname:織田作之助 ;
rdfs:seeAlso pxd:織田作之助\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:小野坂昌也 .
bungo:徳田秋声
rdfs:label "徳田秋声" ;
schema:isBasedOn chname:徳田秋声 ;
rdfs:seeAlso pxd:徳田秋声\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:渡辺拓海 .
bungo:坂口安吾
rdfs:label "坂口安吾" ;
schema:isBasedOn chname:坂口安吾 ;
rdfs:seeAlso pxd:坂口安吾\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:杉田智和 .
bungo:萩原朔太郎
rdfs:label "萩原朔太郎" ;
schema:isBasedOn chname:萩原朔太郎 ;
rdfs:seeAlso pxd:萩原朔太郎\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:野島健児 .
bungo:室生犀星
rdfs:label "室生犀星" ;
schema:isBasedOn chname:室生犀星 ;
rdfs:seeAlso pxd:室生犀星\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:逢坂良太 .
bungo:志賀直哉
rdfs:label "志賀直哉" ;
schema:isBasedOn chname:志賀直哉 ;
rdfs:seeAlso pxd:志賀直哉\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:前野智昭 .
bungo:武者小路実篤
rdfs:label "武者小路実篤" ;
schema:isBasedOn chname:武者小路実篤 ;
rdfs:seeAlso pxd:武者小路実篤\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:KENN .
bungo:菊池寛
rdfs:label "菊池寛" ;
schema:isBasedOn chname:菊池寛 ;
rdfs:seeAlso pxd:菊池寛\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:三木眞一郎 .
bungo:久米正雄
rdfs:label "久米正雄" ;
schema:isBasedOn chname:久米正雄 ;
rdfs:seeAlso pxd:久米正雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:吉野裕行 .
bungo:佐藤春夫
rdfs:label "佐藤春夫" ;
schema:isBasedOn chname:佐藤春夫 ;
rdfs:seeAlso pxd:佐藤春夫\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:泰勇気 .
bungo:谷崎潤一郎
rdfs:label "谷崎潤一郎" ;
schema:isBasedOn chname:谷崎潤一郎 ;
rdfs:seeAlso pxd:谷崎潤一郎\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:岡本信彦 .
bungo:堀辰雄
rdfs:label "堀辰雄" ;
schema:isBasedOn chname:堀辰雄 ;
rdfs:seeAlso pxd:堀辰雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:髙橋孝治 .
bungo:檀一雄
rdfs:label "檀一雄" ;
schema:isBasedOn chname:檀一雄 ;
rdfs:seeAlso pxd:檀一雄\u0028文豪とアルケミスト\u0029 ;
schema:perforedBy pxd:小野友樹 .

となると、そこまでの負荷を感じずにRDFが作れるのかな、などと。