ことばは単語を単独で使うのではないにも関わらず、 語と語の互いの関係やまとまりを記述する研究がほとんどありません。
まず、「変化」とは何かを考えることにしましょう。 変化とは、2点における違いを見ることです。 これは言語に限られたことではありません。 では、2点における違いはどうやって見ればよいかというと、 比較し、その2点間の距離を求めればよいのです。
データマイニング研究では、「表記の揺れ」と言いますが、 言語の通時的研究では、 そもそも標準的な表記という取り決めがありません。
これらをすべて同じとみなすか、 個別に扱うか、 あるまとまりにわけて扱うか、 などの処理が必要です。
これを単純に単語の正規化、あるいは、 単語の表記上の違いを正規化する処理ということにします。 実は「表記上の違い」は同じにすればよいというわけではないので、 さまざまな表記を採集し、まとまりで管理する仕組みが必要になります。
そこで、すべての表記はひとつずつのデータとして、 それらを語彙データベースとしてまとめ、 おおままな意味で語の分類を管理する番号(ID)をつけたものを シソーラスと呼ぶことにします。
一般的にはシソーラスは類義語やある語の言い換えを調べるために用いるため、 類義語辞典と呼ばれることもありますが、 類義語を調べるのが目的ではないため、 ここではシソーラスと呼ぶことにします。
現代語については、文字の正規化としては、 Unicode NFKC に基づいた正規化を行っている (Google: 大規模日本語 n-gram データ)が、 古代語については、何の手立てもない。
このプロジェクトでは、つぎの3点を研究目標としています。
-現在、シソーラスには八代集の和歌の用語と品詞、 語義を分類するためのコードの情報が収録されています。
現在、八代集(古今、後撰、拾遺、後拾遺、金葉、詞花、千載、新古今)の 仮名漢字交じりテキストに対応しています。 それぞれの出典はkh.bibにBiBTeX形式で収録しました。
No. | 名称 | 勅/院宣 | 成立 | 撰者 | 首 |
---|---|---|---|---|---|
1 | 古今 | 醍醐天皇 | ca.905 | 紀友則・紀貫之・凡河内躬恒・壬生忠岑 | 1100 |
2 | 後撰 | 村上天皇 | ca.951 | 清原元輔・紀時文・大中臣能宣・源順・坂上望城 | 1425 |
3 | 拾遺 | 花山院 | ca.1007 | 花山院 | 1351 |
4 | 後拾遺 | 白河天皇 | 1086 | 藤原通俊 | 1218 |
5 | 金葉 | 白河院 | ca.1125 | 源俊頼 | 665 |
6 | 詞花 | 崇徳院 | ca.1151 | 藤原顕輔 | 415 |
7 | 千載 | 後白河院 | 1188 | 藤原俊成 | 1288 |
8 | 新古今 | 後鳥羽院 | 1205 | 源通具・藤原有家・藤原定家・藤原家隆・藤原雅経・寂蓮 | 1978 |
今後、八代集のシソーラスを二十一代集対応に拡張するための研究を行います。
No. | 名称 | 勅/院宣 | 成立 | 撰者 | 首 |
---|---|---|---|---|---|
1 | 古今 | 醍醐天皇 | ca.905 | 紀友則・紀貫之・凡河内躬恒・壬生忠岑 | 1100 |
2 | 後撰 | 村上天皇 | ca.951 | 清原元輔・紀時文・大中臣能宣・源順・坂上望城 | 1425 |
3 | 拾遺 | 花山院 | ca.1007 | 花山院 | 1351 |
4 | 後拾遺 | 白河天皇 | 1086 | 藤原通俊 | 1218 |
5 | 金葉 | 白河院 | ca.1125 | 源俊頼 | 665 |
6 | 詞花 | 崇徳院 | ca.1151 | 藤原顕輔 | 415 |
7 | 千載 | 後白河院 | 1188 | 藤原俊成 | 1288 |
8 | 新古今 | 後鳥羽院 | 1205 | 源通具・藤原有家・藤原定家・藤原家隆・藤原雅経・寂蓮 | 1978 |
9 | 新勅撰 | 後堀河天皇 | 1235 | 藤原定家 | 1374 |
10 | 続後撰 | 後嵯峨院 | 1251 | 藤原為家 | 1377 |
11 | 続古今 | 後嵯峨院 | 1265 | 藤原家良・藤原基家・藤原為家・藤原行家・真観 | 1915 |
12 | 続拾遺 | 亀山院 | 1278 | 藤原為氏 | 1459 |
13 | 新後撰 | 後宇多院 | 1303 | 二条為世 | 1607 |
14 | 玉葉 | 伏見院 | 1312 | 京極為兼 | 2800 |
15 | 続千載 | 後宇多院 | 1320 | 二条為世 | 2143 |
16 | 続後拾遺 | 後醍醐天皇 | 1326 | 二条為藤・二条為定 | 1353 |
17 | 風雅 | 花園院 | ca.1349 | 光厳院 | 2211 |
18 | 新千載 | 後光厳天皇 | 1359 | 二条為定 | 2365 |
19 | 新拾遺 | 後光厳天皇 | 1364 | 二条為明・頓阿 | 1920 |
20 | 新後拾遺 | 後円融天皇 | 1384 | 二条為遠・二条為重 | 1554 |
21 | 新続古今 | 後花園天皇 | 1439 | 飛鳥井雅世 | 2144 |
このプロジェクトに関連する既発表論文はジャンル別にわけると、 次のようになります。
「KyTea:京都テキスト解析ツールキットをRuby, Pythonから使えるMykyteaを作ってみた」のページを見て、恩恵にあずかろうと思います。
1 wget http://www.phontron.com/kytea/download/kytea-0.4.2.tar.gz
2 tar -xzf kytea-X.X.X.tar.gz
3 cd kytea-X.X.X
4 ./configure
5 make
6 sudo make install
7 kytea --help
かつて作成した八代集の辞書で解析した結果を訓練データとします。 ここで考えなければならないことは2点です。
ひとつはすでに作成した解析結果が新しい辞書とシステムを使うことによって 違う結果が出てしまったところを確認できるようにすることです。
もうひとつは新しく追加するテキストが正しく解析されているかを観察することです。
すなわち、新しいテキストを正しく解析できるようにすることと、 従来のテキストを新しいテキストのための辞書エントリを追加したことによって、 かつて解析結果に影響を与えないようにモニタすることです。
1 git clone git://github.com/chezou/Mykytea-python.git
README.mdを読むと、
lv README.md
KyTea wrapper for python
...
インストールの仕方は、
To build Mykytea-python, run
--------------------
% make
% sudo make install
% swig -c++ -python -I/usr/local/include mykytea.i
% ARCHFLAGS="-arch x86_64" CC=gcc CXX=g++ make
How to use?
--------------------
とあり、使い方は、
See 'mykytea_test.py' as a sample program.
とあるので、それにしたがって、変更を加えて、 徐々に自分のプログラムにします。
ここでは和歌シソーラスの基本について説明します。
01:000001:0001 A00 BG-01-1630-01-0100 02 年 年 とし 年 とし
01:000001:0001 A10 BG-01-1911-03-1800 02 年 年 とし 年 とし
01:000001:0002 A00 BG-08-0061-07-0100 61 の の の の の
01:000001:0003 A00 BG-01-1770-01-0300 02 内 内 うち 内 うち
01:000001:0004 A00 BG-08-0061-05-0100 61 に に に に に
01:000001:0005 A00 BG-01-1624-02-0100 02 春 春 はる 春 はる
01:000001:0006 A00 BG-08-0065-07-0100 65 は は は は は
01:000001:0007 A00 BG-02-1527-01-0102 47 き 来 く 来 き
01:000001:0008 A00 BG-03-1200-02-0900 74 に ぬ ぬ に に
01:000001:0008 A10 BG-09-0010-01-0101 74 に ぬ ぬ に に
01:000001:0008 A20 BG-09-0010-03-0200 74 に ぬ ぬ に に
01:000001:0009 A00 BG-09-0010-04-0300 74 けり けり けり けり けり
01:000001:0010 B00 BG-01-1950-14-0100 02 ひとゝせ 一年 ひととせ 一年 ひととせ
01:000001:0010 C00 BG-01-1950-01-0300 19 一 一 いち 一 いち
01:000001:0010 C01 BG-01-1630-01-0100 02 年 年 とし 年 とし
01:000001:0011 A00 BG-08-0061-10-0100 61 を を を を を
01:000001:0012 A00 BG-01-1642-02-0100 02 去年 去年 こぞ 去年 こぞ
01:000001:0013 A00 BG-08-0061-04-0100 61 と と と と と
01:000001:0014 A00 BG-08-0065-14-0100 65 や や や や や
01:000001:0015 A00 BG-02-3120-01-0100 47 いは 言ふ いふ 言は いは
01:000001:0016 A00 BG-03-3012-03-2600 74 む む む む む
01:000001:0016 A10 BG-09-0010-02-0102 74 む む む む む
01:000001:0017 B00 BG-01-1641-02-0100 02 今年 今年 ことし 今年 ことし
01:000001:0017 C00 BG-03-1000-01-0100 57 この この この この この
01:000001:0017 C01 BG-01-1630-01-0100 02 年 年 とし 年 とし
01:000001:0018 A00 BG-08-0061-04-0100 61 と と と と と
01:000001:0019 A00 BG-08-0065-14-0100 65 や や や や や
01:000001:0020 A00 BG-02-3120-01-0100 47 いは 言ふ いふ 言は いは
01:000001:0021 A00 BG-03-3012-03-2600 74 む む む む む
01:000001:0021 A10 BG-09-0010-02-0102 74 む む む む む
上記は古今和歌集一番歌のシソーラスです。
01:000001:0005 A00 BG-01-1624-02-0100 02 春 春 はる 春 はる
| | | | | | | | | | |
+--|------|----|---|------------------|--|--|--|----|--|---- 歌集の番号 1
+------|----|---|------------------|--|--|--|----|--|---- 歌の番号 2
+----|---|------------------|--|--|--|----|--|-----語の番号 3
+---|------------------|--|--|--|----|--|-----多義処理の番号 3
+------------------|--|--|--|----|--|-----分類番号 4
+--|--|--|----|--|-----品詞番号 5
+--|--|----|--|-----出現形 6
+--|----|--|-----基本形 7
+----|--|-----基本形よみ 8
+--|-----活用形 9
+-----活用形よみ 10
ここでは、Pythonを使って、1ステップずつ和歌シソーラスの利用方法について 説明します。
カレントディレクトリに all-v02-utf8.db を置き、ファイルを open()関数で開き、オブジェクト f に渡します。
>>> f = open("all-v02-utf8.db")
>>> f
<open file './all-v02-utf8.db', mode 'r' at 0x879d2a0>
次のような関数を定義する。インデントは4文字。
>>> def database(x):
>>> data = []
>>> with open("all-v02-utf8.db") as f:
>>> for line in f:
>>> s = line.rstrip()
>>> match = re.search(x,s)
>>> if match:
>>> data.append(s)
>>> f.close()
>>> return data
この関数には、ファイルオープンとxにしたがう行のみをdataに格納します。 ファイルをオープンしたら、f.close()もしましょう。 後で述べますが、ファイルを読み出すのではなく、書き出す時には、 f.close()の前にf.flush()も書き添えます。
それで、xはどんなものかというと、xはつぎの関数で定義します。
>>> gosen1 = re.compile("^02:000001:.....[ACE]0[0-9]")
re.compile()という関数は、正規表現(regular expression)のパターンを あらかじめコンピュータで処理するのに便利な形に編集するという仕事を します。 ’^’は行頭を表します。行頭の02:は後撰集を表します。 それぞれの歌集の歌番号は実際には4桁もあれば十分ですが、 余裕を持って、6桁で表示しています。 後撰集の1番歌を取り出すために000001:を指定しています。 [ACE]0[0-9]は分割単位として固有名詞も含めて、 小さく分ける単位を選んでいます。
xにgosen1を代入します。
>>> database(gosen1)
>>> database
<function database at 0x9557b8c>
これで、メモリのdataに後撰集の1番歌が格納されました。
dataに和歌の分析データが格納されています。 表示してみましょう。
>>> print u'\n'.join(s for s in data)
02:000001:0001 A00 BG-02-1540-10-0100 47 ふる 降る ふる 降る ふる
02:000001:0002 A00 BG-01-5153-07-0100 02 雪 雪 ゆき 雪 ゆき
02:000001:0003 A00 BG-08-0061-07-0100 61 の の の の の
02:000001:0004 A00 BG-01-4230-07-1302 02 みのしろ衣 蓑代衣 みのしろころも 蓑代衣 みのしろころも
02:000001:0005 A00 BG-02-1563-01-0101 47 うち 打つ うつ 打ち うち
02:000001:0006 A00 BG-02-3330-03-0100 47 き 着る きる 着 き
02:000001:0007 A00 BG-08-0064-15-0100 64 つつ つつ つつ つつ つつ
02:000001:0008 A00 BG-01-1624-02-0100 02 春 春 はる 春 はる
02:000001:0009 A00 BG-02-1527-01-0102 47 き 来 く 来 き
02:000001:0010 A00 BG-03-1200-02-0900 74 に ぬ ぬ に に
02:000001:0011 A00 BG-09-0010-04-0300 74 けり けり けり けり けり
02:000001:0012 A00 BG-08-0061-04-0100 61 と と と と と
02:000001:0013 A00 BG-02-3010-02-0100 47 おどろか 驚く おどろく 驚か おどろか
02:000001:0014 A00 BG-09-0040-02-0100 74 れ る る れ れ
02:000001:0015 A00 BG-03-1200-02-0900 74 ぬる ぬ ぬ ぬる ぬる
それぞれの行は大きく空白で各情報が区切られています。 それぞれを取り出しやすくするために、命名しておきましょう。
>>> hyoki = {'id':0,'tag':1,'code':2,'pos':3,'gen':4,'kihon':5,'yomi':6,'kanji':7,'kana':8}
一行のデータは、空白で9つの情報に分けられています。 それぞれを番号ではなく、名前で抽出できるようにします。 たとえば、ある語が和歌の中で出てきたとおりのものは、 行頭から5番目にあります。 データは0からはじまりますから、 5番目は4になります。 ‘gen’:4と書いて、genで表示できるようにしておきます。
つぎのように入力すると番号で答えてくれますので、 何番目のデータだったかを覚えておく必要はありません。
>>> hyoki['gen']
4
これで、原表記を取り出すことができます。
>>> print u''.join(s.split()[hyoki['gen']] for s in data)
ふる雪のみのしろ衣うちきつつ春きにけりとおどろかれぬる
もう一つ、、かな表記で取り出してみましょう。
>>> print u''.join(s.split()[hyoki['kana']] for s in data)
ふるゆきのみのしろころもうちきつつはるきにけりとおどろかれぬる
さらに、標準的な漢字表記で取り出してみましょう。
>>> print u''.join(s.split()[hyoki['kanji']] for s in data)
降る雪の蓑代衣打ち着つつ春来にけりと驚かれぬる
pos (品詞番号)を出力してみよう。同じ品詞が続くのはどんな場合でしょう。 番号が連続すると分かりにくいので、間にスペースを入れて出力してみます。
>>> print u' '.join(s.split()[hyoki['pos']] for s in data)
47 02 61 02 47 47 64 02 47 74 74 61 47 74 74
47(動詞)の連続が1箇所(打ち、着)と74(助動詞)の連続が2箇所(に、けり)(れ、ぬる)見えます。
code (国立国語研究所準拠の意味分類コード)を出力してみると、 次のようになります。
>>> print u'\n'.join(s.split()[hyoki['code']] for s in data)
BG-02-1540-10-0100
BG-01-5153-07-0100
BG-08-0061-07-0100
BG-01-4230-07-1302
BG-02-1563-01-0101
BG-02-3330-03-0100
BG-08-0064-15-0100
BG-01-1624-02-0100
BG-02-1527-01-0102
BG-03-1200-02-0900
BG-09-0010-04-0300
BG-08-0061-04-0100
BG-02-3010-02-0100
BG-09-0040-02-0100
BG-03-1200-02-0900
以上が、大雑把ですが、和歌データの取り出し方です。 和歌の実例を見るときに必要になりますが、 ほとんどの場合、codeによって計算するので、 実際の和歌を逐一出力することはありません。[@yamagen2007ap]
日本語の表記は、かな、漢字、現代かなづかい、歴史的かなづかいなど、 いろいろあるだけでなく、古典語ともなると、標準的な表記というものがありません。
「立覧」(たつらん)
「契剣」(ちぎりけん)
「思ふ蝶」(おもふてふ)
などは、送り仮名がないばかりか、助動詞や複合辞にも漢字が当てられています。
立覧→立つらむ
と整理するか、そのままとするかは研究目的によって柔軟に使い分ける表記システムが必要です。
つぎのプログラムは和歌データを作る関数です。
>>> def waka_print(x,y='gen',dem_a=' ',dem_b=''):
>>> old = ''
>>> whole = dem_a
>>> for i in x:
>>> fields = i.decode('utf-8').rstrip().split()
>>> num = fields[hyoki['id']]
>>> new = num[0:9]
>>> if new != old:
>>> if old != '':
>>> print old + whole
>>> old = new
>>> whole = ''
>>> whole += dem_b + fields[hyoki[y]]
>>> print old + whole
では、実行してみましょう。 後撰集のみのdata、基本形 kihon で出力します。
>>> waka_print(data,'kihon')
...(略)
02:001423 鳴く声に添ふて涙は昇るずど雲の上より雨と降るらむ
02:001424 亡し人の共にし帰る年なりば暮る行く今日は嬉しまし
02:001425 恋ふ間に年の暮るぬば亡し人の別るやいとど遠し成るぬむ
今度は、ジェネレータで作ってみましょう。 歌のデータを得るだけならば、関数の中で直接 print してもよいのですが、 それをさらに利用するためには、 関数の返り値が得られるようにしておくと便利です。
>>> def waka_generate(x,y='gen',dem_a=' ',dem_b=''):
>>> old = ''
>>> whole = ''
>>> for i in x:
>>> fields = i.decode('utf-8').rstrip().split()
>>> num = fields[hyoki['id']]
>>> new = num[0:9]
>>> if new != old:
>>> if old != '':
>>> yield old + whole
>>> old = new
>>> whole = dem_a
>>> whole += dem_b + fields[hyoki[y]]
>>> yield old + whole
前の関数 waka_generate() のうち、printのところが yield になっています。
では、ジェネレータ関数の waka_generate() を使ってみましょう。
>>> i = waka_generate(data,'kanji')
>>> print(i)
02:000001 降る雪の蓑代衣打ち着つつ春来にけりと驚かれぬる
>>> print(i)
02:000002 春立つと聞きつるからに春日山消え敢へぬ雪の花と見ゆらむ
のように1行ずつ出力してくれます。 一挙に出力するためには、
>>> for i in waka_generate(data,'kanji'):
>>> print(i)
...(略)
02:001423 鳴く声に添ふて涙は昇るずど雲の上より雨と降るらむ
02:001424 亡し人の共にし帰る年なりば暮る行く今日は嬉しまし
02:001425 恋ふ間に年の暮るぬば亡し人の別るやいとど遠し成るぬむ
のようにします。
さてやっと原表記について説明できます。 まず先ほどのwaka_generate()関数の第2引数を’gen’(=原表記、出現形)にして、 出力してみましょう。ちなみに第2引数’gen’はデフォルトなので、 第1引数のdataだけでもよい。
>>> for i in waka_generate(data,'gen'):
>>> print(i)
...(略)
02:001423 鳴く声にそひて涙はのぼらねど雲の上より雨と降るらん
02:001424 亡き人のともにし帰年ならば暮れゆく今日はうれしからまし
02:001425 恋ふる間に年の暮れなば亡き人の別やいとゞ遠くなりなん
もう一つ、標準表記(=kanji、漢字)でも出力してみましょう。
>>> for i in waka_generate(data,'kanji'):
>>> print(i)
...(略)
02:001423 鳴く声に添ひて涙は昇らねど雲の上より雨と降るらむ
02:001424 亡き人の共にし帰る年ならば暮れ行く今日は嬉しからまし
02:001425 恋ふる間に年の暮れなば亡き人の別れやいとど遠く成りなむ
前の2種類の表記を3首ずつ見たところで、 原表記の問題点は見つかったでしょうか。
gen 02:001425 恋ふる間に年の暮れなば亡き人の別やいとゞ遠くなりなん
kanji 02:001425 恋ふる間に年の暮れなば亡き人の別れやいとど遠く成りなむ
比べてみると、結構難儀な問題を抱えていることが分かります。
正規表現で必要な和歌の範囲を指定する。
>>> gosen1 = re.compile("^02:000001:.....[ACE]0[0-9]")
ファイルをオープンし、必要な和歌あるいは歌集をメモリに読み込む。
>>> database(gosen1)
>>> database
<function database at 0x9557b8c>
表記の種類を定義する。
>>> hyoki = {'id':0,'tag':1,'code':2,'pos':3,'gen':4,'kihon':5,'yomi':6,'kanji':7,'kana':8}
ジェネレート関数による個別和歌の出力
>>> i =waka_generate(data,'kanji')
>>> print(next(i))
02:000001 降る雪の蓑代衣打ち着つつ春来にけりと驚かれぬる
ジェネレート関数による一斉和歌の出力
>>> for i in waka_generate(data,'kanji'):
>>> print(i)
...(略)
02:001423 鳴く声に添ひて涙は昇らねど雲の上より雨と降るらむ
02:001424 亡き人の共にし帰る年ならば暮れ行く今日は嬉しからまし
02:001425 恋ふる間に年の暮れなば亡き人の別れやいとど遠く成りなむ
ここまでで和歌のリストを出力することができましたが、 いくつかのコマンドを使ったり、関数を作ったりしながら、 最終的にリストを出力しました。 リストの出力が目的の時は、毎回ひとつひとつ入力するのは面倒です。 そこで、これらをまとめたものをさらに関数にしてみましょう。
def waka_list(x,y='gen',dem_a=' ',dem_b=''):
wl = re.compile(x)
data = database(wl)
for i in waka_generate(data,y,dem_a,dem_b):
print i
ひとつひとつのコマンドをうつと複雑なことをしているようですが、 前記のようにみると5行にまとめられてシンプルです。 また、インタラクティブモードでひとつひとつの関数は、 それぞれ正しく出力されることが、確認されていますから、 安心です。
>>> for i in waka_list("^01:......:.....[ACE]0[0-9]"):
>>> print i
...(略)
01:001109 山科のをとはの滝のをとにだに人のしるべくわがこひめやも
01:001110 わが背子が来べきよひ也さゝがにの蜘蛛の振る舞ふかねてしるしも
01:001111 道知らば摘みにもゆかむ住の江の岸に生ふとおっしゃる恋しわすれる草
’^01’は古今集のすべてを抽出します。
ここまででシソーラスから和歌のさまざまなデータを作る方法について述べました。 ここまでのところのデータをファイルに保存すると便利かもしれません。
まず、waka_list関数は画面に出力する関数だったので、 それをgenerate関数書き換えます。 さきほどのwaka_list関数の最後のprintをyieldに変更します。 これで、リストを変数に格納できます。 これをwaka_yield関数としておきます。
def waka_yield(x,y='gen',dem_a=' ',dem_b=''):
wl = re.compile(x)
data = database(wl)
for i in waka_generate(data,y,dem_a,dem_b):
yield i
つぎにファイルに書き出してみます。
>>> waka = open('waka-kokin.txt','w')
>>> s = waka_yield("^01:......:.....[ACE]0[0-9]")
>>> waka.write('\n'.join(i for i in s))
>>> waka.flush()
>>> waka.close()
では、waka-kokin.txtにデータが確かに書き込まれているか見てみましょう。
% less waka-kokin.txt
01:000001 年の内に春はきにけり一年を去年とやいはむこの年とやいはむ
01:000002 袖ひちてむすびし水のこほれるを春立けふの風やとくらむ
01:000003 春霞たてるやいづこみ吉野のよしのの山に雪はふりつゝ
...(略)
01:001109 山科のをとはの滝のをとにだに人のしるべくわがこひめやも
01:001110 わが背子が来べきよひ也さゝがにの蜘蛛の振る舞ふかねてしるしも
01:001111 道知らば摘みにもゆかむ住の江の岸に生ふとおっしゃる恋しわすれる草
全1,111首が書き込まれているのがわかります。 もし、途中で終わっていたら、 waka.flush()を忘れていないかどうか、 もう一度確かめて見てください。
二十一代集は古今集の部立を伝統的にほぼ踏襲しています。 そのおかげで、春なら春の歌を二十一代集に渡って、 比較し、春の語彙の変化を調べることができます。 単純計算ではありますが、約530年間の春のイメージの移り変わりを 見ることができるのは、とても便利なことです。 部立を踏襲してくれて、どうもありがとうと言いたくなるくらいです。
スマートフォンのカメラで書籍中のQRコードを読み取ると、 3Dの歌ことばネットワークが浮き出る仕組みとその基礎技術
本研究に関する著作物について、 配布はGPL2とし、関連データ、プログラムにより発生した損害、 賠償については一切、山元には責任はないものとします。
この文章は、markdown 記法を用い、pandocで生成しました。 生成は、html5とslidyの二種類のテンプレートで行いました。 html5は Bor Hodošček 氏によるtwitter bootstrap cssをで行いました。 slidyはpandocのデフォルトで行いました。
% pandoc -S -s -t html5 --template=./bootstrap-template.html5 index.md -o index.html
% pandoc -S -s -t slidy index.md -o index.html