文字頻度分析・可視化ツール
テキストに含まれる各文字が出現する回数を数え、棒グラフとして可視化するツールです。文字の分布パターンを一目で把握でき、暗号解読や置換暗号の解析、ハフマン符号化などデータ圧縮アルゴリズムの検討、言語ごとの文字使用傾向を調べる自然言語処理の研究や著者分析にも利用できます。
文字頻度分析
ドキュメンテーション
文字頻度分析とは何か?
文字頻度分析とは、テキスト内に各文字が何回現れるかを数える処理です。対象には、文字、数字、空白、句読点、その他テキスト内の記号が含まれます。結果は、1文字につき1つの数を示す簡単な表またはグラフになります。
このツールは、貼り付けたり入力したりしたテキストを自動的に解析し、すべての文字を数えます。数を棒グラフで表示するため、最も多い文字がひと目で分かります。棒をポイントまたはタップすると、その文字の正確な出現回数が表示されます。
この手法は古くからあります。アラブの学者アル=キンディーは、単純な暗号を解読する方法として9世紀にこれを説明しました。現在では、データ圧縮、綴りや文字コードの検査、基本的な言語識別にも使われています。
文字頻度の計算方法
文字頻度を手作業で計算する場合は、次の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文字ごとの正確な出現回数。
「Copy」ボタンを使うと、結果がプレーンテキストに整形され、1行につき1文字とその数が表示されます。スプレッドシートや文書にそのまま貼り付けられます。この出力では、空白は空行と間違えられないように「space」と表示されます。
通常の英語テキストでは、E、T、A、O、Iなどの文字が最も多い文字の中に入ることが一般的です。QやZのような出現頻度の低い文字が異常に多いテキストは、符号化、暗号化されているか、別の言語で書かれている可能性があります。
文字頻度分析の用途
単一換字式暗号の解読
単一換字式暗号では、メッセージの各文字を別の文字または記号に置き換え、同じ置換を全体で使います。置換が一貫しているため、元の言語の頻度パターンが暗号文にも残ります。英語では、文字Eは全体の約12–13%に現れます。暗号文中のある記号がその割合で現れるなら、それはEを表している有力な候補です。これは、現代の暗号方式によってパズルや歴史資料以外では使えなくなるまで、何世紀にもわたり単一換字式暗号を解読する主な方法でした。
データ圧縮
ZIPやGZIPなどの圧縮形式は、ハフマン符号化と呼ばれる手法で文字頻度を利用します。頻繁に現れる文字には短い二進符号を割り当て、まれな文字には長い符号を割り当てます。一般的な文字1回あたりの占有領域が小さくなるため、情報を失わずにファイル全体を縮小できます。
文字コードの問題の発見
「é」であるべき箇所に「é」が表示されるなど、奇妙で予期しない文字が表示される場合、ファイルの保存に使った文字コードと読み取りに使った文字コードが一致していない可能性があります。一般的な文字ではなく奇妙な記号が異常に突出している頻度グラフは、文字コードの問題の確認に役立ちます。
言語識別
言語ごとに典型的な文字分布は異なります。英語ではE、T、Aが多く使われます。ドイツ語ではEやNがはるかに多く、さらに英語にはまったく現れないä、ö、üなどの文字も使われます。テキストの文字頻度を既知の言語プロファイルと比較すると、その言語を素早く大まかに推測できます。
文体と著者の特定
書き手には句読点や文字の使い方に一貫した習慣があるため、文字レベルのパターンは著者を特定する際の小さな証拠の一つになります。文字頻度だけで誰が書いたかを証明できることはほとんどありません。語の選択、文の長さ、その他の文体的特徴と組み合わせると、最も効果を発揮します。
その他のテキスト分析手法
文字頻度はテキストを分析する唯一の方法ではありません。
- 単語頻度は、文字ではなく単語全体を数えます。テキストの意味に近く、キーワード調査やトピック分析でよく使われます。
- Nグラム分析は、二文字組や三文字組など、文字または単語の短い連続列を調べます。予測入力キーボードやオートコンプリートは、これを使って次の文字や単語を推測します。
- 感情分析は、単純なカウントをはるかに超える手法を用いて、テキストの印象が肯定的、否定的、中立的のいずれかを判定します。
- 可読性分析は、フレッシュ・キンケイド・スコアなどを使い、文や単語の長さに基づいてテキストの読みやすさを推定します。
よくある質問
文字頻度分析から何が分かるか?
テキスト内で各文字が何回現れるかが分かります。結果を読むことで、暗号解析、圧縮、文字コードエラーの発見、テキストの言語推測に役立つパターンを見つけられます。
このツールは結果をどのように並べ替えるか?
文字をアルファベット順に並べ替えます。数の順に並べ替える機能はありません。最も多い文字と最も少ない文字は、棒グラフを見て確認するか、コピーしたテキスト内の数を調べる必要があります。
このツールは割合を表示するか?
いいえ。各文字の実数の出現回数と総文字数を表示します。文字の割合は、その文字の数を合計で割り、100を掛けて計算できます。
文字頻度分析で現代の暗号を解読できるか?
いいえ。同じ文字が常に同じ置換文字を表す単純な換字式暗号に対してのみ機能します。AESなどの現代の暗号方式では、そのような一貫したパターンのない出力が生成されるため、頻度を数えても元のメッセージについて何も分かりません。
このツールは空白や句読点を数えるか?
はい。空白、タブ、改行、句読点を含め、入力内のすべての文字を数えます。通常のテキストでは、空白が単独で最も多い文字になることがよくあります。
信頼できるパターンを得るにはどの程度のテキストが必要か?
数百文字が妥当な最低限の目安です。非常に短いテキストでは、偶然だけで頻度が予想されるパターンから大きく外れることがあります。1000文字以上の長いサンプルほど、既知の言語パターンに近い結果になりやすくなります。
参考文献
- MDN Web Docs: Map — 文字を効率的に数えるために使われるハッシュマップのデータ構造に関するドキュメント。
- Shannon, C. E.(1951)「印刷英語の予測とエントロピー」The Bell System Technical Journal、30(1)、50-64。
- Huffman, D. A.(1952)「最小冗長符号の構成法」Proceedings of the IRE、40(9)、1098-1101。
- Huffman Coding — Wikipedia