日付を表す文字列の解釈と暦の変換 -暦に関する統合基盤の構築に

日付を表す文字列の解釈と暦の変換
-暦に関する統合基盤の構築に向けて
関野 樹 (総合地球環境学研究所)
山田 太造 (東京大学史料編纂所)
www.hutime.jp
1
時間情報の解析環境
時間を専門に扱うソフトウェアの登場
時間に関する基盤情報を充実させる取り組み
GISとの連携による本格的な時空間解析
HuTime
www.hutime.jp
検索
2
1
時間情報のための知識・技術の集積 - 「時間情報学」
地域研究
年代学
歴史学
書誌学
…
統計学
位相幾何学
…
www.hutime.jp
3
基盤情報 - 時間情報解析のための3種類の知識
時間基盤情報
(1) 基本年表
ベース地図
(2) 時間名辞書
地名辞書
(3) 暦法変換
測地系変換
www.hutime.jp
4
2
暦に関する知識が必要な例
ドナティ彗星 (C/1858 L1)
Kometa Donati nad pařížským
ostrovem Ile de Cité s Justičním
palácem a Conciergerií 5. října 1858
(z desky v The World of Comets
1877, Amedée Guillemin)
http://www.komety.cz/article.php3?sid=259
日本での出現記録
ハーバードでの観測記録
The page from Bond's observing notebook at
the Great Refractor at Harvard.
勘申彗星出現之事
安倍晴雄著 『安政戊午仲秋聞書』
http://www.komety.cz/article.php3?sid=259
http://library.nao.ac.jp/kichou/open/009/index.html
www.hutime.jp
5
暦に関して必要な知識
月、日の表現を知っていること
漢数字が読めること
八月十六日
年号:安政 年:戊午
年号を伴っていること
「安政」が年号であること
月:8
日:16
和暦(天保暦)であること
安政戊午
「戊午」が
干支による年であること
書名『安政戊午仲秋聞書』より
年月日の表現の順序を知っていること
Sept が9番目の月であること
1858 Sept 28
www.hutime.jp
年:1858 月:9 日:28
1858-09-22
1858-09-28
米国がグレゴリオ暦を用いてること
6
3
暦に関して必要な知識
日付の表記に関する知識
•
•
•
•
年月日の表現順序や区切り文字
使用される文字
月などの名前や略称
特定の日を表す用語
暦そのものに関する知識
• どの地域、どの時代に
どの暦が使われたか?
• 暦の運用方法の違い
暦に関する知識を集約する
暦同士の関係に関する知識
• それぞれの暦を基準の暦に置き換える方法
(暦変換)
データの入出力に関する知識
• データ入出力の仕様
• 材料からのデータの抽出方法
暦に関する統合基盤
単なる暦変換を超えて・・・
日付の表現や暦そのもの関する知識も含めて再利用できるようにする
データの入出力を共通化する
www.hutime.jp
7
暦に関する統合基盤
www.hutime.jp
8
4
本研究での範囲
統合基盤の基本機能の構築と検証
日付文字列の解釈
ユリウス/グレゴリオ暦
和暦
漢字の読み取り、年月日の様々な表現
ユリウス通日
年月日によらない日付表現
暦の変換機能
ユリウス/グレゴリオ暦
和暦
基本的な解釈の仕組み
計算式による変換
不規則な例外を含む変換
(データベースによる変換)
ユリウス通日
基準軸となる暦
実用レベルのサービス提供
技術的要件
.NET Frameworkをベース
Webページでのサービス提供
検証
Excelのマクロとしての利用を見込む
www.hutime.jp
9
日付文字列の解釈-書式指定の方法
日付文字列の書式指定
書式指定子と任意の文字の組み合わせて指定
4ケタの
年の指定子
ISO8601形式の場合
2ケタの
月の指定子
2ケタの
日の指定子
yyyy-MM-dd
区切り文字
入力時 指定された書式に従っているものとして日付文字列を解釈
出力時 指定された書式に従って日付文字列を出力
yyyy-MM-dd
www.hutime.jp
2013-12-13
解釈可能
2013/12/13
解釈不可
10
5
日付文字列の解釈-書式指定子
書式指定子
基本的な指定子
(例)
yyyy 4桁の年
MM 2桁の月
dd 2桁の日
など
(.NET Framework の仕様に準拠)
暦ごとに拡張された指定子
ユリウス/グレゴリオ暦(西暦)
(例)
Y
紀元前の表記に対応した年: 紀元1年は1 ; 紀元前1年は1
”A.D.", "B.C." を伴って使うことを前提
(基本の y は、連続した数値としての年: 紀元1年は1; 紀元前1年は0)
和暦
数字、干支、月名などに対応
(例)
yK
MJ
dK
dE
一, 元, …, 一〇, 十, …, 二〇, 二十, 廿, …, 三〇, 三十, 卅
睦月, 如月, 弥生, …, 霜月, 師走
一, 朔, …, 一〇, 十, …, 二〇, 二十, 廿, …, 三〇, 三十, 卅, …, 晦
甲子, 乙丑, 丙寅, 丁卯, …, 壬戌, 庚亥
www.hutime.jp
11
日付文字列の解釈-書式指定子
書式指定子(続き)
ワイルドカード
日付文字列の解釈に柔軟性を持たせる
年月日のワイルドカード
(例-和暦の日の書式)
dK
日の漢数字によるあらゆる表現
da
日のすべての表現
一, 朔, …, 一〇, 十, …, 二〇, 二十, 廿, …, 三〇, 三十, 卅, …, 晦
d (1, 01, …, 30) + dE (甲子, …, 癸亥) + dK
任意の文字のワイルドカード
*
0文字以上の任意の文字
?
任意の1文字
ワイルドカードの適用例
gg*ya*Ma*da*
平成二五年一二月一三日
平成25年12月13日
平成廿五年十二月十三日
平成25/12/13
平成癸巳師走癸丑
www.hutime.jp
12
6
日付文字列の解釈-処理の流れ
入力データ
平成弐伍年壹弍月壱参
異体字等処理後
平成二五年一二月一三
東京大学史料編纂所
のデータより
可能性のある書式を複数指定
最初に解釈に成功したものを採用
解釈の結果
年号: 平成
年: 25
月: 12
日: 13
暦変換などの処理へ
(切り分けられた状態)
www.hutime.jp
13
暦変換
基準軸
暦A
ユリウス通日
• 紀元前4713年1月1日正午からの日数
ユリウス通日
• 不連続が無い
暦B
各暦はユリウス通日との
相互変換を実現できるようにする
2つの変換方法
計算式による変換 ユリウス/グレゴリオ暦(西暦)
• 恣意的な変更や変異が少ない
(ユリウス暦からグレゴリオ暦の改暦のみ)
• 仕組み(月の日数、置閏法)が比較的単純で一定
データベースによる変換
和暦
• 恣意的な変更が多い (月の大小)
• 変異がある(南朝・北朝)
• 仕組みが複雑で変化する
(天保暦、宣明暦、儀凰暦・・・)
www.hutime.jp
和暦で使われているデータベース
月テーブル
各月の朔日のユリウス通日と
年の年番号(皇紀に相当)を記録
年号テーブル
各年号が使われた期間を
ユリウス通日で記録
14
7
暦変換-実装
基本機能
暦変換にかかる全体の調整
API
外部からの利用を
共通化する
※今回は見送り
暦モジュール
・ 暦に応じた日付文字列の解析機能
・ ユリウス通日との相互変換機能を
実装
暦カタログ
暦そのものに関する情報
・ 使用地域や期間
・ 実装されているモジュール名
※今後、他の暦へも対応してゆく予定
※今回は見送り(対応する暦が増えたら構築)
www.hutime.jp
15
結果の出力
結果は日付文字列として出力
書式指定
• 文字列解析(入力時)を基本的に同じ
• 使用できない書式指定子(ワイルドカードなど)がある
• 出力だけで使える書式指定子(漢数字の表現など)がある
(例)
dK1
dK1b
dK2
dK3
一, …, 一〇、 一一, …, 二〇, 二一, …, 三〇, 三一
朔, …, 一〇, 一一, …, 二〇, 二一, …, 晦
一, …, 十, 十一, …, 二十, 二十一, …, 三〇, 三一
一, …, 十, 十一, …, 廿, 廿一, …, 卅, 卅一
出力例
ユリウス/
グレゴリオ暦
(西暦)
1703年1月30日
年号
和暦に対応した年
ggyK2年(yW/yE)MK2月dK2日
漢数字の年
和暦
年の干支
漢数字の月
出力書式
漢数字の日
元禄十五年(1702/壬午)十二月十四日
(赤穂浪士討ち入り)
www.hutime.jp
16
8
サービスの提供
暦変換フォーム
検索
HuTime
既定の書式
和暦
(入力)
gg*ya*Ma*da*
gg*ya*Ma*朔da*
(出力)
ggy年MMM月d日
ユリウス/グレゴリオ暦
(西暦)
(入力)
gg*Y-M-d
ya*Ma*da*
(出力)
gg YYYY-MM-dd
入力方法
改行で区切って複数のデータ
を入力可能
http://www.hutime.jp/basicdata/calendar/form.html
www.hutime.jp
17
検証(1)
どれだけの史料に対応できるか-和暦
東京大学史料編纂所のデータベースに含まれる
日付の表現がどの程度変換できるか?
平成25年12月13日
・・・
元年
壱年
々年
一年
1年
貮年
2年
弐年
貳年
2年
・・・
・・・
・・・
寶亀
宝亀
寳亀
寳龜
宝龜
寶龜
天應
天応
延暦
大同
孟冬
初冬
拾月
10月
十月
小春
応鐘
閏10月
後小春
閏拾月
廿壱日
貳拾壱日
二拾壱日
貮拾壱日
念壱日
念一日
廿一日
貮拾一日
弐拾弐日
弐十弐日
結果
年号
正解率 317/333
年
正解率 1165/1167
月
正解率 214/395
日
正解率 363/372
・・・
・・・
・・・
・・・
大半の史料に対応できると考えれる
• 年号、年、月、日をそれぞれ置き換えて変換する。
• 必要に応じて、ほかの要素も調整(閏月など)
• 和暦から和暦への変換を実施し、同じ日付を返すかを確認
www.hutime.jp
18
9
検証(2)
処理速度
同じデータ
平成二五年八月二八日
を複数件入力し変換。
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
平成二五年八月二八日
• サーバと同一LANで実施 (ネットワーク遅延の影響を抑える)
• 和暦から西暦への変換
• 書式は既定のまま
・・・
結果
3,000件までであれば1秒以内
に結果を出力
実用的な処理速度を実現
※ 実用上はネットワーク環境や書式指定、入力データの複雑さの影響を受けると考えられる
www.hutime.jp
19
統合基盤の応用と今後の課題
応用
• Webページや他のアプリケーション(HuTimeなど)への組み込み
(APIの実装)
• 史料からの日付文字列の抽出
構造化されたテキストでの応用
• セマンティックWeb - 異なる暦法による同じ日付の関係
課題
• 対応する暦を増やす
• 暦や日付の表現に関する知識の蓄積
• 時間名辞書との連携
www.hutime.jp
20
10