[文献情報のデータベースとその利用に関する研究会報告資料 '94/3/8]

品詞情報つき『源氏物語大成』データベースを利用した
『源氏物語(日本古典文学大系)』の自動品詞つけ

上田裕一 安永尚志 

はじめに
 一つの品詞情報つきデータベースがあればそれを利用して、他系の源氏物語の自動単語分割や自動品詞つ けが容易に行える。数種類のデータベースがあれば様々の比較検討が可能になる。ここでは『大成』を利用 した『大系』の品詞情報つきデータベース作成の方法について述べる。

  1. 国文学資料館テキストの編集
     『大系』テキストから、記号類を取り除き、読点と句点で改行する。

    (原データベース)
    00012980¥T1/空蝉(うつせみ)
    00012990¥P109
    00013000¥T1うつせみ
    00013010L5△/寢(ね)られ/給(たま)はぬまゝに、
    00013020L6△/「我は、かく、人に/憎(にく)まれてもならはぬを、/今宵(こよひ)なむ、はじめて 「/憂(う)し」と、
    00013030L7△/世(よ)を/思(おも)ひ/知(し)りぬれば、はづかしくて、ながらふまじくこそ/思 (おも)ひなりぬれ」
    00013040L8などのたまへば、涙をさへこぼして/臥(ふ)したり。「いとらうたし」とおほす。/手(て)
    00013050L9さぐりの、/細(ほそ)く/小(ちひ)さき程、/髪(かみ)のいと/長(なが)からざりし けはひの、/似通(にかよ)ひたるも、/思(おも)
    00013060L10ひなしにやあはれなり。「あながちに、かゝづらひたどりよらむも、人/悪(わろ)かるべ
    00013070L11く、まめやかにめざまし」と/思(おぼ)し/明(あか)しつゝ、/例(れい)のやうにも、 の給ひまつはさず。
    00013080L12△夜ふかく/出(い)で/給(たま)へば、この/子(こ)は、「いと、いとほしく、さう ※※し」と/思(おも)ふ。
    00013090L13女も、「なみ÷÷ならず、かたはら/痛(いた)し」と思ふに、御/消息(せうそこ)も/ 絶(た)えてなし。「/思(おぼ)

    (修正データベース)
    寢られ給はぬまゝに、
    「我は、
    かく、
    人に憎まれてもならはぬを、
    今宵なむ、
    はしめて、
    「憂し」と、
    世を思ひ知りぬれは、
    はつかしくて、
    なからふましくこそ思ひなりぬれ」なとのたまへは、
    涙をさへこほして臥したり。
    「いとらうたし」とおほす。
    手さくりの、
    細く小さき程、
    髪のいと長からさりしけはひの、
    似通ひたるも、
    思ひなしにやあはれなり。
    「あなかちに、
    かゝつらひたとりよらむも、
    人悪かるへく、
    まめやかにめさまし」と思し明しつゝ、
    例のやうにも、
    の給ひまつはさす。

    (変換プログラム)
    #ファイル中の文字及び記号等の変換・削除を行なうプログラム
    #henkan fname と使用

    cp /dev/null temp1
    cp /dev/null temp2
    cp /dev/null temp3
    cp /dev/null temp4

    set m = "head -1 $1|colrm 2 100"

    if ($m == 0) then
        cat $1|tail +4 >>temp1   #1〜4行目までを削除。
        #(1)0-9,0-9,A-Z,△等を削除。(2)※->¥,+->¥に変換。(3)改行を削除。
        cat temp1|tr -d "0-9"|tr -d "0-9"|tr -d "A-Z"|tr -d "/△¥=・"|tr "※" "¥"|tr "÷" "¥" >> temp2
    else
        cat $1 >>temp1
        mv temp1 temp2
    endif

    #
    #cat temp1|tr -d "0-9" | tr -d "0-9" | tr -d "A-Z" | tr -d "/" | tr -d "△" | tr -d "¥" | tr -d "=" | tr "※" "¥" | tr "÷" "¥" | tr -d '\012' | tr "。" '\012' | sed 's/$/。/g' | tr -d "・" >> temp2
    #

    cat temp2|sed 's/(.)//g'|sed 's/(..)//g'|sed 's/(...)//g'|sed 's/(....)//g'|sed 's/(.....)//g'|sed 's/(......)//g'|sed 's/(.......)//g'|sed 's/(........)//g'|sed 's/(.........)//g'|tr -d "()">> temp3

    cat temp3|sed 'y/がぎぐげござじずぜぞだぢづでどばびぶべぼゞ/かきくけこさしすせそたちつてとはひふへほゝ/'>>temp4

    #点と丸で改行
    cat temp4|te -d '\012'|tr "。" '\012'|sed 's/$/。/g'|sed 's/、/、i/g'|tr "i" '\012'  #"。"を改行に変換。
    rm temp*

  2. 『大系』テキストの自動単語分割

    1)『大成』テキストに読点をいれる
     品詞情報つき『大成』データベースは、『大系』を参考に読点、句点を入れ単語分割を行ったが、品詞 つけを行った時点で『大成』の索引による単語認定に従って読点を削除したので、再び自動的に読点を挿 入する。句読点の位置の違いを、ERR.FILとして出してみると、以下のようになる。『大成』の自動単語分割 の時には、分割用に45000余語の辞書を使ったが、今回は『大系』のテキストと『大成』のテキストを 読点と句点で改行し、行毎に『大成』の単語で『大系』の同一単語を探して自動単語分割することにした。

    ERR tmp1  line 1245:いまひときさみ[連語]
      tmp2  line  42:、いま、ひとき
    ---------------------------------------
    ERR tmp1  line 1377:むねあく[動詞]
      tmp2  line  50:むね、あ
    ---------------------------------------
    ERR tmp1  line 2733:大液芙蓉未央柳[連語]
      tmp2  line 106:大液芙蓉、未央
    ---------------------------------------
    ERR tmp1  line 2773:はねをならへ枝をかはさむ[連語]
      tmp2  line 107:、はねをならへ、枝をかは
    ERR tmp1  line 684:をしつけ[動詞]
      tmp2  line  37:をし、つ
    ----------------------------------
    ERR tmp1  line 724:もてつけ[動詞]
      tmp2  line  39:もて、つ
    ----------------------------------
             <桐 壷>                    <空 蝉>

    2)『大成』テキストから一時的に品詞を抜いたテキストと『大系』テキストの双方の読点と句点の位置を 比較し、『大系』の解釈に添った単語分割を行うため『大系』の位置どおりに『大成』の読点や句点の位置 を修正する。『大系』テキストを単語分割プログラムにかける。

    (分割プログラム)
    #源氏物語の分割
    #末分割のテキスト(file1) 分割済みのテキスト(file2)を使用
    #各行の対比は類似し行合わせがしてあること
    #gsplit_1 file1 file2 と使用。結果はsplitfileに出力
    cat $1| sed 's/(.)//g' | sed 's/(..)//g' | sed 's/(...)//g'| sed 's/(.*)//g' >t1file
    cat t1file|sed 'y/がぎぐげござじずぜぞだぢづでどばびぶべぼゞ/かきくけこさしすせそたちつてとはひふへほゝ/'>t2file
    cat t2file|sed -f commandf >t3file
    cp t3file tfile
    rm t1file t2file t3file
    echo "" > splitfile1
    set 1 = 'cat tfile|wc -1'
    @ i = 1
    @ a = 1
    while($1 >= $i)
        cat tfile|tail +$a|head -1 > sfile1
        cat $2|tail +$a|head -1 > sfile2
        cat sfile1
        cat sfile2|tr "/" '\012' > sfile3
        @ k = 1
        set m = 'cat sfile2|tr "/" " " '
        set n = 'cat sfile3|wc -1 '
        @ a++
        while($n > $k)
            echo -n "/"<=. ->$/\!' >cmf
            echo "s/$m[$k]/<=$m[$k]->/" >>cmf
            cat sfile1|sed -f cmf >yy
            cat yy|sed 's/< / < /g' |sed 's/ > / > /g'|tr " " '\012'|sed '/'$/d' >
    xx
            rm sfile1 yy cmf
            mv xx sfile1
            @ k++
        end
        cat sfile1|tr '\012' " " >> splitfile1
        echo "" >>splitfile1
        cat sfile|tr '\012' " "
        echo ""
        echo $i 'date'
        rm sfile1 sfile2 sfile3
        @ 1++
    end
    cat splitfile1|tai1 +2 >splitfile
    rm tfile splitfile1

    3)このプログラムで最初に分割した単語は<=と->と区切られ、一度区切られるとその中は区切らない。 この<=と->を /に変換し、間違いを修正する。

    成 1:/ね/られ/たまは/ぬ/ままに/は/、
    系 1:/寢/られ/給は/ぬ/まゝに/、

    成 2:/我/は/、
    系 2:/我/は/、

    成 3:/かく/、
    系 3:/かく/、

    成 4:/人/に/にくま/れ/て/も/ならは/ぬ/を/、
    系 4:/人/に/憎ま/れ/て/も/ならは/ぬ/を/、
    成 13:/てさくり/の/、
    系 13:/手さくり/の/、

    成 14:/ほそく/ちいさき/ほと/、
    系 14:/細く小さき程/、

    成 15:/かみ/の/いと/なかから/さり/し/けはひ/の/、
    系 15:/髪/の/いと/長から/さり/し/けはひ/の/、

    成 16:/さま/かよひ/たる/も/、
    系 16:/似通ひ/たる/も/、


  3. 自動品詞つけ
    2.の3)でできた単語分割の済んだテキストに自動品詞つけを行うが、『大成』テキストの中にあって 『大系』テキストにない単語やその逆の場合の処理をしなければならない。二つのテキストを並べ、 『大成』にあって『大系』に単語がない場合は、『大系』テキストの /と /の間に半角スペース をいれ、その逆の場合は『大成』テキストの /と /の間に半角スペースを入れた。自動品詞つけを 正確にするために、仮に単語数を同じにしたのである。『大系』で空欄のところは後に品詞をつけ て完成する。
    『大成』と『大系』の違いの行だけを表示すると以下のようになる。

    F 1:/ね/られ/たまは/ぬ/ままに/は/、
    S 1:/寢/られ/給は/ぬ/まゝに//、

    F 14:/ほそく/ちいさき/ほと/、
    S 14:/細く/小さき/程/、

    F 16:/さま/かよひ/たる/も/、
    S 16://似通ひ/たる/も/、

    F 21:/まめやかに/めさまし/と/おほしあかし/つつ/、
    S 21:/まめやかに/めさまし/と/思し明し/つゝ/、

    F 24:/夜ふかう/いて/たまへ/は/、
    S 24:/夜ふかく/出て/給へ/は/、

    F 33:/おほしこり/に/ける/と/思/に/も/、
    S 33:/思し懲り/に/ける/と/思ふ/に/も/、
    F 41:/よき/ほと/に//、
    S 41:/よき/程/に/て/、

    F 42:/かくて/とちめ/て/ん/と/おもふ/ものから/、
    S 42:/かくて/閉ちめ/て/む/と/思ふ/物から/、

    F 54:/しゐて/おもひかへせ/と/、
    S 54:/強ひて/思ひかへせ/と/、

    F 55:/心/に/し/も/したかは/す/くるしき/を/、
    S 55:/心/に//も/したかは/す/苦しき/を/、

    F 56:/さりぬへき/おり///み/て/、
    S 56:/さりぬへき/折/を/も/見/て/、

    F 60:/かかる/かた/に/て/も/、
    S 60:/かゝる/方/に/て/も/、



  4. 自動品詞つけの結果

    /寢[動詞]/られ[助動]/給は[動敬]/ぬ[助動]/まゝに[副詞]/、
    /我[代名]/は[助詞]/、
    /かく[副詞]/、
    /人[名詞]/に[助動]/憎ま[動詞]/れ[助動]/て[助詞]/も[助詞]/ならは[動詞]/ぬ[助動]/を[助詞]/、
    /今宵[名副]/なむ[助詞]/、
    /はしめて[副詞]/、
    /憂し[形容]/と[助詞]/、
    /世[名詞]/を[助詞]/思ひ知り[動詞]/ぬれ[助動]/は[助詞]/、
    /はつかしく[形容]/て[助詞]/、
    /なからふ[動詞]/ましく[助動]/こそ[助詞]/思ひなり[動詞]/ぬれ[助動]/なと[助詞]/のたまへ[動詞]/は [助詞]/、
    /涙[名詞]/を[助詞]/さへ[助詞]/こほし[動詞]/て[助詞]/臥し[動詞]/たり[助動]/。
    /いと[副詞]/らうたし[形容]/と[助詞]/おほす[動詞]/。
    /手さくり[名詞]/の[助詞]/、
    /細く[形容]/小さき[形容]/程[名詞]/、
    /髪[名詞]/の[助詞]/いと[副詞]/長から[形容]/さり[助動]/し[助動]/けはひ[名詞]/の[助詞]/、
    /似通ひ[動詞]/たる[助動]/も[助詞]/、
    /思ひなし[名詞]/に[助動]/や[助詞]/あはれなり[形動]/。
    /あなかちに[形動]/、
    /かゝつらひ[動詞]/たとりよら[動詞]/む[助動]/も[助詞]/、
    /人悪かる[形容]/へく[助動]/、
    /まめやかに[形動]/めさまし[形容]/と[助詞]/思し明し[動詞]/つゝ[助詞]/、
    /例の[連語]/やう[名詞]/に[助動]/も[助詞]/、
    /の給ひまつはさ[動詞]/す[助動]/。
    /夜ふかく[形容]/出て[動詞]/給へ[動敬]/は[助詞]/、
    /この[連体]/子[名詞]/は[助詞]、


  5. 結び
     単語の自動分割と品詞つけは、32ビットワークステーションを使って、「桐壷」の巻で4時間程度 かかったが、95%以上の正確さで行えた。前記の方法は、他系源氏物語フルテキストデータベース作成に 有効な手段となり、同時代の他作品のデータベース化にも応用可能である。
     なお本研究は、当資料館の安永尚志先生との共同研究である。



戻る

古典総合研究所ホームページへ