プーシキン語彙統計について
since Dec.24 1999 (since July 21 2001, русская версия)
  1. はじめに
  2. 処理対象範囲
  3. 編集方法
  4. 語彙統計基準
  5. 処理方法詳細
  6. 作業計算機環境
  7. プーシキン語彙統計
  8. 最後に

 

bullet はじめに

プーシキン文芸作品の語彙統計表をまとめてみた。集計結果はここから参照いただきたい。研究者には、以下に示す前提条件を確認の上、ご活用いただければ幸いである。

統計処理は計算機により機械的に行っており、入力としたデータ (コーパス) は、ロシアの F-BIT 社から発行された CD-ROM 版プーシキン全集に拠った。これは、1937 年から 1949 年にわたって刊行された、かの有名なソヴィエト科学アカデミー版大全集に基づいている。

本ドキュメント並びに語彙統計結果は無保証である。

戻る
 
bullet 処理対象範囲

本語彙統計は文芸作品を対象としており、全集編集者が準拠した以下のジャンルに処理範囲を限定している。(対象作品一覧は、ジャンルから参照できる)

  -
  - 物語詩(ポエーマ)
  - 演劇
  - 散文小説
  - スカースカ

つまり日記や歴史、批評文などはここから外れている。ある意味で作家の語彙統計としては不十分かも知れないが、芸術作品としてのプーシキン作品の一概観として意味があるものと考える。処理方法の詳細も後述しているので、関心のある方は、対象外としたテキストも同様の方法により統計処理が可能と考える。

プーシキン作品のなかで統計対象とする文書構造は以下のとおりとする。

  - 作品表題、章名、節名
  - エピグラフ、引用文
  - 作者原注
  - 作品本文

プーシキン・テキスト中のフランス語等に対して、全集編集者が付加した翻訳文は対象としない。作品の表題が章の度に重複して記述されている場合も処理対象に含まれている。

戻る
 
bullet 編集方法

CD-ROM 電子テキストは閲覧に適するように、HTML にてオーサリングされている。しかしながら、作品の単語を切り出して統計処理をするという目的に対しては、HTML のタグや出版社によるコメントその他の付随情報はノイズであり、まずこれらを除去する必要がある。本処理では、プーシキン作品には本質的でないと考えられるテキストを、以下の基準で除去した。

  1. HTML タグ: <xxx></xxx>などのテキスト
  2. リンクテキスト:例えば注へのリンクとなる数字などのテキスト
    ex: "<A href=リンク先>(1)</A>" における "(1)" テキスト
  3. HTML コメント文:"<!--" から "-->" までのテキスト行
  4. Web ページのタイトル:"<title>" から "</title>" の間に指定されたテキスト

CD-ROM 電子テキストには明白な誤植がある。キリル文字、ラテン文字で字母形状が似たものを、取り違えて入力している場合が多数ある。"a" "e" "o" についてキリル文字とラテン文字を混在させていたり、キリル文字の "З" を数字の "3" で誤入力している例がある。これらは、エディタの検索機能を使ってわたしが見つけた範囲で修正した。チェックを行った文字は以下のとおり。

A a, B, E e, K, M, H, O o, P p, C c, T, y, X x, 3

ただし、テキスト原文において、キリル母音にアクセントを明示したいために、アクセント付きラテン文字を利用している場合があり、これについては修正は行わず、この形態で統計処理を行った。例えば、атàнде は ат(cyrillic)-à(latin1)-нде(cyrillic) と混在しているがそのままとした。

戻る
 
bullet 語彙統計基準

語彙統計処理は、わたしの書いたソフトウェアである staslova にて行った。これは、外部定義に従って単語を切り出し、統計分類を行う。今回設定の統計仕様は以下のとおり。

  1. すべての文字を小文字変換して比較する。
  2. キリル/ラテン文字が混合する語はキリルに分類する。
  3. 数字や、単語の区切り文字以外の特殊文字も統計対象とした。
  4. 単語の並び (ソーティング) は ISO 8859-5 キリル・アルファベット文字コードの順番で行う。このコード体系では、概ねロシア語のアルファベット順で単語が並ぶが、"ё" は "я" より後方に定義されているので注意。コード配列などキリル文字コード一般の詳細については以下の URL を参照されたい。

    http://czyborra.com/charsets/cyrillic.html

  5. ラテン文字のうち HTML のスペシャルキャラクタについては、"&xxx;" という形態であるため、"&" の文字コードに依存した分類となっている。

単語を切り出すために、単語の区切りの判断を区切り文字という考え方に基づいて実施している。その仕様は以下のとおり。

  1. 必ず語を区切る文字

      ,  .  !  ?  :  ;  "  (  )  {  }  <  >  [  ]
     x'00' - x'1a' 及び x'1c' - x'20(空白)' の制御文字

  2. 連続して現れた時区切りと判断する文字

      -  =

  3. 上記区切り文字と隣接して出現した時区切りと判断する文字

      `  '  -

単語統計処理プログラム staslova 詳細については以下の URL を参照されたい。

http://yasuda.homeip.net/russify/
http://yasuda.homeip.net/arc/staslova-1.1.tar.gz
(ダウンロード)

語彙統計はジャンルごとに整理した。

戻る
 
bullet 処理方法詳細

処理の手順詳細は以下のとおりである。計算機システムのプラットフォームは UNIX である。

  1. CD-ROM ファイルツリーのコピー
    統計処理のため CD-ROM からデータファイルツリーを、一時的にハードディスクにコピーする。本 CD-ROM はディレクトリ (フォルダ) に書き込み属性が付与されていないため、通常の cp コマンドではパーミションエラーとなり、途中で停止してしまう。ディレクトリ単位に属性変更を行いつつ、cp コマンドを実行しなければならず面倒である。一回の操作でハードディスクにコピーするには、以下のように tar を使う。
    % mkdir -p ~/literature/pushkin/sochineniya
    % cd /cdrom/texty
    % tar cvf - ./stihi/ ./poemy/ ./drama/ \
    ./proza/ ./skazki/ | \
    ( cd ~/literature/pushkin/sochineniya ; tar xvf - )
    		  
  2. 必要なファイル以外を削除
    編集者による外国語の翻訳文などのファイルを削除する。
  3. ジャンル単位データ編集 (シェルスクリプト)
    ジャンル単位で作成されたディレクトリ毎に、必要な変換処理・テキスト編集を施す。
    1. 当該ジャンルの全 HTML ファイルの抽出 (find コマンド)
    2. HTML タグ、コメント部分・ページタイトルなど、不要なテキストの除去及びスペシャルキャラクタの変更 ("&xxx;" → "&xxx|") (sed コマンド)
    3. Windows-CP1251 → ISO 8859-5 コード変換 (transce8 コマンド)
    4. ISO 8859-5 テキスト → ctext 変換 (coco コマンド)
      "ctext" とは UNIX X Window System における多言語テキストの形式である。staslova は ctext が前提であるため、Windows-CP1251 コードで書かれた入力テキストをいったん ISO 8859-5 を経由して ctext に変換している。
    上記を行うシェルスクリプト例を以下に示す。sed コマンド中の "^M" は制御コード (x'0d') なので注意。

     

    #!/bin/sh
    #
    #	A.S. Pushkin HTML Text to CTEXT generator
    #
    
    BASEDIR="/home/isao/literature/pushkin/sochineniya"
    PUTDIR="/home/isao/literature/pushkin/sochineniya\
    /statistika/src"
    		  
    /usr/bin/find $BASEDIR/$1 -name "*.htm" \
        -exec cat {} \; | \
    /usr/bin/sed \
        -e '/^<\!--/,/^-->/d' \
        -e 's/<\!--.*-->//g' \
        -e 's/<[Tt][Ii][Tt][Ll][Ee].*\/[Tt][Ii][Tt][Ll][Ee]>//g' \
        -e 's/<[Aa] .*\/[Aa]>//g' \
        -e 's/<[^>]*>//g' \
        -e 's/\&nbsp;/ /g' \
        -e 's/\&[^;]*/&|/g' \
        -e 's/|;/|/g' \
        -e 's/^M//g' \
        -e '/^ *$/d' | \
    /usr/local/bin/transce8 -scp1251 -tiso8859.5 | \
    /usr/local/bin/coco -v '*iso-8859-5*' '*ctext*unix' \
        > $PUTDIR/$1.src
    exit
    		  

     

  4. 単語統計処理 (staslova コマンド)
    % staslova -s -c0 -l3 -dpushkin.def \
      < stihi.src > stihi.stat
    		  
  5. 文字チェック及び修正(多言語エディタ Mule)
  6. 統計処理の再実行 (staslova コマンド)
  7. 統計結果ファイルのキリル/ラテン・ファイル分割 (多言語エディタ Mule)
  8. ジャンル別統計ファイルのソート・マージ (シェルスクリプト)
    キリル/ラテン個別にジャンル別統計ファイルを表形式に併合する。 (join, awk, sort コマンド)
    シェルスクリプト例を以下に示す。

     

    #!/bin/sh
    #
    #        merge of statistics reports
    		
    cp stihi.stat BASE
    cp poemy.stat stat.1
    cp drama.stat stat.2
    cp proza.stat stat.3
    cp skazki.stat stat.4
    		
    for i in 1 2 3 4
    do
    # <0> put common words to J0
        /usr/bin/join BASE stat.$i > J0
    # <1> put BASE only words to J1
        /usr/bin/join -v1 BASE stat.$i > J1
        /usr/bin/awk '
            {txt=""
            txt=$NF "\x09" "0"
            $NF=txt; print $0}' J1 > J1a
    # <2> put stat.$i only words to J2
        /usr/bin/join -v2 BASE stat.$i > J2
        /usr/bin/awk -v NUM=$i '
            {txt=""
            for (i=NUM; i>0; i--) {txt=txt "0\x09"}
            txt=txt $NF
            $NF=txt; print $0}' J2 > J2a
    # sort / merge <0><1><2>
        /usr/bin/sort J0 J1a J2a > J3
        mv J3 BASE
        rm -f J*
    done
    	  
    cp BASE pushkin.stat
    exit
    		  

     

  9. 単語利用のべ回数総計及び単語出現回数の合計値を計算・挿入 (awk コマンド)
    単語の総出現回数と単語の種類の数の算出を行う。
    シェルスクリプト例を以下に示す。

     

    #!/bin/sh
    #
    #        count of words summary
    	  
    /usr/local/bin/coco -v '*ctext*unix' '*iso-8859-5*' | \
    /usr/bin/awk '
        BEGIN { 
            c1=c2=c3=c4=c5=0; w1=w2=w3=w4=w5=0 
        }
        {
            if ( NF == 6 ) { 
                c1=c1+$2 
                if ( $2 != 0 ) w1++
                c2=c2+$3 
                if ( $3 != 0 ) w2++
                c3=c3+$4 
                if ( $4 != 0 ) w3++
                c4=c4+$5 
                if ( $5 != 0 ) w4++
                c5=c5+$6 
                if ( $6 != 0 ) w5++
            }
        }
        END {
            printf("Total&nbsp\;count\x09 %d %d %d %d %d\n",\
                c1, c2, c3, c4, c5)
            printf("\(words\)\x09 %d %d %d %d %d\n",\
                w1, w2, w3, w4, w5)
        }' | \
    /usr/local/bin/coco -v '*iso-8859-5*' '*ctext*unix' 
    exit
    		  

     

  10. HTML 編集 (多言語エディタ Mule 及びシェルスクリプト)
    語彙統計結果をインターネットブラウザで閲覧するために、HTML 編集を行う。
    1. スペシャルキャラクタ復元 ("&xxx|" → "&xxx;") (sed コマンド)
    2. テーブル加工等 (sed コマンド)
    3. HTML ヘッダ等の挿入 (Mule)
    4. ctext → ISO 8859-5 → KOI8-r コード変換 (coco, transce8 コマンド)

戻る
 
bullet 作業計算機環境

本語彙統計を実行した計算機環境に関し、そのハードウェアスペック、ソフトウェアバージョンを参考までに以下にあげておく。ソフトウェアはいずれもフリーである。

項目環境
システムAMD K6-2 300MHz 自作 PC
メモリSD-RAM 256MB
オペレーティング
システム
FreeBSD 3.2-RELEASE
テキストエディタMule 2.3 (SUETSUMUHANA) + ETL キリルフォント
テキスト編集ツール awk  :GNU Awk 3.0.3
sed  :FreeBSD 3.2 付属のマルチバイト拡張なしのもの
join  :FreeBSD 3.2 付属リレーショナルデータベース結合
sort  :FreeBSD 3.2 付属テキストソート・マージ
コード変換ツール coco (Mule コードコンバータ) V2.2
transce8 (8ビットコードコンバータ) V1.13
  

※ Mule, ETL キリルフォント, coco, transce8 については、 FreeBSD システムをインストールした後、別途システム添付の CD-ROM からパッケージを組み込む必要がある。
※ sed マルチバイト拡張版 (日本語対応版) を用いると 8 bit 目を利用するキリル文字の扱いで誤動作するので注意。

戻る
 
bullet プーシキン語彙統計

閲覧

  • 統計結果閲覧画面 (navi.html) は上・中・下のフレーム構成となっている。
    1. 上段フレーム
      アルファベット毎の単語テーブルのメニュー。"Total" は全体のサマリーである。"Latin" はロシア語以外の語彙の統計結果と考えてほしい。
    2. 中段フレーム
      上段メニューで選択したアルファベットを先頭とする語彙統計テーブル明細やトータル集計値が表示される。初期状態ではトータル集計結果テーブル ("Total") が表示されている。
    3. 下段フレーム
      戻り用のリンクフレーム (統計結果とは直接の関係はない)
  • トータル集計テーブルにおいて、"Total count" というのは、その該当する単語がのべ何回出現したかを示している。"(words)" というのは、出現した単語の種類を示している。ある単語がコーパス全体で 10 回出現していたなら、"Total count" 中の 10 を占めることになるのに対し、単語の種類としては 1 であり、"(words)" 中の 1 を占めることを示す。
  • "Latin" テーブルはプーシキン作品のなかに現れたフランス語、ドイツ語などのラテン文字、ローマ字で構成される単語の出現回数テーブルである。ASCII, ISO 8859-1, ISO 8859-2 コードで表現される文字列がここに分類されているので、数字やアスタリスクなどの記号も含まれる。入力データは HTML からタグを除去したテキストとしたが、西欧語で用いられるアクセント付き文字や合わせ文字は、"&xxx;" という HTML における表現形式のまま統計処理している。したがって、英語の冠詞の「ア a」とフランス語「アラカルト à la carte」の「ア à」はアクセントありなしが区別されて、別の分類となっている。
  • 各単語の明細用のテーブルは、ほぼアルファベット字母毎に閲覧できるように分割している。出現語彙数の多いものは、ひとつの HTML ファイルにすると大きくなりその分表示に時間がかかるため、さらに複数に分割している。(それでも概して各ファイルは大きいのだけれど...)
  • フレーム機能をサポートしたブラウザが必要である。 IE4 (Microsoft Internet Explorer 4.0) 以上または、 NS4 (Netscape Communicator 4) 以上を推奨する。
  • ロシア語を表示・印刷するためのブラウザ環境が必要である。 NS4 では標準で表示と印刷が可能であるが、IE4 では西ヨーロッパ言語サポート機能 (パッケージに添付されている) を追加インストールする必要がある。 IE4 はロシア語の HTML においても、アクセント付きラテン文字の混在表示が可能である。
  • インターネット上では通信回線の速度、データ容量等の要因により、語彙統計テーブル明細の表示には時間がかかる場合があるので注意。より高速に閲覧したい場合は、アーカイブをダウンロードしていただきたい。

ダウンロード

  • Tar でアーカイブしたデータを Gzip で圧縮している。
  • 解凍 (復元) するためには、適当なディレクトリにおいて、UNIX コマンドラインで以下のいずれかを実行する。
    % tar zxvf pushkin.tar.gz
    % gzcat < pushkin.tar.gz | tar xvf -
    		  
  • 解凍したら、preface.html もしくは navi.html をブラウザでオープンして統計結果を閲覧する。
  • "tools" ディレクトリには、語彙統計 HTML を構築するためにわたしが準備したシェルスクリプトも格納している。

戻る
 
bullet 最後に

プーシキン生誕 200 年にあたる 1999 年のうちになんとか仕上げたい、とのこだわりから、休日 2 日間の突貫工事でまとめあげたものである。コーパスのチェックも本格的に研究に利用するには不十分かも知れない。首尾を欠いた部分も多数あると思うので、不明点、ご指摘があれば電子メールでご教示いただきたい。わたしは本業で多忙ではあるが、可能な限りお答えしたいと考えている。

戻る