青空文庫
青空文庫注記の解析表現文法
青空文庫では、テキスト中のルビや強調等について、特定の注記記法が定められています。この注記記法は、長年にわたり継続的に改良されてきました。
青空文庫が現在、検討・策定している新しい注記一覧は、これまでの注記の記法を整理、洗練させたものであり、2010年4月以降に適用される予定です。
このページでは、青空文庫の新しい注記一覧の記法を、解析表現文法 (Parsing Expression Grammar) で表記することを試みます。解析表現文法は、解析木が一意であり、また字句解析が不要のため分かりやすい等の特徴があります。
青空文庫の注記を分析文法で表現することで、テキスト入力時に注記規則を機械的にチェックでき、注記の間違いを減らすことができます。また青空文庫ビューア等の作成者にとっても、実装の参考になる可能性があります。
今後は、試作した文法を既存の青空文庫作品に対して適用・検証する予定です。文法エラーが起こる箇所については、テキストの間違いによると見られる場合は青空文庫の担当者に確認をお願いし、文法の誤りである場合は継続的に修正していく予定です。
なお、この文法を満たしていても青空文庫の記法に従っているとは限りません。たとえばJIS X 0208以外の漢字は使われていないか、または強調注記の引用が直前のテキストに一致するか、等は別途チェックする必要があります。
既存の青空文庫は新注記とは異なる注記で記述されているので、必ずしも下記の文法を満たすとは限りません。
段落 ← ( ( 段落指定 / 行 ) ? "\n" ) + 行 ← ( 一般文字列 / 入力者注記 / 一般注記 ) + 段落指定 ← 改まり注記 / 字下げ注記 / 字詰め注記 / 左右中央 / 横組み段落 / 罫囲み段落 / 文字大段落 / 文字小段落 改まり注記 ← "[#改丁]" / "[#改ページ]" / "[#改段]" 字下げ注記 ← 改行天付き / 天字下げ / 文字下げ / 字下げ終 改行天付き ← "[#ここから改行天付き、折り返して" 数 "字下げ]" 天字下げ ← "[#天から" 数 "字下げ]" 行 文字下げ ← "[#ここから" 数 "字下げ" ( "、折り返して" 数 "字下げ" ) ? "]" 字下げ終 ← "[#ここで字下げ終わり]" 字詰め注記 ← ( 字詰め始め "\n" 段落 ) + 字詰め終り 字詰め始め ← "[#ここから" 数 "字詰め]" 字詰め終り ← "[#ここで字詰め終わり]" 左右中央 ← "[#ページの左右中央]" 罫囲み段落 ← 罫囲み始め "\n" 段落 罫囲み終り 罫囲み始め ← "[#ここから罫囲み]" 罫囲み終り ← "[#ここで罫囲み終り]" 横組み段落 ← 横組み始め / 横組み終り 横組み始め ← "[#ここから横組み]" 横組み終り ← "[#ここで横組み終わり]" 地付き段落 ← 地付き始め "\n" 段落 地付き終り 地付き始め ← "[#ここから地付き]" 地付き終り ← "[#ここで地付き終わり]" 文字大段落 ← 文字大始め "\n" 段落 文字大終り 文字大始め ← "[#ここから" 数 "段階大きな文字]" 文字大終り ← "[#ここで大きな文字終わり]" 文字小段落 ← 文字小始め "\n" 段落 文字小終り 文字小始め ← "[#ここから" 数 "段階小さな文字]" 文字小終り ← "[#ここで小さな文字終わり]" 一般注記 ← 地寄り / 地付き / 地上げ / 割注 / 横組み / 太字 / 斜体 / 文字大 / 文字小 / 図 / その他注記 地寄り ← "[#下げて、地より" 数 "字あきで]" 地付き ← "[#地付き]" 地上げ ← "[#地から" 数 "字上げ]" 割注 ← "[#割り注]" ( "[#改行]" / 一般文字列 ) + "[#割り注終わり]" 横組み ← "[#横組み]" ( "[#改行]" / 一般文字列 ) + "[#横組み終わり]" 太字 ← "[#太字]" 一般文字列 + "[#太字終わり]" 斜体 ← "[#斜体]" 一般文字列 + "[#斜体終わり]" 文字大 ← "[#" 数 "段階大きな文字]" 一般文字列 + "[#大きな文字終わり]" 文字小 ← "[#" 数 "段階小さな文字]" 一般文字列 + "[#小さな文字終わり]" 図 ← "[#" 図注記 "(" ファイル名 ".png" 図大きさ ? ")入る]" 図大きさ ← "、横" 数 "×縦" 数 その他注記 ← "[#" 一般注記文字列 "]" 入力者注記 ← "[#" 一般引用 "は" ( "ママ" / 底本 ) "]" 底本 ← "底本では" 一般引用 一般引用 ← ( "「" 一般引用文字列 "」" ) / ( "『" 一般引用文字列B "』" ) 一般文字列 ← ( 文字 / ルビ / 修飾注記 ) + 一般引用文字列 ← ( !( "」" ) 一般注記文字 ) + 一般引用文字列B ← ( !( "』" ) 一般注記文字 ) + 一般注記文字列 ← 一般注記文字 + 一般注記文字 ← 単注記文字 / ルビ / 修飾注記 ルビ ← 汎用ルビ / 指定ルビ 汎用ルビ ← "《" 修飾付文字列 "》" !( "《" ) ルビ修飾注記 ? ルビ入力者注記 ? 指定ルビ ← "|" 修飾付文字列 "《" 修飾付文字列 "》" !( "《" ) ルビ修飾注記 + ? ルビ入力者注記 ? ルビ修飾注記 ← "[#ルビの「" 修飾付引用文字列 "」" 修飾指定 "]" ルビ入力者注記 ← "[#ルビの「" 修飾付引用文字列 "」は" ( ( "底本では「" 修飾付引用文字列 "」" ) / "ママ" ) "]" 修飾付文字列 ← ( 修飾注記 / 文字 ) + 修飾付注記文字列 ← ( 修飾注記 / 注記文字 ) + 修飾付引用文字列 ← ( !( "」" ) ( 修飾注記 / 注記文字 ) ) + 修飾注記 ← "[#「" ルビ付引用文字列 "」" 修飾指定 "、" ? "]" 修飾指定 ← 強調 / 原文注記 / 太字 / 斜体 / 分数 / 下線 / 上付き / 下付き / 変体仮名 / 篆書体 / 行脇小書き / 横組 / 縦中横 / 合字 / ローマ数字 / 文字サイズ / 罫囲み 強調 ← "の左" ? "に" ( 傍線 / 傍点 ) 傍線 ← "二重" ? "傍線" 傍点 ← "傍点" / "白ゴマ傍点" / "丸傍点" / "白丸傍点" / "×傍点" / "黒三角傍点" / "白三角傍点" / "二重丸傍点" / "蛇の目傍点" / "白四角傍点" 原文注記 ← "の左" ? "に「" ルビ付引用文字列 "」の注記" 太字 ← "は太字" 斜体 ← "は斜体" 分数 ← "は分数" 下線 ← "に下線" 上付き ← "は上付き小文字" 下付き ← "は下付き小文字" 変体仮名 ← "は底本では変体仮名で「" 漢字 + "」の草書" 篆書体 ← "は篆書体" 小書き ← "は小書き" 行脇小書き ← "は行" ( "右" / "左" ) "小書き" 横組 ← "は横組み" 縦中横 ← "は縦中横" 合字 ← "は合字" ローマ数字 ← "はローマ数字" 数 ? ( "、" 数 "-" 数 "-" 数 ) ? 文字サイズ ← "は" 数 "段階" ( "大きな" / "小さな" ) "文字" 罫囲み ← "は" "二重" ? "罫囲み" ルビ付引用文字列 ← ( !( "」" ) ( ルビ / 文字 ) ) + 注記文字 ← 漢字外字 / 非漢字外字 / 単注記文字 / 返り点 / 訓点送り / 合成欧文列 文字 ← 漢字外字 / 非漢字外字 / 単文字 / 返り点 / 訓点送り / 合成欧文列 訓点送り ← "[#(" ( 漢字 / かな ) + ")]" 返り点 ← "[#" ( ( 返り順序点 返りレ点 ? ) / 返りレ点 ) "]" 返り順序点 ← ["一二三四上中下天地人甲乙丙丁" ] 返りレ点 ← "レ" 漢字外字 ← "※[#「" 漢字表現 + "]" 漢字表現 ← ( かな / 漢字 / 数 / 記号 / 半角記号 / 参照記号 / [a-z A-Z ] ) + 非漢字外字 ← "※[#" !( "「" ) 単引用文字列 "]" 合成欧文列 ← "〔" 欧文列 "〕" 欧文列 ← ( 欧文 / 非漢字外字 / 修飾注記 ) + ファイル名 ← ( 図注記 !( ".png" ) !( ")" ) ) + 図注記 ← ( 単注記文字 !( "(" ) ) + 単引用文字列 ← ( !( "」" ) 単注記文字 ) + 単文字 ← 単注記文字 / 角括弧 単注記文字列 ← 単注記文字 + 単注記文字 ← 空白 / 参照記号 / 半角数字 / 全角数字 / 欧文文字 / 全角欧文文字 / かな / 記号 / 半角記号 / 罫線 / 漢字 / 亀甲括弧 / 参照記号 数 ← 半角数字 + / 全角数字 + / ["一二三四五六七八九十" ] 欧文 ← 欧文文字 / 半角記号 / 半角数字 / " " / "—" 空白 ← [" " ] 角括弧 ← 始め角括弧 / "]" 始め角括弧 ← "[" !( "#" ) 亀甲括弧 ← 始め亀甲括弧 / "〕" 始め亀甲括弧 ← "〔" !( 欧文 ) 参照記号 ← "※" !( "[#" ) 半角数字 ← [0-9 ] 全角数字 ← [0-9 ] 欧文文字 ← [a-z A-Z Α-Ρ Σ-Ω α-ρ σ-ω А-я "Ёё" ] 全角欧文文字 ← [a-z A-Z ] かな ← [ぁ-ん ァ-ヶ ゛-ゞ ・-ヾ ] 記号 ← ["、。" "「」『』〈〉【】‘’“”(){}" "〜〓〒々〆〇¢£§¨¬°±´¶×÷—‖†‡‥…‰′″℃Å〃" ←-↓ "⇒⇔∀∂∃∇∈∋−√∝∞∠" ∧-∬ "∴∵∽≒≠≡≦≧≪≫⊂⊃⊆⊇⊥⌒" "■□▲△▼▽◆◇○◎●◯★☆♀♂♪♭♯!" "!#$%&*+,./:;<=>?@\^_ ̄¥" ] 半角記号 ← [""#-^`~().?,'!;&|/_:+=" ] 罫線 ← [─-┃ "┌┏┐┓└┗┘┛├┝┠┣┤┥┨┫┬┯┰┳┴┷┸┻┼┿╂╋" ] 漢字 ← [一-龠 "仝〆○" ]
青空文庫注記の外字の一覧
「外字注記辞書データ」は、青空文庫に現れる外字のうち、注記辞書に記載されているものの一覧です。
青空文庫・全作品(2010年1月)の配布 Torrent
「青空文庫(2010年01月全作品・xz圧縮・Unicode).tar.torrent」は、2010年1月までのすべての青空文庫テキストを、UTF-8 に変換し(※)、著者毎に ".tar.xz" 圧縮フォーマットで圧縮して、全体を ".tar" で固めたファイルの配布torrentです。配布ファイルのサイズは約96Mbyteです。(※…単なる文字コード変換のみであり、JIS外字等の置換は一切行っていません)
本ファイルは、以下の特徴があります。
- 小サイズ
- “.tar.xz” フォーマットで採用されたLZMA圧縮により、青空文庫の全ファイルを100Mbyte以下のサイズに圧縮しています。著者毎に ".tar.xz" で圧縮したものを".tar" で固めており、".tar" を解いた後の各ファイルは一著者に対応します。各著者毎に圧縮された ".tar.xz"のサイズは小さく、ファイラーなどで圧縮したままファイルを閲覧する際も動作は軽くなります。
- 日本語ファイル名
- 各作品を作者名毎のディレクトリに分類し、ファイル名を日本語化しています。そのためファイルブラウザ等による作品の閲覧・検索が比較的容易です。なおzipフォーマットはファイル名のUnicode化に未だにWindowsが対応していません。そのため、特にMacintoshやLinuxで日本語ファイル名を扱うならば、".tar.gz" などの Unix系の圧縮方式の方が便利です。
- UTF-8化
- ファイル内容・ファイル名の両方をUTF-8化しています。そのため"grep" 等のような、ファイル名とファイル内容の両方を混在して扱うテキストツールでの取扱いが楽です。
以下は、芥川竜之介の青空文庫全作品(合計5,294,080 byte)を圧縮した際のファイルサイズを比較したものです。
圧縮方式 | 圧縮後のサイズ |
---|---|
.ZIP形式 (シフトJIS) | 2,495,304 byte |
.tar.xz形式 (シフトJIS) | 1,491,708 byte |
.tar.xz形式 (UTF-8) | 1,600,200 byte |
ファイルを圧縮したままのテキスト検索や、異体字を考慮したテキスト検索等については、例えば「検索での異体字処理」に関するページを参考にしてください。