解析対象と20万コードポイント上限
このツールは,入力した一つのテキストから,連続する文字または単語の並びであるN-gramと,指定した対象語の近くに現れる単語を集計します.比較用の文書集合や外部コーパスは使わず,現在の入力内で数えた回数と割合を表示する仕組みです.Nは1,2,3,4から選び,N-gramは上位50件,共起語は上位30件を一覧化します.
入力上限は20万Unicodeコードポイントです.テキストエリアへ上限を超える内容を入れると,JavaScriptのArray.fromで先頭から20万コードポイントまでに切り詰め,超過部分は状態へ保持しません.バイト数,UTF-16コードユニット数,画面上の書記素数を基準にした上限ではないため,絵文字や結合文字を多く含む文章では,ほかの文字数カウンターと値が一致しない場合があります.
解析は入力や設定の変更に応じてブラウザのメイン処理上で再計算します.専用のバックグラウンド処理へ分離していないため,上限内であっても端末性能,トークン数,Nの値によって操作感が変わります.まず短い範囲で分割や除外語の結果を確認し,必要な範囲だけを入力すると読み取りやすくなります.
文字単位N-gramとUnicodeコードポイント
文字単位では,入力をArray.fromでUnicodeコードポイントの配列へ変換します.この方法はサロゲートペアで表される一部の文字を一要素として扱えますが,人が画面上で一文字と認識する書記素を判定するものではありません.結合用の濁点,異体字セレクター,肌色修飾子,ゼロ幅接合子で結ばれた絵文字などは複数要素に分かれることがあります.
したがって,文字N-gramの結果はコードポイント列として解釈する必要があります.
N=1なら各コードポイント,N=2なら隣接する二要素,N=4なら連続する四要素を,先頭から一つずつ位置をずらして数えます.総N-gram数は,分割後の要素数がN以上なら要素数からNを引いて1を足した値です.各候補の割合は,その候補の出現回数を総N-gram数で割って百分率にした単純な構成比です.確率モデルや将来の文字列予測を作る処理ではありません.
除外語を有効にした文字単位解析では,カンマ区切りで指定した各文字列を入力から先に削除してからN-gramを作ります.削除位置の前後が連結するため,元の文中では隣接していなかった文字からN-gramが生まれる場合があります.句読点や空白を除いた傾向を見る用途には便利ですが,原文の境界を保ちたい場合は除外を無効にして比較してください.
TinySegmenterによる単語分割と除外語
単語単位ではTinySegmenterで日本語テキストを分割し,各トークンの前後空白を除いてから空文字を取り除きます.さらに除外語が有効な場合は,カンマ区切りの一覧と完全一致したトークンを除外します.部分一致や大文字小文字の正規化,活用語の原形化,同義語の統合は行いません.英語,日本語,数字,記号が混在する文章では,実際の分割結果を画面で確かめることが重要です.
TinySegmenterは軽量な単語境界推定器であり,辞書情報を表示する形態素解析器ではありません.品詞,読み,原形,固有表現,係り受け,文の意味は取得しません.専門用語,商品名,人名,新語,URL,記号を含む語では,利用者が期待するまとまりと異なる場合があります.
そのため,単語N-gramの結果を言語学的に確定した語の一覧として扱うのではなく,本ツールの分割規則で得られたトークン列の集計として扱います.
単語単位のN-gramは,分割済みトークンを連続するN個ずつ取り出し,表示時に空白で結合します.N=1は個々のトークンの頻度,N=2〜4は連続する短い並びを確認する用途に向きます.長い定型表現が欲しい場合でもNは4までであり,任意長のフレーズ抽出や文境界を考慮した構文解析には対応していません.
N-gram頻度,構成比,上位50件とCSV
文字単位と単語単位のどちらでも,各N-gramをMapへ数え上げます.並べ替えは出現回数の多い順で,同数の場合は日本語ロケールを指定した文字列順を使います.画面には先頭50件だけを表示するため,51件目以降の候補は一覧とCSVへ含まれません.表示される割合は,上位50件の合計を分母にするのではなく,切り捨て前の全N-gram位置数を分母にしています.
上位項目の割合を足しても100%にならないことがあります.
ストップワードの有無を切り替えると,文字単位では指定文字列の削除後,単語単位ではトークンの完全一致除外後に再集計します.異なる設定の結果を比較するときは,単位,N,除外語一覧を揃えなければ同じ基準になりません.入力内容と設定値を記録しておくと,同じ条件で再確認しやすくなります.
CSV出力は現在選択しているタブの上位結果を対象にします.N-gram側は順位,N-gram,出現回数,割合を,共起側は順位,共起ワード,近傍に現れた対象位置数,テキスト全体での出現回数,近傍出現率を出力します.表計算ソフトで開いた後も,割合の定義や上位件数を併記しておくと誤解を減らせます.
共起語と0〜100%の近傍出現率
共起語の集計はTinySegmenterで分割し,除外語を適用した単語トークン列を使います.対象語は前後空白を除いた後,トークンと完全一致する位置だけを探します.対象語が分割結果に存在しない場合は結果を表示しません.対象語の部分文字列,活用形,同義語をまとめる処理ではないため,期待する結果がないときは単語分割と除外語一覧を見直してください.
対象語が現れた各位置について,選択した前後2,3,5,8語の範囲を調べます.一つの対象位置の範囲内に同じ近傍語が複数回現れてもSetで重複を除き,その対象位置では1回として数えます.対象語自身は近傍候補から外します.ある近傍語が見つかった対象位置数を対象語の総出現回数で割り,100を掛けた値が近傍出現率です.例えば対象語が10回あり,そのうち6か所の周辺に候補語が一度以上あれば60%です.
この定義により値は0〜100%に収まります.候補語が一つの窓に何回繰り返されたかは率へ加算されません.順位は近傍出現率,近傍に現れた対象位置数,テキスト全体の出現回数,文字列順の優先で決まり,上位30件を表示します.窓を広げるほど偶然近くに入る語も増えるため,複数の幅で結果を比べ,文章構造と合わせて読む必要があります.
指標の限界と結果の読み方
本ツールが示すのは,一つの入力テキスト内における出現回数,単純な構成比,独自定義の近傍出現率です.Jaccard係数,tf-idf,相互情報量,埋め込みベクトル,意味的類似度は計算しません.外部文書との比較,検索需要,検索順位,SEO効果も評価しません.頻度が高いことは文章上の重要性や品質を直接意味せず,近傍出現率が高いことも因果関係や意味的関連を証明しません.
文字単位では書記素の分断,単語単位ではTinySegmenterの境界推定,除外語では文字列削除または完全一致除外が結果へ影響します.共起分析は文,段落,係り受けを認識せず,指定した距離だけを見ます.長い文書を部分ごとに比較する場合は,入力範囲,単位,N,窓幅,除外語を同じにし,表示上限で下位候補が省かれる点も考慮してください.
結果は,繰り返し表現を探す,表記の偏りを確認する,対象語の周辺候補を眺めるといった探索の手掛かりとして利用できます.最終的な文章評価では,元の文脈を読み直し,必要に応じて目的に合う専用の言語解析手法と照合してください.