金と緑のエントロピー

ヴォイニッチ手稿,投資,農作について,データ分析手法を使って不真面目に研究する場所です.

ヴォイニッチ手稿の文字頻度と文字Bi-gram

前回に引き続き,ヴォイニッチ手稿の基礎的な統計分析をしていきます.

shounena.hatenablog.com

今回は,ヴォイニッチ手稿に出てくる文字の頻度を解析します.
前回のプログラムを少し変更するだけです.

#coding: utf-8
#ヴォイニッチ手稿の文字カウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    for term in terms:
        C += Counter(term)

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

注意点として,今回使っているトランスクリプションは,ヴォイニッチ手稿の文字の内複雑なものを,複数の文字で表しています.
例えば以下の文字は,PZと2文字で表しています.
http://www.voynich.nu/img/eva/cph.gif
今回はこのような複数文字も分解して1文字と考えてカウントしています.
精度の低い分析ですが,あたりを付けるためのものなのでこれで良しと,勘弁してください.
いずれ,文字をデータにする関数として定義していきたいですね.



集計結果が以下になります.

前回の単語頻度分布と同様,指数分布になっています.
文字の分布も,一般的な言語と近しい性質を持っていそうです


Oが一番多い文字のようです.
6600個あり,全体の15%以上を占めます.
Oは元の文字としてもただの丸という簡潔なものなので,書きやすそうです.
頻出の文字には書きやすいものを当てたいというのは自然ですので,これが最多というのは,言語を作る(或いは自然と作られる)上で納得がいくように思えます.
http://www.voynich.nu/img/eva/o.gif

ひょっとすると,a,anのような冠詞を表していたり,あるいは読点のような文の切れ目を表していたりするかもしれません.
Oにそのような役割があるか,予想をすることはできるでしょうか.
これについては,次回考察してみたいと思います.
今回は,Oが冠詞や読点である可能性を考える材料として,Oが連続出現しているかどうかを調べておきましょう.



文字の連続性を調べるために,文書中の,2つ連続する文字を1とカウントして,文字数を集計します.
このように,文字を2つずつ繋げたものを文字2-gram(バイグラム)と呼びます.
例えば,ヴォイニッチ手稿の1ページ目の一番最初の単語
FGAG2
は,
F,FG,GA,AG,G2,2をひとつずつカウントします.

文字2-gramをカウントするプログラムが以下です.

#coding: utf-8
#ヴォイニッチ手稿の文字Bi-gramカウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    for term in terms:
        for c1,c2 in zip(["$"]+list(term),list(term)+["$"]):
            bi = "".join([c1,c2])
            C[bi] += 1

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

単語の先頭と最後尾に"$"を付けて,zip関数を使って2つずつ取っています.
わざわざ"$"を付けるのは,単語の先頭の文字と最後尾の文字を1文字にしてしまうと,先頭と最後尾に出現した文字をともにカウントしてしまうので,それを防ぐためです.


この結果が次のグラフになります.

文字2-gramの結果は,興味深い性質をいくつか示してくれます.
Oの意味を推測する前に,先にそちらの性質を考えていきます.



まず,一番多い2文字は"G$"であることがわかります.
つまり,Gは単語の最後尾に来ることが圧倒的に多いということを示します.


当分析で用いているトランスクリプションでは,ヴォイニッチ手稿の元々の一行の最後尾であることを"-"で示しています.
そのため,"-"の次には必ず"$"が来るため,"-$"という2文字は行の数に比例して存在します.
ところが,"-$"の出現回数は1456個であるのに対し,"G$"は3046個と,倍以上出現しています.
これは,Gで終わる単語が1行に平均2回出現していると考えられます.
そもそも,文字Gの出現回数は4530個です.
よってGが出現したときに,単語の最後尾に出現している確率は
3046 / 4530 = 0.67
と,実に2/3以上となります.
Gは元々文書全体の10%程度しか占めていなかったことを考えると,圧倒的な最後尾での出現頻度ですね.
単語の最後にGを付けることが,意図して起こっている,と言えそうです.


なお,このようなある条件下(例えば単語の最後尾という条件)である事象(例えばGが出現する)という確率は,条件付き確率と呼びます.
この条件付き確率は,後の分析でも重要な役目を持ちますので,いずれ別途説明したいと思います.


Gの他にも,最後尾に出現しやすい文字としては,"R$"(1506個),"E$"(1272個),"M$"(1118個)などがあります.
どちらも1行に1個程度,最後尾に付けられた単語があります.
各文字はそれぞれ1400〜2000個程度しか存在しないことを考えると,
これらの文字R,E,Mも,最後尾に出現することが多い文字と言えます.



上記のように,最後尾に出現しやすい文字があることがわかりました.
では,先頭に出現しやすい文字はどうでしょうか?
$が前に付いた2文字だけを取り出し,頻度を集計した結果が以下です.


T,O,8が,他の文字と比べて突出して多いです.
ただ,Oは元々文書全体の15%を占める,出現回数の多い文字でした.
一方,$が前につく2文字10031個の内,"$O"1668個は,
1668/10031=0.166
と,16%程度です.
Oの出現を単語の先頭に限定して見ても,出現確率は僅かに上がる程度です.
Oは単語の先頭に出やすい,とは必ずしも言えないようです.

一方,T,8の出現確率は,それぞれ全体の8%程度しか占めていなかったのに対し,
先頭に限定すると,出現確率が17%,15%程度まで跳ね上がります.
T,8は単語の先頭に出現しやすい,と言って差し支えなさそうです.


まとめると,
・G,R,E,Mは単語の最後尾に出現しやすい文字
・T,8は単語の先頭に出現しやすい文字
・Oは特定の箇所に出現しやすいとは,現段階では確証を持っては言えない
となりました.

次回はOの持つ役割について,引き続き文字数の頻度集計結果を使って考察していきます.

ヴォイニッチ手稿の単語頻度分析

さて,前回はヴォイニッチ手稿のトランスクリプトデータをダウンロードしました.
shounena.hatenablog.com

今回は,これを使ってまずはざっくりと,傾向をデータ分析しようと思います.
目的は,ヴォイニッチ手稿が意味のある文書なのか,それとも適当に文字っぽいものを並べただけのものなのか,その見当をつけることです.

まずは,基本の分析として,ヴォイニッチ手稿の単語数を集計します.

#coding: utf-8
#ヴォイニッチ手稿の単語カウント

import sys
from collections import Counter

C = Counter()

for line in sys.stdin:
    line = line.strip()
    if len(line)==0:
        continue
    if line[0]=="#":
        continue

    terms = line.split(",")
    C += Counter(terms)

print "word\tcount"
for w,c in C.most_common():
       print w,"\t",c

このプログラムは,こんな風にcatコマンドと組み合わせて使います.

cat ../FSG.txt | python wordcount.py

入力データは,FSG.txtです.
タブ区切りで出力するので,適当にresult.tsvなどと名前をつければ,Excelなどで表示可能です.



出力結果は数の多い順に並んでいます.
結果をグラフにしてみました.

ちなみに,このプログラムでは文節終わりを示す=がついた"8AM="などは別単語扱いです.
ひどく雑な集計ですが,初歩分析ということで勘弁下さい.
その内キチンと修正します.


単語の分布の形は,指数的な分布,Zipf則に従っているように見えます
一般には,この形状がヴォイニッチ手稿が適当な記号列ではなく,何か意味がある文書だという根拠のひとつとなっています.

ヴォイニッチ手稿は未だに解明できないこともあり,ただのイタズラであるという可能性も否定できません.
ただ,人間が意識せずに意味のない文字列を作ると,一般にはこのような指数分布にすることは難しく,出現に偏りの少ない,均一分布に近くなります.
その点,この文書は単語の偏りが一般的な言語と同じ指数分布という性質を示しており,不規則に単語っぽいものを並べたということは考え難いです.

ということで,ヴォイニッチ手稿
・不規則に単語を並べただけではなく,何らかの規則性を持って並べられた,意味を持った文字列である可能性が高い
と言えます.
ただ,例えば文書を作った後に不規則に単語を並べ替えたなど,文としては成立していないことも考えられます.
これについては後の分析で改めて検証していきます.



出現数としては,8AMという単語が圧倒的に多いです.
全単語数10031個に対し,360個と4%近くを占めます.

これは英語での出現単語と比べると偏りはやや少ないといえます.
英語における出現数が最も多い単語は通常"the"であり,一般的な文書では概ね8%程度です.
次に多い単語はtoで4%程度,またa,anも合わせると4%程度です.
8AMという単語だけで見ると,出現頻度的には少ないと言えるかもしれません.

ただし,これは"8AM"という単語と完全一致した物の数だけです.
手稿の中には"8AMが含まれる単語"も多くあり(例えば"O8AM"というものは22個),
これを合計すると641個と,冠詞の出現数と比較的一致します.

例えば8AM,が名詞の前後にくっつけて冠詞として動作する,という可能性はあります.
ただ,現時点ではこの断定は難しそうです.


8AMに次いで,TOE,TORという単語が多いです.
このT**という単語は比較的多く存在します.
Tという文字を付けることは,何らかの意味があるのかもしれません.



次は文字頻度について分析してみます.

ヴォイニッチ手稿の分析用データを得る方法

 

ヴォイニッチ写本の謎

ヴォイニッチ写本の謎

 

 

ヴォイニッチ手稿(ヴォイニッチ写本とも呼ぶ)とは,未解読の言語で書かれた古文書のことです.
1902年にイタリアで発見されました.

 

見たことのない植物や,女性の絵が描かれており,何より見たことのない文字を使って書かれています.

 

未だにその内容は解読されておらず,
“宗教家や科学者が秘密の情報を隠すために独自の言語を作成した”,
“単なるいたずらで何の意味もない”,
など様々な推測がなされています.

 

また,時折“ヴォイニッチ手稿が読める”といった人物が現れて(その真偽は定かではありませんが),
オカルトめいたものを愛する方々ではその都度話題となるなど,
兎にも角にもロマンあふれるアイテムとなっています.

 

ヴォイニッチ手稿はこれまでも多くの研究者によってその解読が試みられ,
そのおかげで現在ではWebで原本の画像が容易に見られ,
(参考:https://shkspr.mobi/blog/2013/08/voynich-manuscript-ebook/)
分析を容易にするための加工がなされたデータも多く存在します.

 


当ブログでは,
このロマン溢れる古文書を題材に,
あくまで趣味の範囲でヴォイニッチ手稿の解読に向けた実験をやっていきます.

 

ヴォイニッチ手稿の解読には,
物理的な紙質等の調査,宗教的観点から読み解く,など
様々なアプローチが有るかと思いますが,
当ブログでは,特に暗号解読の手法を中心とした,データ分析による数学的な方法で解読を試みていきたいと考えます.

 

筆者は暗号解読の研究者でもなんでもありませんので,
効率が悪いところもあれば,
間違ったところもあるかと思います.

既に知られた研究結果も,気にせず再分析します.


所詮アマチュアの聞きかじった程度と笑っていただき,
間違いについてはお叱り,ご訂正いただけますと幸いです.


さて,まずはヴォイニッチ手稿のデータ獲得方法です.
ヴォイニッチ手稿は世界中の研究者にとって解読を夢見るアイテムであるため,
様々なチームによって,分析可能なデータ化(transcription)がなされています.

 

そもそも人が書いた文字のどれが同じ文字かも定かではないし,
また挿絵との関係性もわかっていないため,
データには文字の表し方や文字判定,
挿絵の記載など様々なものが有り,
具体的にどのデータが一番だと言えるものではありません.

 

とりあえず,筆者は以下のサイトから拝借したデータを用いて分析を行います.
http://www.voynich.nu/transcr.html
中盤のstill available for downloadを選べば,テキストデータでダウンロード可能です.

 

他にも,以下のサイトで得られるデータなどは綺麗に加工されていて使い勝手が良さそうです.

http://www.ic.unicamp.br/~stolfi/voynich//98-12-28-interln16e6/

 

例えば挿絵と合わせた分析を行う場合など,このデータでは不都合な点があるかもしれません.
その場合は都度データを変更するものとし,
当ブログでは,以降ではこちらのデータを使って分析をして行こうと思います.

 

次回は,pythonを使った,ヴォイニッチ手稿データの基礎的分析について触れていきたいと思います.