(前回)
テーマ5:検索の柔軟性 ― 検索語の順序や熟語分割(承前)
テーマ5-3:(複数の)検索語がヒットしたあと、該当個所の前後の文章を表示する。
一般的に検索をするときは、検索語の箇所だけではなくその前後の箇所も見たいはずだ。それも、ある時は、少なく、また別の時はもう少し多くの行を見たいと思うだろう。私の検索システムは前回も述べたように原文を行単位(大体、漢字で30文字程度)に区切っているが、少なく表示するときは該当個所の前後3行ずつ表示する。もう少し多く表示したい時は、前後6行ずつ、もっと多い時には前後9行ずつ表示することができる。こうすることで字句が使われている前後関係が良く分かると同時に、もしヒットする個所が多い場合には検索語にどういった語句を追加すればよいかを知ることができる。
表示の時のひと工夫として、新字体表示も可能となっている。中国(大陸、台湾)で入力されているので原文は旧漢字であるが、表示の時に新漢字であることが便利なことも多い。結局、漢文を検索する時に、入力も出力も新漢字にすることで、手間が随分と省ける。
また、私の検索システムはWindows上で動くため、プログラム作成上、文字コードはShift-JISを採用している。そこで問題なのは、Shift-JISで表示できない漢字であるが、それらはUnicodeの番号で表記している。例えば資治通鑑の巻10(BC204年)、韓信率いる劉邦の軍が陳余の軍を「背水の陣」で破るという見せ場だが、直前に韓信の軍を井陘口で待ち伏せして叩き潰せと陳余の軍師の李左車が提案するが、韓信を侮っていた陳余はその提案を退ける場面は次のような表示になっている。
冬十月、韓信、張耳以兵數萬東撃趙。趙王及成安君
陳餘聞之、聚兵井#9658;口、號二十萬。廣武君李左車説成安君曰:
「韓信、張耳乘勝而去國遠#9B2C;、其鋒不可當。臣聞『千里餽糧、
士有飢色;樵蘇後爨、師不宿飽。』今井#9658;之道、車不得方軌、騎
不得成列;行數百里、其勢糧食必在其後。。。
ここでは、「井#9658;口」と「#9B2C;」がShift-JISにないので #xxxxx; のような形式で表示されている。これだと、どのような漢字か分からないが、検索を考えると全く問題はない。また、これを正しい漢字+新漢字で表示したいときには、バッチコマンド(内部的にはrtfconv.comを使っている) を使い瞬時に下記のように変換して表示できる。
冬十月、韓信、張耳以兵数万東撃趙。趙王及成安君
陳余聞之、聚兵井陘口、号二十万。広武君李左車説成安君曰:
「韓信、張耳乗勝而去国遠鬬、其鋒不可当。臣聞『千里餽糧、
士有飢色;樵蘇後爨、師不宿飽。』今井陘之道、車不得方軌、騎
不得成列;行数百里、其勢糧食必在其後。。。
ちなみに、私のシステムで Shift-JIS をベースにしているのは、漢文検索システムを開発している時には awk が Unicode を扱えなかったから、しかたなくShift-JISベースで検索システムを構築したからである。現在となっては、awk でもUnicodeが使えるようなので、将来的には蓄積データも検索システムも Unicode で統一することはあるかもしれないが、現時点ではそこまでする必要性を感じていない。
テーマ5-4:手持ちの本で該当個所のページを表示する。
漢文を行単位で検索するメリットの一つは、手持ちの本のページ数を算出できることだ。日本語の本を読んで漢文のあるフレーズに出会った時、その個所を意味を自分で確認したい時がある。
例えば、徒然草・第239段に近友の自慢話として堀川大納言(藤原師信)が論語の中で「紫の朱を奪うを悪む」という句の場所を探していた時に「九の巻にある」と教えてあげたことが載せられている。
この部分は確かに巻9に『子曰:「悪紫之奪朱也…」』という句がある。ところが私の手持ちの岩波文庫の論語には巻9は24ページにもわたる。巻番号が分かってもページ数までは分からない。こういう場合は、巻の始めのページからしらみつぶしに見ていくか、それとも本のインデックスを検索するか、のいづれかの方法しかないであろう。
どちらにしても、手間がかかる。それで私の漢文検索システムでは次のような方法でもう少しチェックする個所を絞ることができるようにした。
原文が行単位に区切られているのでまず巻番号のリストを作る。例えば、岩波文庫の論語では次のようになる
検索行 : 論語:岩波文庫の該当ページ
4BRON.JPN: 54 : 論語(岩波文庫)學而 第一 : 17
4BRON.JPN: 75 : 論語(岩波文庫)爲政 第二 : 26
(中略)
4BRON.JPN: 642 : 論語(岩波文庫)陽貨 第十七 : 236
4BRON.JPN: 688 : 論語(岩波文庫)微子 第十八 : 251
(後略)
検索行がヒットしたところの行数から巻数(あるいは編数)とその巻数の始まりと終わりの行数が分かる。本の一行当たりの文字数は必ずしも一定ではないが、大体の目安として一定文字数と見なして、ヒットした行がその巻の初めから何%の所にあると分かるのでそれをページ数に按分して検索がヒットした個所のページ数を算出する。
例えば今回の例では次のように、245ページの中あたり(該当編の中で前から63%のところ)にあることが分かる。
4bron.jpn: 671 :: 蕩;古之矜也廉、今之矜也忿戻;古之愚也直、今之愚也詐而已
矣。」子曰:「巧言令色、鮮矣仁。」子曰:「惡紫之奪朱也、惡鄭聲之
==> [論語(岩波文庫)陽貨 第十七] Page[245.4] : [63]% : [642]--[688]
ただ、この方法では日本語での解説が多く入っていたりするとページがかなり外れることがある。その時は、一番上で説明したインデックス表を更に細分化することで解決できる。大抵の本は1,2ページずれていても、探している文句は容易に見つかるものだ。
このように、いろいろな工夫をすることで従来では紙の本を手作業で、あるいは記憶に頼って探していた漢文の検索作業をコンピュータに委ねることができる。これもひとえに中国(大陸、台湾)が ― 多分、経済採算性を無視して ― 熱心に原典をインプットし Webにアップロードしてくれたおかげである。多謝!
(続く。。。)
テーマ5:検索の柔軟性 ― 検索語の順序や熟語分割(承前)
テーマ5-3:(複数の)検索語がヒットしたあと、該当個所の前後の文章を表示する。
一般的に検索をするときは、検索語の箇所だけではなくその前後の箇所も見たいはずだ。それも、ある時は、少なく、また別の時はもう少し多くの行を見たいと思うだろう。私の検索システムは前回も述べたように原文を行単位(大体、漢字で30文字程度)に区切っているが、少なく表示するときは該当個所の前後3行ずつ表示する。もう少し多く表示したい時は、前後6行ずつ、もっと多い時には前後9行ずつ表示することができる。こうすることで字句が使われている前後関係が良く分かると同時に、もしヒットする個所が多い場合には検索語にどういった語句を追加すればよいかを知ることができる。
表示の時のひと工夫として、新字体表示も可能となっている。中国(大陸、台湾)で入力されているので原文は旧漢字であるが、表示の時に新漢字であることが便利なことも多い。結局、漢文を検索する時に、入力も出力も新漢字にすることで、手間が随分と省ける。
また、私の検索システムはWindows上で動くため、プログラム作成上、文字コードはShift-JISを採用している。そこで問題なのは、Shift-JISで表示できない漢字であるが、それらはUnicodeの番号で表記している。例えば資治通鑑の巻10(BC204年)、韓信率いる劉邦の軍が陳余の軍を「背水の陣」で破るという見せ場だが、直前に韓信の軍を井陘口で待ち伏せして叩き潰せと陳余の軍師の李左車が提案するが、韓信を侮っていた陳余はその提案を退ける場面は次のような表示になっている。
冬十月、韓信、張耳以兵數萬東撃趙。趙王及成安君
陳餘聞之、聚兵井#9658;口、號二十萬。廣武君李左車説成安君曰:
「韓信、張耳乘勝而去國遠#9B2C;、其鋒不可當。臣聞『千里餽糧、
士有飢色;樵蘇後爨、師不宿飽。』今井#9658;之道、車不得方軌、騎
不得成列;行數百里、其勢糧食必在其後。。。
ここでは、「井#9658;口」と「#9B2C;」がShift-JISにないので #xxxxx; のような形式で表示されている。これだと、どのような漢字か分からないが、検索を考えると全く問題はない。また、これを正しい漢字+新漢字で表示したいときには、バッチコマンド(内部的にはrtfconv.comを使っている) を使い瞬時に下記のように変換して表示できる。
冬十月、韓信、張耳以兵数万東撃趙。趙王及成安君
陳余聞之、聚兵井陘口、号二十万。広武君李左車説成安君曰:
「韓信、張耳乗勝而去国遠鬬、其鋒不可当。臣聞『千里餽糧、
士有飢色;樵蘇後爨、師不宿飽。』今井陘之道、車不得方軌、騎
不得成列;行数百里、其勢糧食必在其後。。。
ちなみに、私のシステムで Shift-JIS をベースにしているのは、漢文検索システムを開発している時には awk が Unicode を扱えなかったから、しかたなくShift-JISベースで検索システムを構築したからである。現在となっては、awk でもUnicodeが使えるようなので、将来的には蓄積データも検索システムも Unicode で統一することはあるかもしれないが、現時点ではそこまでする必要性を感じていない。
テーマ5-4:手持ちの本で該当個所のページを表示する。
漢文を行単位で検索するメリットの一つは、手持ちの本のページ数を算出できることだ。日本語の本を読んで漢文のあるフレーズに出会った時、その個所を意味を自分で確認したい時がある。
例えば、徒然草・第239段に近友の自慢話として堀川大納言(藤原師信)が論語の中で「紫の朱を奪うを悪む」という句の場所を探していた時に「九の巻にある」と教えてあげたことが載せられている。
この部分は確かに巻9に『子曰:「悪紫之奪朱也…」』という句がある。ところが私の手持ちの岩波文庫の論語には巻9は24ページにもわたる。巻番号が分かってもページ数までは分からない。こういう場合は、巻の始めのページからしらみつぶしに見ていくか、それとも本のインデックスを検索するか、のいづれかの方法しかないであろう。
どちらにしても、手間がかかる。それで私の漢文検索システムでは次のような方法でもう少しチェックする個所を絞ることができるようにした。
原文が行単位に区切られているのでまず巻番号のリストを作る。例えば、岩波文庫の論語では次のようになる
検索行 : 論語:岩波文庫の該当ページ
4BRON.JPN: 54 : 論語(岩波文庫)學而 第一 : 17
4BRON.JPN: 75 : 論語(岩波文庫)爲政 第二 : 26
(中略)
4BRON.JPN: 642 : 論語(岩波文庫)陽貨 第十七 : 236
4BRON.JPN: 688 : 論語(岩波文庫)微子 第十八 : 251
(後略)
検索行がヒットしたところの行数から巻数(あるいは編数)とその巻数の始まりと終わりの行数が分かる。本の一行当たりの文字数は必ずしも一定ではないが、大体の目安として一定文字数と見なして、ヒットした行がその巻の初めから何%の所にあると分かるのでそれをページ数に按分して検索がヒットした個所のページ数を算出する。
例えば今回の例では次のように、245ページの中あたり(該当編の中で前から63%のところ)にあることが分かる。
4bron.jpn: 671 :: 蕩;古之矜也廉、今之矜也忿戻;古之愚也直、今之愚也詐而已
矣。」子曰:「巧言令色、鮮矣仁。」子曰:「惡紫之奪朱也、惡鄭聲之
==> [論語(岩波文庫)陽貨 第十七] Page[245.4] : [63]% : [642]--[688]
ただ、この方法では日本語での解説が多く入っていたりするとページがかなり外れることがある。その時は、一番上で説明したインデックス表を更に細分化することで解決できる。大抵の本は1,2ページずれていても、探している文句は容易に見つかるものだ。
このように、いろいろな工夫をすることで従来では紙の本を手作業で、あるいは記憶に頼って探していた漢文の検索作業をコンピュータに委ねることができる。これもひとえに中国(大陸、台湾)が ― 多分、経済採算性を無視して ― 熱心に原典をインプットし Webにアップロードしてくれたおかげである。多謝!
(続く。。。)