文字頻度分析ツール
テキスト内の各文字の出現回数と頻度を統計
オプション
排序
文字頻度分析とは?
文字頻度分析ツールは、テキスト内の各文字の出現回数と頻度を分析します。暗号解析、テキスト特徴抽出、エンコーディング検出などに役立ちます。文字頻度を分析することで、テキストの文字分布の特徴を素早く把握し、異常な文字を発見したり、データ圧縮の研究に活用できます。大文字小文字の区別、スペースや改行の処理オプションにも対応しています。
使い方
使い方
- 入力エリアにテキストを入力または貼り付けてください
- システムが各文字の出現回数と頻度を自動的にカウントします
- 並べ替えオプションで文字順または出現回数順に結果を整理できます
- オプションを調整します(大文字小文字の区別、スペース、改行など)
カウント範囲
- テキストを比較する前に、スペース・句読点・大文字小文字・改行をカウント対象にするかどうかを決めてください。
- 多言語テキストを扱う場合、絵文字・合成文字・CJK文字は単一のラテン文字と同じようには動作しないことがあります。
利用シーン
仕組み
文字頻度分析は、テキスト内の各文字の出現回数を数える手法である。実装ではハッシュテーブル(JavaScript では一般的に Map)を使用する:1)テキストを一文字ずつ走査し、2)各文字についてマップのカウントをインクリメントし、3)エントリをカウントの降順でソートし、4)ヒストグラムを描画する(上位10〜20文字を表示し、残りは尾部バケットにまとめる)。アルゴリズムの計算量はテキスト長 N に対して O(N) であり、主要なコストはマップのルックアップとインクリメントである(V8 および SpiderMonkey では一般的なケースでほぼコストフリー)。 留意すべき点として、「文字」の定義がある。JavaScript では .length は Unicode コードポイントではなく UTF-16 コードユニットの数を返す。基本多言語面(BMP)外の文字(絵文字、稀少CJK漢字)はサロゲートペア(2つのコードユニット)として符号化され、コードユニット単位の単純なカウントでは各サロゲート半分を別々の文字として扱い過大カウントとなる。本ページでは Array.from(text) または Intl.Segmenter を使用してコードポイント(またはグラフェムクラスタ)を走査しており、ほとんどのユースケースにとって正しい文字の定義となっている。 有用な応用として、頻度分析は換字暗号(シーザー暗号、ヴィジュネル暗号、単純換字暗号)を解読する古典的手法である。英語の文字頻度分布はよく知られており(E、T、A、O、I、N、S、H、R の順に出現頻度が高い)、換字暗号は頻度分布を保存するため、最頻出の暗号文の文字はおそらく E に対応し、次に頻出の文字は T に対応するという推論が成り立つ。本ページは暗号解析ツールではなく教育ツールであるが、手法は同じである。 Unicode に関する注意点として、CJK 言語では文字頻度分布はコーパス(現代小説、古典詩、技術文書)や分析レベル(文字、単語、バイグラム、トライグラム)に依存する。現代中国小説の頻度分析と論語の頻度分析では異なる分布が得られる。本ページはコーパスに依存しないため、ユーザーは任意のテキストに対して実行できる。
- ハッシュテーブル(JS では Map): テキストを走査しカウントをインクリメント、カウント降順でソートしヒストグラムを描画。テキスト長に対して O(N) で、1文字あたりのコストは非常に高速
- サロゲートペア: BMP 外の文字(絵文字、稀少CJK)は2つの UTF-16 コードユニット。コードユニット単位の単純カウントでは過大カウントとなる。Array.from または Intl.Segmenter を使用
- 換字暗号の暗号解析: 英語の文字頻度は E、T、A、O、I、N、S、H、R(この順に頻度が高い)。換字暗号は分布を保存する
- CJK の頻度: コーパス(現代小説、古典詩、技術文書)と分析レベル(文字、単語、バイグラム)に依存。本ページはコーパスに依存しない
- 上位 N と尾部: 本ページはデフォルトで上位10〜20文字を描画し、残りを尾部バケットにまとめる。大量のテキストでパターンを発見するのに有用
- 大文字小文字の区別: 本ページは大文字小文字の区別/非区別トグルを提供。英語は通常大文字小文字を区別しない(E と e は同じ文字の異なる形)、CJK は常に大文字小文字を区別しない(大小の概念がない)
- 性能: カウントは O(N)、K 個の異なる文字のソートは O(K log K)。本ページは100万文字のテキストを1秒以内に処理でき、これが実運用のパターンである
使用例
英文の解析
入力 "hello world" → 結果: 'l' が 3 回 (27.3%)、'o' が 2 回 (18.2%)中国語テキストの解析
入力 "我爱中国我爱北京" → 結果: '我' と '爱' がそれぞれ 2 回 (25%)出現頻度分布の比較
英文: 'e' が最頻で約 12.7%、中国語: '的' が最頻で約 4%よくある質問
このアナライザは何をカウントしますか?
各ユニーク文字とその出現頻度を、頻度順にソートして表示します。暗号解析(英文ではE、T、A、Oから始まる予測可能な文字頻度がある)、テキストプロファイリング、コピペした文書内の予期せぬ文字を見つけるのに役立ちます。
空白文字もカウントされますか?
デフォルトではカウントされます。スペース、タブ、改行はそれぞれ独立した行として表示されます。印字可能な文字のみを対象にしたい場合は「空白を無視」を切り替えてください。自然言語のテキストでは、空白が最も多い「文字」となるのが一般的です(約20%)。
カウントは大文字と小文字を区別しますか?
デフォルトでは区別します。「A」と「a」は別々にカウントされます。「大文字小文字を無視」を切り替えると統合され、自然言語の解析ではこちらが一般的です。コードやハッシュの検査では大文字小文字の区別が重要です。
中国語、日本語、韓国語でも動作しますか?
はい。CJK文字はそれぞれ個別にカウントされます。中国語の段落の頻度表は、中国語に共通のアルファベットがないため、自然と数百の異なる文字が表示されます。グラフィムクラスタによるカウントでUnicodeを正しく処理します。
頻度をパーセンテージで見られますか?
はい。ページでは通常、カウント数と全体に対する割合を表示します。単純な換字式暗号を解読する際に、文字分布を既知の参照分布と比較するのに役立ちます。
なぜパーセンテージの合計が100%になりませんか?
丸め誤差です。各セルは指定された小数点以下の桁数に丸められるため、丸めたパーセンテージの合計は100%から数十分の一程度ずれることがあります。正確な合計を得るには、生のカウント数を合計してください。
テキストはアップロードされますか?
いいえ。頻度解析はブラウザ内で実行されます。貼り付けたテキストは送信されません。