宋本廣韻の音韻データをHDICやDHSJRにつなぐ方法(4)

宋本廣韻の音韻データをHDICやDHSJRにつなぐ方法(4)

June 30, 2026
デジタル人文学, 日本古辞書
廣韻, 音韻学, 漢字データベース, Python, 宋本廣韻, HDIC, DHSJR, KRM, データ統合, 異体字

はじめに #

加藤大鶴・石山裕慈・佐々木勇編『日本語と漢字音・漢語音 データベースが切り開く新しい世界』(アジア遊学320、勉誠社、2026年7月)の目次を勉誠社のサイトから引用してみます。

  • 第1部 漢字音研究を知る

    • 漢字音研究の現在(石山裕慈)
    • 呉音・漢音の歴史と資料(佐々木勇)
    • 漢音奨励と訓読(湯沢質幸)
    • 中近世の同時代字音たる唐宋音について(岡島昭浩)
    • 漢字音と国語音の交渉(肥爪周二)
  • 第2部 人文情報学と漢字音研究

    • 「漢字音の一元化」について(大島英之)
    • 日本仏教研究者が漢字音研究から受けた恩恵(師茂樹)
    • DHSJRの設計と概略(加藤大鶴)
    • DHSJRにおける漢字字体の正規化の試み(大島英之)
    • 漢字音・漢語音データベースと『大般若経字抄』(中澤信幸)
    • 「資料横断的な漢字音・漢語音データベース」の語彙資源化の試み(高田智和)
    • 古辞書・音義・音釈類の漢字音注記の源流を探る―研究の軌跡とデジタル世界の夢(池田証寿)
  • 第3部 漢字音研究の最先端

    • 改編本『類聚名義抄』の音注増補と切韻(鈴木裕也)
    • 石山寺本守護国界主陀羅尼経長保頃点の漢字音(肥爪周二)
    • 明治大正期の外国語対訳辞書における漢字音・漢語音をめぐって(石山裕慈)
    • 妙一記念館本『仮名書き法華経』の声点加点―同時期の字音直読資料との比較から知られること(佐々木勇)
    • 呉音読されるスタイルでの漢音去声の上声化(坂水貴司)
    • 資料横断的な漢字音・漢語音データベース(DHSJR)における連声濁(浅田健太朗)
    • 漢語アクセントにおける低起上昇類内の揺れ(加藤大鶴)

漢字字体の処理について特に関連する論考を見ると、加藤大鶴「DHSJRの設計と概略」には次のように見えます。

さて、前節で例示した「大樂」は文献によっては「大学」とも記される。検索の際に目的とする漢字を網羅的に検索するには、異なる字体の存在は障害となってしまう。そこで各データ入力者が文献ごとに判断した字体は「単字_出現形」「漢語_出現形」列に収め、正規化(異なる字体を包摂する代表字体を設けた)字体を「単字_見出し」「漢語_見出し」列に収めた。字体の統合作業においては、「jisx0213-variants.txt」(https://github.com/cjkvi/cjkvi-variants/blob/master/jisx0213-variants.txt)に基づき、JIS第四水準までの範囲で旧字体を見出し列に掲げた。これを越えるユニコード内の統合については、本書大島論文を参照のこと。

うかつなことに類聚名義抄のデータ(30-048-2_RMK.tsv)の提供にあたっては、ここにいう正規化作業を行わずに提供してしまいました。 DHSJRの正規化のルールに従えば、単字_出現形の「万」「与」の単字_見出しはそれぞれ「萬」「與」となります。

確かに30-048-2_RMK.tsvでは次のように正規化の処理がなされています。

30-048-02       類聚名義抄_天理図書館_観智院本  21314   21026   萬      万      萬      万                     1武願反                          K0808521
30-048-02       類聚名義抄_天理図書館_観智院本  27543   27071   與      与      與      与                     1上      上                              音預〈上〉                      K1010242

私のおぼろげな記憶だとkrm_pronunciations.tsvではこのような処理を行っていませんでした。上記の2例について調べてみると、確かに「正規化」の処理がなされていました。

F25139_01       F25139_01       30-048-02       類聚名義抄_天理図書館_観智院本  21314   16951   万      万     万      万                                                                      武願反                         K0808521 音注声点無_反切
F31962_02       F31962_02       30-048-02       類聚名義抄_天理図書館_観智院本  27543   21964   与      与     与      与                                      上      上                              音預(上)             K1010242 音注声点有_類音注等

この点は、HDICとDHSJRとの大きな違いなので、留意しておくことが必要です。当面は、正規化済みの30-048-2_RMK.tsvで検討していくこととします。

次に、大島英之「DHSJRにおける漢字字体の正規化の試み」では、DHSJRの単字_見出しでの異体字の扱いを詳しく検討しており、参考になります。単字_見出しは廣韻データに寄せるための正規化処理を行い、DHSJRの単字_出現形では各資料に用いられる字体をそのまま残すということで対処しようとしています。

DHSJRの統合データでは、同一字種の異体字が混在しており、漢字字体の正規化が課題となっていた。本稿では、中古音情報との接続可能性を重視し、「JIS X 0213関係字」と「宋本広韻データ」という二つのデータを用いて、そもそも正規化対象とすべきか、正規化対象とする場合にはどの字体を見出しとすべきかといった判断を行い、八二四字種からなる異体字リストを作成した。このリストを用いた正規化を試行し、二六二字の字体揺れを解消した。

本稿の(3)まででは、類聚名義抄(30-048-02_RMK.tsv)を例にして、廣韻データに未収録字となった例をどうやって連携させるかを検討してきましたが、上記の大島論文で用いた「宋本広韻データ」は「漢字データベースプロジェクト」のsbgy.xmlであり、これをCSV形式に変換して利用したとのことです。ただし、大島論文では、類聚名義抄は対象外として、漢字字体の正規化を論じています。類聚名義抄にはあまりにも異体字が多く、その判断は妥当と思われます。

以下では、gy_dhsjr_link.pyを利用したアプローチを類聚名義抄(30-048-02_RMK.tsv)以外のDHSJR収録資料について適用してみます。

DHSJR収録74文献の調査 #

gy_dhsjr_link.pyを利用して、DHSJRに収録するすべての資料と廣韻データとの対応状況を調査するには二つの方法があります。

ひとつは、DHSJR収録74文献をすべてまとめたDHSJR_data_all.tsv--dhsjrオプションで指定する方法です。

python3 gy_dhsjr_link.py \
  --dhsjr DHSJR_data_all.tsv \
  --gy 廣韻.csv \
  --outdir ./linked_out

もうひとつは、DHSJR収録74文献をすべてまとめたDHSJR/dataフォルダを--dhsjr-dirオプションで指定する方法です。

python3 gy_dhsjr_link.py \
  --dhsjr-dir ./DHSJR/data \
  --gy 廣韻.csv \
  --outdir ./linked_out

DHSJR_data_all.tsv--dhsjrオプションで指定した結果は次のとおりです。

廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all2/DHSJR_data_all_gy_linked.tsv (387265 行)
  → linked_out_dhsjr_all2/dhsjr_gy_unmatched.tsv (22012 行)
  → linked_out_dhsjr_all2/dhsjr_gy_multi.tsv (98047 行)
完了。

dhsjr_gy_unmatched.tsvは22012行ありますが、その概要を調べるには、check_blocks.pysummarize_gy_unmatched_blocks.pyを用います。結果は次のとおりです。

対象ファイル: dhsjr_gy_unmatched.blocks.tsv

  • 総行数: 22,012 行
  • ブロック種類: 13 種

baseline の未収録字(ブロック別集計) #

ブロック件数割合ユニーク文字数例(最大5件)
CJK統合漢字16,91076.8%1,445 U+8196、 U+6BD8、 U+6483、 U+7CE9、 U+6E07
CJK統合漢字拡張B2,29810.4%1,859𪙁 U+2A641、𢮎 U+22B8E、𦡲 U+26872、𦚻 U+266BB、𦞲 U+267B2
IDC1,4236.5%1,278⿰⺼胃 U+2FF0、⿰⺼冊 U+2FF0、⿰土虒 U+2FF0、⿰赤皮 U+2FF0、⿰⺼蚩 U+2FF0
CJK統合漢字拡張A8714.0%477 U+43F6、 U+444C、 U+3648、 U+4527、 U+459F
CJK統合漢字拡張F2101.0%85𮞒 U+2E792、𮓪 U+2E4EA、𮌤 U+2E324、𮢶 U+2E8B6、𮓌 U+2E4CC
該当なし1230.6%16 U+25A1、 ⿳艹宀⿰衤殳 U+0020、 U+25A0、 U+3013、【⿰辛風】 U+3010
CJK互換漢字830.4%26 U+FA31、 U+FA69、 U+FA53、 U+FA1A、 U+FA43
CJK統合漢字拡張C510.2%44𪾼 U+2AFBC、𪺲 U+2AEB2、𪝀 U+2A740、𪜾 U+2A73E、𪮧 U+2ABA7
CJK統合漢字拡張E320.1%28𫣗 U+2B8D7、𫪦 U+2BAA6、𫾂 U+2BF82、𬂡 U+2C0A1、𬂶 U+2C0B6
CJK統合漢字拡張G50.0%5𱂕 U+31095、𰧫 U+309EB、𰢚 U+3089A、𰊊 U+3028A、𰢟 U+3089F
CJK統合漢字拡張H40.0%4𱱋 U+31C4B、𱖞 U+3159E、𱹫 U+31E6B、𱵒 U+31D52
CJK互換漢字補助10.0%1沿 U+2F8FC
CJK統合漢字拡張D10.0%1𫞳 U+2B7B3

CJK統合漢字にあげられた例を見ると、 U+6BD8は U+6BD7、 U+6483は U+64CA、 U+6E07は U+6E34であれば、廣韻.csvとつなげることができると予想されます。

念のため、--itaiji-jsonオプションにitaiji_gy_compare.jsonを指定して、gy_dhsjr_link.pyを実行してみます。

python3 gy_dhsjr_link.py \
  --dhsjr DHSJR_data_all.tsv \
  --gy 廣韻.csv \
  --itaiji-json itaiji_gy_compare.json \
  --outdir ./linked_out_dhsjr_all2
廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_gy_compare.json
  異体字マップ件数: 581
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all2/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all2/dhsjr_gy_unmatched.tsv (15622)
  → linked_out_dhsjr_all2/dhsjr_gy_multi.tsv (100869)
完了。

dhsjr_gy_unmatched.tsvは22012行から15622行に激減しました。check_blocks.pysummarize_gy_unmatched_blocks.pyを用いて概要をしらべた結果は次のとおりです。

対象ファイル: dhsjr_gy_unmatched.blocks.tsv

  • 総行数: 15,622 行
  • ブロック種類: 13 種

itaiji_gy_compare.json 適用後の未収録字 #

ブロック件数割合ユニーク文字数例(最大5件)
CJK統合漢字10,69968.5%1,321 U+8196、 U+6BD8、 U+6483、 U+7CE9、 U+6E07
CJK統合漢字拡張B2,17813.9%1,776𪙁 U+2A641、𢮎 U+22B8E、𦡲 U+26872、𦞲 U+267B2、𣫘 U+23AD8
IDC1,4239.1%1,278⿰⺼胃 U+2FF0、⿰⺼冊 U+2FF0、⿰土虒 U+2FF0、⿰赤皮 U+2FF0、⿰⺼蚩 U+2FF0
CJK統合漢字拡張A8135.2%455 U+43F6、 U+444C、 U+3648、 U+4527、 U+459F
CJK統合漢字拡張F2101.3%85𮞒 U+2E792、𮓪 U+2E4EA、𮌤 U+2E324、𮢶 U+2E8B6、𮓌 U+2E4CC
該当なし1230.8%16 U+25A1、 ⿳艹宀⿰衤殳 U+0020、 U+25A0、 U+3013、【⿰辛風】 U+3010
CJK互換漢字830.5%26 U+FA31、 U+FA69、 U+FA53、 U+FA1A、 U+FA43
CJK統合漢字拡張C500.3%43𪾼 U+2AFBC、𪺲 U+2AEB2、𪝀 U+2A740、𪜾 U+2A73E、𪮧 U+2ABA7
CJK統合漢字拡張E320.2%28𫣗 U+2B8D7、𫪦 U+2BAA6、𫾂 U+2BF82、𬂡 U+2C0A1、𬂶 U+2C0B6
CJK統合漢字拡張G50.0%5𱂕 U+31095、𰧫 U+309EB、𰢚 U+3089A、𰊊 U+3028A、𰢟 U+3089F
CJK統合漢字拡張H40.0%4𱱋 U+31C4B、𱖞 U+3159E、𱹫 U+31E6B、𱵒 U+31D52
CJK互換漢字補助10.0%1沿 U+2F8FC
CJK統合漢字拡張D10.0%1𫞳 U+2B7B3

CJK統合漢字にあげられた例を見ると、 U+6BD8、 U+6483、 U+6E07などが残っています。 これは、廣韻.csvsbgy.xmlのどちらも U+6BD7、 U+64CA、 U+6E34を用いているため、DHSJRとつなぐことができませんでした。

DHSJRの単字_見出しの正規化の方針によれば、のように変換されるはずですが、その処理がなされていないためと見られます。

次に若干例をあげておきます。

20-001-01       大般若波羅蜜多経_根津美術館     15      11      毘      毘      毘鉢舍那        毘鉢舍那       11                       〔墨〕ヒ        ヒハチシヤナ                                    3:0012b08      音写字
20-001-01       大般若波羅蜜多経_根津美術館     34      21      撃      撃      飄撃上涌        飄撃上涌       22       〔朱〕入        去入**        〔墨〕キヤク    ヘウキヤク*ユウ                                       3:0013c17
20-001-01       大般若波羅蜜多経_根津美術館     61      40      渇      渇      渇者得飮        渇者得飮       12                       〔墨〕カチ      カチ*** 
30-058-01       仮名書き法華経_妙一記念館       529     153     毗      毘      毗摩質多羅阿修羅王      毘摩質多羅阿修羅王                      1                               ひ      ひましちたらあしゆらわう               1-0010-4         T0262_.09.0002b01       1       0010-4
30-058-01       仮名書き法華経_妙一記念館       7901    3738    渴      渇      飢渴    飢渇                   2入      上入    かつ    けかつ                                  2-0247-4                T0262_.09.0014a16      20247-4
30-058-01       仮名書き法華経_妙一記念館       7949    3766    毗      毘      毗舎闍鬼        毘舍闍鬼       1ひ      ひしやしやくゐ                          濁      2-0249-4                T0262_.09.0014a25       2      0249-4
50-041-01       邦訳日葡辞書    1347    695     毘      毘      毘嵐風  毘嵐風  birampŭ         1       1      ビ      ビラムプゥ 
70-054-01       和仏小辞典_神戸大学     262     125     撃      撃      駁撃    駁撃    bakugeki               2geki    40

大島論文には、付録として「字体の正規化リスト(暫定案)」が添えられていますが、電子版の公開はまだのようですし、DHSJRを利用する上での注意として指摘するにとどめます。

jisx0213-variants.txt--itaji-jsonオプションで利用する #

DHSJRの正規化は、jisx0213-variants.txtを利用しているので、その内容をgy_dhsjr_link.py--itaji-jsonオプションで利用可能なJSON形式に変換して、どの程度、廣韻データとつなげるかを検討してみます。

jisx0213-variants.txtのフォーマットは次のようです。

jisx0213/variant,<rev>,jisx0213/variant
jisx0213/variant,<name>,関連字(JIS X 0213)
#
𥫣,jisx0213/variant,籅
#
𧯇,jisx0213/variant,豅
#

これを次のJSON形式に変換すればよいです。

[
  {
    "c1": "𪔝",
    "c2": "𪔜"
  },
  {
    "c1": "眾",
    "c2": "衆"
  }
]

ここでは、awk の oneliner で変換してみます。生成するファイル名はitaiji_jisx0213.jsonとしておきます。

awk -F, '
BEGIN{print "["}
/^#/||/^jisx0213\/variant,/{next}
{
    sub(/\r$/, "", $3)
    if(n++) print ","
    printf "  {\n    \"c1\": \"%s\",\n    \"c2\": \"%s\"\n  }",$1,$3
}
END{print "\n]"}
' jisx0213-variants.txt > itaiji_jisx0213.json

--itaiji-jsonオプションにitaiji_jisx0213.jsonを指定して、gy_dhsjr_link.pyを実行してみます。

python3 gy_dhsjr_link.py   --dhsjr DHSJR_data_all.tsv   --gy 廣韻.csv   --itaiji-json itaiji_jisx0213.json   --outdir ./linked_out_dhsjr_all_x0213
廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_jisx0213.json
  異体字マップ件数: 891
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all_x0213/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all_x0213/dhsjr_gy_unmatched.tsv (14350)
  → linked_out_dhsjr_all_x0213/dhsjr_gy_multi.tsv (100141)

itaiji_gy_compare.jsonを併用した結果は次のとおりです。

python3 gy_dhsjr_link.py   --dhsjr DHSJR_data_all.tsv   --gy 廣韻.csv   --itaiji-json itaiji_jisx0213.json,itaiji_gy_compare.json   --outdir ./linked_out_dhsjr_all_x0213_2
廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_jisx0213.json
  [itaiji] JSON読み込み: itaiji_gy_compare.json
  異体字マップ件数: 1403
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all_x0213_2/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all_x0213_2/dhsjr_gy_unmatched.tsv (10907)
  → linked_out_dhsjr_all_x0213_2/dhsjr_gy_multi.tsv (101762)
完了。

itaiji_jisx0213.jsonitaiji_gy_compare.jsonitaiji_krm_gy_attested.jsonの三つを併用すると、 dhsjr_gy_unmatched.tsvは更に 9117 行まで減らすことができます。 ただ、itaiji_krm_gy_attested.jsonは類聚名義抄に特化して独自に作成したデータなので、 itaiji_jisx0213.jsonitaiji_gy_compare.jsonの二つを--itaiji-jsonに指定して得たdhsjr_gy_unmatched.tsv(10907 行)を検討してみることにします。

対象ファイル: dhsjr_gy_unmatched.blocks.tsv

  • 総行数: 10,907 行
  • ブロック種類: 13 種

itaiji_jisx0213.json + itaiji_gy_compare.json 適用後の未収録字 #

ブロック件数割合ユニーク文字数例(最大5件)
CJK統合漢字6,08755.8%1,066 U+8196、 U+7CE9、 U+59C9、 U+60A6、 U+80F8
CJK統合漢字拡張B2,15419.7%1,771𪙁 U+2A641、𢮎 U+22B8E、𦡲 U+26872、𦞲 U+267B2、𣫘 U+23AD8
IDC1,42313.0%1,278⿰⺼胃 U+2FF0、⿰⺼冊 U+2FF0、⿰土虒 U+2FF0、⿰赤皮 U+2FF0、⿰⺼蚩 U+2FF0
CJK統合漢字拡張A8107.4%452 U+43F6、 U+444C、 U+3648、 U+4527、 U+459F
CJK統合漢字拡張F2101.9%85𮞒 U+2E792、𮓪 U+2E4EA、𮌤 U+2E324、𮢶 U+2E8B6、𮓌 U+2E4CC
該当なし1231.1%16 U+25A1、 ⿳艹宀⿰衤殳 U+0020、 U+25A0、 U+3013、【⿰辛風】 U+3010
CJK統合漢字拡張C500.5%43𪾼 U+2AFBC、𪺲 U+2AEB2、𪝀 U+2A740、𪜾 U+2A73E、𪮧 U+2ABA7
CJK統合漢字拡張E320.3%28𫣗 U+2B8D7、𫪦 U+2BAA6、𫾂 U+2BF82、𬂡 U+2C0A1、𬂶 U+2C0B6
CJK互換漢字70.1%4 U+F909、 U+FA17、 U+FA1D、 U+F9C8
CJK統合漢字拡張G50.0%5𱂕 U+31095、𰧫 U+309EB、𰢚 U+3089A、𰊊 U+3028A、𰢟 U+3089F
CJK統合漢字拡張H40.0%4𱱋 U+31C4B、𱖞 U+3159E、𱹫 U+31E6B、𱵒 U+31D52
CJK互換漢字補助10.0%1沿 U+2F8FC
CJK統合漢字拡張D10.0%1𫞳 U+2B7B3

CJK統合漢字にあげられた例を見ると、 U+6BD8、 U+6483、 U+6E07などは消えているので、itaiji_jisx0213.jsonで処理した分はDHSJRと廣韻データとをつなぐことができたと見られます。

U+59C9は U+59CAが廣韻データにあるのでしょうと予想されます。 U+60A6は U+6085、 U+80F8は U+80F7でしょう。 こうした例を対照した異体字ペアのJSONファイルをうまいこと作成する方法はないでしょうか。

cjkvi-simplified.txtcjkvi-variants.txt--itaji-jsonオプションで利用する #

https://github.com/cjkvi/cjkvi-variantsで公開された異体字の対照表を眺めてみると、 cjkvi-simplified.txtcjkvi-variants.txtとが使えそうです。

% grep "[姉姊悦悅胸胷]" *.txt
cjkvi-simplified.txt:姉,cjkvi/simplified,姊
cjkvi-simplified.txt:胷,cjkvi/simplified,胸
cjkvi-variants.txt:恱,cjkvi/variant,悅

awk の oneliner でitaiji_cjkv_simplified-variants.jsonを生成してみます。

awk -F, 'BEGIN{print "["}/^#/||/^cjkvi\//||/^$/{next}{sub(/\r$/,"",$1);sub(/\r$/,"",$3);if(n++)print ",";printf "  {\n    \"c1\": \"%s\",\n    \"c2\": \"%s\"\n  }",$1,$3}END{print "\n]"}' cjkvi-simplified.txt cjkvi-variants.txt > itaiji_cjkv_simplified-variants.json

itaiji_cjkv_simplified-variants.jsongy_dhsjr_link.py--itaiji-jsonオプションに追加して実行しました。

python3 gy_dhsjr_link.py  --dhsjr DHSJR_data_all.tsv   --gy 廣韻.csv   --itaiji-json itaiji_jisx0213.json,itaiji_gy_compare.json,itaiji_cjkv_simplified-variants.json   --outdir ./linked_out_dhsjr_all_cjkv

廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_jisx0213.json
  [itaiji] JSON読み込み: itaiji_gy_compare.json
  [itaiji] JSON読み込み: itaiji_cjkv_simplified-variants.json
  異体字マップ件数: 7682
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all_cjkv/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all_cjkv/dhsjr_gy_unmatched.tsv (8857)
  → linked_out_dhsjr_all_cjkv/dhsjr_gy_multi.tsv (102726)
完了。

jp-old-style.txtを追加 #

[姉姊悦悅胸胷]の例がなかったので見落としていましたが、jp-old-style.txtも使えそうです。

awk の oneliner でitaiji_jp-old.jsonを生成してみます。

awk 'BEGIN{FS="[[:space:]]+";print "["}/^#/||NF<2{next}{sub(/\r$/,"",$1);sub(/\r$/,"",$2);if(n++)print ",";printf "  {\n    \"c1\": \"%s\",\n    \"c2\": \"%s\"\n  }",$1,$2}END{print "\n]"}' jp-old-style.txt > itaiji_jp-old.json

このitaiji_jp-old.jsongy_dhsjr_link.py--itaiji-jsonオプションに追加して実行しました。

python3 gy_dhsjr_link.py  --dhsjr DHSJR_data_all.tsv   --gy 廣韻.csv   --itaiji-json itaiji_jisx0213.json,itaiji_gy_compare.json,itaiji_cjkv_simplified-variants.json,itaiji_jp-old.json   --outdir ./linked_out_dhsjr_all_cjkv-jp

廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_jisx0213.json
  [itaiji] JSON読み込み: itaiji_gy_compare.json
  [itaiji] JSON読み込み: itaiji_cjkv_simplified-variants.json
  [itaiji] JSON読み込み: itaiji_jp-old.json
  異体字マップ件数: 7686
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all_cjkv-jp/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all_cjkv-jp/dhsjr_gy_unmatched.tsv (8857)
  → linked_out_dhsjr_all_cjkv-jp/dhsjr_gy_multi.tsv (102726)
完了。

itaiji_krm_unverified_20260626.jsonを追加 #

itaiji_jp-old.jsonを追加して調査した結果を見ると、とでうまく行っていません。これは、JIS X 0213とCJKV系のどちらにも収録されていない組み合わせの可能性が高いです。

そこで、itaiji_krm_unverified_20260626.jsonを追加して処理してみることにしました。このファイルは、KRMの検証用に作成したもので、DHSJR全体に適用できるかどうかは未検証です。 dhsjr_gy_unmatched.tsvを通覧して、廣韻データに関連を求められそうなものをピックアップする作業が必要になるでしょう。

python3 gy_dhsjr_link.py   --dhsjr DHSJR_data_all.tsv   --gy 廣韻.csv   --itaiji-json itaiji_jisx0213.json,itaiji_gy_compare.json,itaiji_cjkv_simplified-variants.json,itaiji_jp-old.json,itaiji_krm_unverified_20260626.json   --outdir ./linked_out_dhsjr_all_cjkv-jp
廣韻インデックスを構築中…
  廣韻 ユニーク字数: 19585
異体字マップを構築中…
  [itaiji] JSON読み込み: itaiji_jisx0213.json
  [itaiji] JSON読み込み: itaiji_gy_compare.json
  [itaiji] JSON読み込み: itaiji_cjkv_simplified-variants.json
  [itaiji] JSON読み込み: itaiji_jp-old.json
  [itaiji] JSON読み込み: itaiji_krm_unverified_20260626.json
  異体字マップ件数: 7700
処理中: DHSJR_data_all.tsv
  → linked_out_dhsjr_all_cjkv-jp/DHSJR_data_all_gy_linked.tsv (387265)
  → linked_out_dhsjr_all_cjkv-jp/dhsjr_gy_unmatched.tsv (7523)
  → linked_out_dhsjr_all_cjkv-jp/dhsjr_gy_multi.tsv (103586)
完了。

調査結果(baseline 比) #

baseline(異体字マップなし)を基準とした行数変化です。unmatched の減少のうち multi への移行分と、単一マッチとして解消された分を分けて示します。

条件異体字マップ件数unmatched 行数unmatched Δ※multi 行数multi Δ※unmatched 減少のうち multi単一マッチ化
baseline(指定なし)022,01298,047
itaiji_gy_compare.json58115,622−6,390100,869+2,8222,8223,568
itaiji_jisx0213.json89114,350−7,662100,141+2,0942,0945,568
itaiji_jisx0213.json + itaiji_gy_compare.json1,40310,907−11,105101,762+3,7153,7157,390
上記 + itaiji_cjkv_simplified-variants.json7,6828,857−13,155102,726+4,6794,6798,476
上記 + itaiji_jp-old.json7,6868,857−13,155102,726+4,67900
上記 + itaiji_krm_unverified_20260626.json7,7007,523−14,489103,586+5,539860474

unmatched Δmulti Δbaseline 比です。最下2行の「unmatched 減少のうち multi へ」「単一マッチ化」は、直前の行からの増分itaiji_jp-old.json 追加時は 0、itaiji_krm_unverified_20260626.json 追加時は −1,334 / +860)です。

  • unmatched 減少のうち multibaseline 比の行)… |unmatched Δ| のうち、multi 行数増加に対応する部分です。
  • 単一マッチ化baseline 比の行)… unmatched から消えたが multi に入らなかった分(= |unmatched Δ| − multi Δ)です。

DHSJR_data_all_gy_linked.tsv は全条件で 387,265 行のまま変化しません。

baseline から見た累計(最終条件) #

最終行(itaiji_jisx0213.json + itaiji_gy_compare.json + itaiji_cjkv_simplified-variants.json + itaiji_jp-old.json + itaiji_krm_unverified_20260626.json)を baseline と比較すると次のとおりです。

指標baseline最終
unmatched22,0127,523−14,489(65.8% 減)
multi98,047103,586+5,539
単一マッチ化(累計)8,950

jp-old-style.txt 追加の所見 #

itaiji_jp-old.json を加えても異体字マップは 7,682 → 7,686(+4 ペア)にしか増えず、unmatchedmulti の行数はいずれも 8,857 / 102,726 のままでした。/// のような新字体↔旧字体の例は、DHSJR 全体の未収録行数にはほとんど効いていません。一方、/ のように依然 unmatched に残る例もあり、jp-old-style.txt だけでは不足していることが確認できました。

itaiji_krm_unverified_20260626.json 追加の所見 #

KRM 未収録字の手作業ペア((2) で作成した 45 ペアを含むリスト)を重ねると、マップは 7,686 → 7,700(+14 ペア)、unmatched8,857 → 7,523−1,334 行)まで減りました。うち 860 行multi 側へ移行し、474 行は単一マッチとして解消されたとみなせます。/ のような例も、このリストに含まれるペアで処理された可能性があります。

おわりに #

  • CJKV 簡体字・異体字表(3 ファイル併用)までで、baselineunmatched −13,155 行(22,012 → 8,857)まで削減できました。
  • jp-old-style.txt 由来の 4 ペア追加は、このデータセットでは行数に影響しませんでした
  • itaiji_krm_unverified_20260626.json の追加で、さらに −1,334 行(8,857 → 7,523)。連載 (1) の KRM 単資料ベースの知見が、DHSJR 全体にも転用できることを示しています。
  • いずれの段階でも linked 行数は不変であり、異体字正規化の効果は主に unmatched の減少と multi の増加として現れます。

今回の調査では、「異体字マップを足すほど確かに unmatched は減るが、multi は逆に増えていく」というトレードオフが定量的に示されました。

itaiji_jisx0213.json 単独で unmatched 14350→併用で10907→cjkv-jp 追加で8857と減る一方、multi は100141→101762→102726と増えています。これは異体字マップによって「別字だったものが同一視されて多音字扱いになった」ケースが含まれていると予想されます。特にitaiji_cjkv_simplified-variants.jsonのような簡体字対応表は、繁簡関係が一対一でないケースもあるので要注意です。 multi の結果は、別字であっても多音字扱いする際に問題になりうる字のリストと見ておくのが現状ではよいでしょう。

本稿冒頭で紹介した大島論文の付録「字体の正規化リスト(暫定版)」が電子版として公開されれば、今回の調査は不要となる可能性もあります。ただ、DHSJRのデータ量は厖大であり、廣韻データとつなげる簡便な方法としての意義があるでしょう。また、KRMのような、異体字があまりにも多い資料を扱うには、大島論文の「字体の正規化リスト(暫定版)」では不足する可能性もあります。

次回(5)予告 #

また、unmatched の例を通覧すると、単純な入力ミスと見られるもの、Unicode にあるのに IDS で入力したかと思われるものなど、気になる例が目につきました。multi 増加の解釈と併せて、こうした問題を次回(5)で検討することを予告して本稿をひとまず閉じることとします。