文字頻度分析・可視化ツール
テキストに含まれる各文字が出現する回数を数え、棒グラフとして可視化するツールです。文字の分布パターンを一目で把握でき、暗号解読や置換暗号の解析、ハフマン符号化などデータ圧縮アルゴリズムの検討、言語ごとの文字使用傾向を調べる自然言語処理の研究や著者分析にも利用できます。
文字頻度分析
ドキュメンテーション
文字頻度分析とは何か?
文字頻度分析とは、テキスト内に各文字が何回現れるかを数える処理です。対象には、文字、数字、空白、句読点、その他テキスト内の記号が含まれます。結果は、1文字につき1つの数を示す簡単な表またはグラフになります。
このツールは、貼り付けまたは入力されたテキストの文字をすべて自動的に数えます。重複しない文字ごとに出現回数を一覧にし、棒グラフも描くため、最も多い文字がひと目でわかります。
この手法は古くからあります。アラブの学者アル・キンディーは、単純な暗号を解読する方法として、西暦850年ごろにこれを説明しました。現在では、データ圧縮、スペルや文字コードの確認、簡易的な言語判定にも使われています。
文字頻度の計算方法
文字頻度を手作業で計算する場合は、次の3段階を踏みます。
- 空白や句読点も含め、テキストを1文字ずつ調べる。
- 文字ごとに累計を記録する。新しい文字の数は1から始め、同じ文字が再び現れたら既存の累計に1を加える。
- すべての文字と最終的な累計を一覧にする。
このツールは、ハッシュマップ(キーに対応する値を格納する検索表)と呼ばれるデータ構造を使って、同じ処理を自動的に行います。テキスト内の各文字について、その文字の項目がマップにすでに存在するかを確認します。存在する場合は、保存されている数に1を加えます。存在しない場合は、数を1とする新しい項目を作成します。この方法では各文字に正確に1回ずつアクセスするため、処理時間はテキストの長さに正比例して増加し、それより速い割合で増えることはありません。
集計後、ツールは文字のアルファベット順に結果を一覧表示します。現在のところ、数の順に並べ替える機能はありません。
パーセンテージとしての文字頻度
数だけでは、長さの異なるテキスト同士を比較するのが難しい場合があります。そのため、頻度は合計文字数に対する割合として表すことがよくあります。
ここで、は文字の出現回数、はテキスト内の総文字数を表します。このツールが表示するのは文字の出現回数をそのまま集計した値と総文字数で、パーセント列はありません。ただし、任意の文字の割合は、その文字の数を合計で割り、100を掛けて計算できます。
計算例
「mississippi」という語を例にします。この語は11文字で、空白や句読点はありません。
各文字を数えると、次のようになります。
| 文字 | 回数 | 割合 |
|---|---|---|
| i | 4 | 36.4% |
| m | 1 | 9.1% |
| p | 2 | 18.2% |
| s | 4 | 36.4% |
表はアルファベット順(i、m、p、s)に並んでおり、このツールの結果の並び順と同じです。数を合計すると11になり、これは語の全長です。割合の列を得るには、各数を11で割って100を掛けます。たとえば、4 ÷ 11 × 100 ≈ 36.4%です。
このツールの使い方
入力欄にテキストを入力または貼り付けます。ボタンを押す必要はなく、ツールはすぐに解析します。テキストを変更すると、文字一覧と棒グラフもそれに合わせて更新されます。
結果欄には次の内容が表示されます。
- 文字ごとに1本の棒を示す棒グラフ。棒が高いほど、その文字の出現回数が多いことを表します。
- 空白や句読点を含む、テキストの総文字数。
- 各文字と、その正確な出現回数の一覧。
「コピー」ボタンを使うと、結果がプレーンテキストに整形され、1行につき1文字とその数が表示されます。スプレッドシートや文書にそのまま貼り付けられます。この出力では、空白は空行と間違えられないように「space」と表示されます。
一般的な英語のテキストでは、E、T、A、O、Iが最もよく使われる五つの文字です。QやZのようにまれな文字が極端に多く現れるテキストは、符号化されているか、暗号化されているか、別の言語で書かれている可能性があります。
文字頻度分析の用途
単一換字式暗号の解読
換字式暗号は、メッセージの各文字を別の文字や記号に置き換えるもので、全体を通して同じ置き換えを使います。置き換えが一貫しているため、元の言語の頻度パターンは暗号文にも残ります。英語では、文字Eがすべての文字の約12%を占めます。暗号文のある記号がその割合ほど現れるなら、それはEの代わりである可能性が高い候補です。これは、現代の暗号によって、パズルや歴史的な文書以外では通用しなくなるまで、何世紀にもわたって換字式暗号を破る主な方法でした。
データ圧縮
gzipユーティリティで使われるDEFLATE圧縮形式は、LZ77方式とハフマン符号化を組み合わせたものです。ハフマン符号は、記号の出現頻度から作られます。よく現れる文字には短い二進符号が、まれな文字には長い符号が割り当てられます。よく現れる文字は一回当たりに必要な容量が小さくなるため、情報を失うことなく、ファイル全体が小さくなります。
文字コードの問題の発見
「é」であるべき箇所に「é」が表示されるなど、奇妙で予期しない文字が表示される場合、ファイルの保存に使った文字コードと読み取りに使った文字コードが一致していない可能性があります。一般的な文字ではなく奇妙な記号が異常に突出している頻度グラフは、文字コードの問題の確認に役立ちます。
言語識別
言語が違えば、文字の典型的な分布も異なります。英語ではE、T、Aが多く使われます。ドイツ語では、英語にはまったく現れないä、ö、üなどの文字も使われます。テキストの文字頻度を既知の言語の特徴と比べると、その言語を素早く大まかに推測できます。
文体と著者の特定
書き手には句読点や文字の使い方に一貫した習慣があるため、文字レベルのパターンは著者を特定する際の小さな証拠の一つになります。文字頻度だけで誰が書いたかを証明できることはほとんどありません。語の選択、文の長さ、その他の文体的特徴と組み合わせると、最も効果を発揮します。
その他のテキスト分析手法
文字頻度はテキストを分析する唯一の方法ではありません。
- 単語頻度は、文字ではなく単語全体を数えます。テキストの意味に近く、キーワード調査やトピック分析でよく使われます。
- Nグラム分析は、二文字組や三文字組など、文字または単語の短い連続列を調べます。予測入力キーボードやオートコンプリートは、これを使って次の文字や単語を推測します。
- 感情分析は、単純なカウントをはるかに超える手法を用いて、テキストの印象が肯定的、否定的、中立的のいずれかを判定します。
- 可読性分析は、フレッシュ・キンケイド・スコアなどを使い、文や単語の長さに基づいてテキストの読みやすさを推定します。
よくある質問
文字頻度分析から何が分かるか?
テキスト内で各文字が何回現れるかが分かります。結果を読むことで、暗号解析、圧縮、文字コードエラーの発見、テキストの言語推測に役立つパターンを見つけられます。
このツールは結果をどのように並べ替えるか?
文字はアルファベット順に並べられます。回数順に並べ替えるオプションはありません。最も多い文字と最も少ない文字は、回数を見て探すか、棒グラフを読んで見つける必要があります。
このツールは割合を表示するか?
いいえ。各文字の実数の出現回数と総文字数を表示します。文字の割合は、その文字の数を合計で割り、100を掛けて計算できます。
文字頻度分析で現代の暗号を解読できるか?
いいえ。同じ文字が常に同じ置換文字を表す単純な換字式暗号に対してのみ機能します。AESなどの現代の暗号方式では、そのような一貫したパターンのない出力が生成されるため、頻度を数えても元のメッセージについて何も分かりません。
このツールは空白や句読点を数えるか?
はい。空白、タブ、改行、句読点を含め、入力内のすべての文字を数えます。通常のテキストでは、空白が単独で最も多い文字になることがよくあります。
信頼できるパターンを得るにはどの程度のテキストが必要か?
決まった最小量はありません。ごく短いテキストでは、まったくの偶然により、頻度が期待されるパターンと大きく異なることがあります。サンプルが長いほど、既知の言語パターンにより近くなる傾向があります。
参考文献
- Naskręcki, B., Adam Mickiewicz University. Elements of Cryptanalysis, Chapter 3: Frequency Analysis. 頻度分析 — 西暦850年ごろに書かれた、アル・キンディーの頻度分析に関する論文。
- Cornell University, Department of Mathematics. English Letter Frequency. 英語の文字頻度表 — 40,000語のサンプルで、Eが12.02%、次いでT、A、O、I。
- IETF. RFC 1951: DEFLATE Compressed Data Format Specification version 1.3. RFC 1951 — DEFLATEはLZ77とハフマン符号化を組み合わせたもの。ハフマン符号は記号の出現頻度から作られる。