「文字カウント」の版間の差分

提供:MeryWiki
ナビゲーションに移動 検索に移動
(前版で追記した文章を一部改訂(容量→バイト数))
(不具合修正。分類「段落」と「会話」の正規表現を変更。)
1行目: 1行目:
<div style="float:right">__TOC__</div>
<div style="float:right">__TOC__</div>


選択範囲or文書全体の字数・容量を算出するマクロです。<br>Shift_JIS/UTF-16 (BOM無)/UTF-8 (BOM無) でのバイト数を一度に確認できます。
選択範囲or文書全体の字数・容量を算出するマクロです。<br>
Shift_JIS/UTF-16 (BOM無)/UTF-8 (BOM無) でのバイト数を一度に確認できます。


[[ファイル:CharacterCounter.png|border]]
[[ファイル:CharacterCounter.png|border]]


【注意点】
==注意点==
* 改行はすべて CR+LF として計算します(Mery の仕様上、改行コードを判別できないため)。
* 改行はすべて CR+LF として計算します(Mery の仕様上、改行コードを判別できないため)。
* Shift_JIS は Microsoft コードページ 932 (CP932) / Windows-31J の仕様に準拠しています。
* Shift_JIS は Microsoft コードページ 932 (CP932) / Windows-31J の仕様に準拠しています。
* Unicode 対応は一部に留まります。
* Unicode 対応は一部に留まります。
** サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
** サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
** 結合/合成文字や異体字セレクタは、以下の理由により対応保留中です。現状ではMery と同じ仕様でカウントされます。
** 結合文字や異体字セレクタ、零幅空白や Unicode 制御文字 (LRO/RLO など) は考慮していません。これらは Mery と同じ仕様でカウントされます。
*** 他の字と組み合わせて1文字を構成する性質上、総数には含めない、という対応で良いのか否か。
*** 日本語環境では出番の無さそうなインド系文字の結合/合成文字にもきちんと対応すべきか否か。
** ゼロ幅空白や制御文字 (LRO/RLO など) は、対応未定です。
* カウントする文字数や文字種が増えるほど処理に時間がかかります(作者の環境では、100万字の処理に約1秒かかりました)。<br>ステータスバーに処理に要した時間が表示されますので参考にしてください。
* カウントする文字数や文字種が増えるほど処理に時間がかかります(作者の環境では、100万字の処理に約1秒かかりました)。<br>ステータスバーに処理に要した時間が表示されますので参考にしてください。


20行目: 18行目:


* 拙作ですがアイコンファイルを同梱してあります。<br>Mery の My Macros フォルダにアイコンファイル (文字カウント.ico) を配置すれば、ツールバーにアイコンが読み込まれます。
* 拙作ですがアイコンファイルを同梱してあります。<br>Mery の My Macros フォルダにアイコンファイル (文字カウント.ico) を配置すれば、ツールバーにアイコンが読み込まれます。
==更新履歴==
[[ファイル:文字カウント.zip]]
* <b>2014/02/17</b>
** アウトラインやアウトプットにフォーカスがある場合、結果が 0 になってしまう不具合を修正。<br>Document ではなく Editor.ActiveDocument を利用して文書を取得するようにした。
** 分類「段落」の正規表現を変更。 /^(?= [^ \s]<span style="background:#fcc;">+</span>)/gm → /^(?= [^ \s])/gm
** 分類「会話」の正規表現を変更。 /^(?=「.<span style="background:#fcc;">+</span>」$)/gm → /^(?=「.<span style="background:#fcc;">*</span>」$)/gm
* <b>2014/02/01</b>
** 初版公開。


==文字種別一覧==
==文字種別一覧==
デフォルトで定義されている文字種は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。
デフォルトで定義されている文字種は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。


<b style="background:#fcc;"> 赤地 </b> の項目は、デフォルトで表示結果に採用されている項目です。<br>「総字数」=<b style="background:#fcc;"> 総数 </b>、「字数」=<b>総数</b> から <b style="background:#fcc;"> 改行 </b> と <b style="background:#ccf;"> 空白 </b> を引いた数、となっています。
<b style="background:#fcc;"> 赤地 </b> の項目は、デフォルトで表示結果に採用されている項目です。<br>
「総字数」=<b style="background:#fcc;"> 総数 </b>、「字数」=<b>総数</b> から <b style="background:#fcc;"> 改行 </b> と <b style="background:#ccf;"> 空白 </b> を引いた数、となっています。


{| class="wikitable" style="text-align:center;"
{| class="wikitable" style="text-align:center;"
35行目: 43行目:
|-
|-
! colspan="3" style="background:#fcc;" | 段落
! colspan="3" style="background:#fcc;" | 段落
| /^(?= [^ \s]+)/gm ||  || 全角空白1字下げで始まる行
| /^(?= [^ \s])/gm ||  || 全角空白1字下げで始まる行
|-
|-
! colspan="3" | 会話
! colspan="3" | 会話
| /^(?=「.+」$)/gm ||  || 「 で始まり 」 で終わる行 (会話文)
| /^(?=「.*」$)/gm ||  || 「 で始まり 」 で終わる行 (会話文)
|-
|-
! colspan="3" | 英単
! colspan="3" | 英単
143行目: 151行目:
|}
|}


<!-- * SP=Surrogate Pair の略。CC=Combining Character の略。VS=Variation Selector の略。 -->
* Shift_JIS では、<b style="background:#fcc;"> MS拡張 </b> に分類される文字は「機種依存文字」に該当するため、Windows 以外では文字化けする可能性があります。
* Shift_JIS では、<b style="background:#fcc;"> Uni </b> に分類される文字を正常に保存することができません。保存を強行した場合は、よく似た文字や ? の文字に変換されます。
* Shift_JIS では、<b style="background:#fcc;"> Uni </b> に分類される文字を正常に保存することができません。保存を強行した場合は、よく似た文字や ? の文字に変換されます。
* Shift_JIS では、<b style="background:#fcc;"> MS拡張 </b> に分類される文字は「機種依存文字」に該当するため、Windows 以外では文字化けする可能性があります。


==文字種別について==
==文字種別について==
158行目: 165行目:
! key(添字) !! value(値) !! 説明
! key(添字) !! value(値) !! 説明
|-
|-
! re !! 正規表現<br>(RegExp)
! re !! 正規表現<br>RegExp
| カウントしたい文字を正規表現で記述します。<br>たとえば全角カタカナなら、<code style="color:#c00;">re:/[ァ-ヶ]/g</code> という具合です。<br>利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。
| カウントしたい文字を正規表現で記述します。<br>たとえば全角カタカナなら、<code style="color:#c00;">re:/[ァ-ヶ]/g</code> という具合です。<br>利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。
|-
|-
! type !! 文字列<br>(String)
! type !! 文字列<br>String
| 文字種の分類名です。複数設定したい場合はカンマで区切ります。<br>たとえば、<code style="color:#c00;">type:"総数,全角,カナ"</code> という具合です。<br>この場合、type["総数"], type["全角"], type["カナ"] の変数にカウントが加算されます。
| 文字種の分類名です。複数設定したい場合はカンマで区切ります。<br>たとえば、<code style="color:#c00;">type:"総数,全角,カナ"</code> という具合です。<br>この場合、type["総数"], type["全角"], type["カナ"] の変数にカウントが加算されます。
|-
|-
! sjis<br>utf16<br>utf8 !! 数値<br>(Number)
! sjis<br>utf16<br>utf8 !! 数値<br>Number
| Shift_JIS/UTF-16/UTF-8 での1文字 (1カウント) あたりの容量(バイト)設定です。<br>省略した場合は 0 とみなされます。
| Shift_JIS/UTF-16/UTF-8 での1文字 (1カウント) あたりの容量(バイト)設定です。<br>省略した場合は 0 とみなされます。
|}
|}


==表示結果について==
==表示結果について==
表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果の定義」の部分で定義されています。<br>ソースコードを単純化すると、以下のような処理になっています。
表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果の定義」の部分で定義されています。<br>
ソースコードを単純化すると、以下のような処理になっています。
<source lang="javascript">
<source lang="javascript">
var result = (※出力用のテキストを生成);
var result = (※出力用のテキストを生成);
Alert(result);
Alert(result);
</source>
</source>

2014年2月17日 (月) 19:07時点における版

選択範囲or文書全体の字数・容量を算出するマクロです。
Shift_JIS/UTF-16 (BOM無)/UTF-8 (BOM無) でのバイト数を一度に確認できます。

CharacterCounter.png

注意点

  • 改行はすべて CR+LF として計算します(Mery の仕様上、改行コードを判別できないため)。
  • Shift_JIS は Microsoft コードページ 932 (CP932) / Windows-31J の仕様に準拠しています。
  • Unicode 対応は一部に留まります。
    • サロゲートペアは、Mery では仕様上2文字とカウントされますが、このマクロでは1文字とカウントします。
    • 結合文字や異体字セレクタ、零幅空白や Unicode 制御文字 (LRO/RLO など) は考慮していません。これらは Mery と同じ仕様でカウントされます。
  • カウントする文字数や文字種が増えるほど処理に時間がかかります(作者の環境では、100万字の処理に約1秒かかりました)。
    ステータスバーに処理に要した時間が表示されますので参考にしてください。

ソースコード

ダウンロード→ 文字カウント.zip

  • 拙作ですがアイコンファイルを同梱してあります。
    Mery の My Macros フォルダにアイコンファイル (文字カウント.ico) を配置すれば、ツールバーにアイコンが読み込まれます。

更新履歴

ファイル:文字カウント.zip

  • 2014/02/17
    • アウトラインやアウトプットにフォーカスがある場合、結果が 0 になってしまう不具合を修正。
      Document ではなく Editor.ActiveDocument を利用して文書を取得するようにした。
    • 分類「段落」の正規表現を変更。 /^(?= [^ \s]+)/gm → /^(?= [^ \s])/gm
    • 分類「会話」の正規表現を変更。 /^(?=「.+」$)/gm → /^(?=「.*」$)/gm
  • 2014/02/01
    • 初版公開。

文字種別一覧

デフォルトで定義されている文字種は下表のとおりです。分類は Shift_JIS (CP932) を基準にしています。

 赤地  の項目は、デフォルトで表示結果に採用されている項目です。
「総字数」= 総数 、「字数」=総数 から  改行  空白  を引いた数、となっています。

分類
type
該当文字 /正規表現/
re
容量 (byte)
sjis/utf16/utf8
備考
階層 /^(?=\.)/gm ピリオドで始まる行 (階層付きテキスト)
段落 /^(?= [^ \s])/gm 全角空白1字下げで始まる行
会話 /^(?=「.*」$)/gm 「 で始まり 」 で終わる行 (会話文)
英単 /\b(?=\w)/g 0-9A-Za-z_ で構成される単語
総数
制御 改行 CR+LF
CR または LF
2 / 4 / 2
1 / 2 / 1
※仕様上、改行は CR+LF とみなす
ASCII制御文字
空白 タブ /\t/g 1 / 2 / 1 ASCII制御文字
/[\x00-\x1F\x7F]/g 1 / 2 / 1 上記以外のASCII制御文字
半角 空白 半空 / /g 1 / 2 / 1 ASCII文字
数字 半数 /[0-9]/g 1 / 2 / 1 ASCII文字
英字 半英 /[A-Za-z]/g 1 / 2 / 1 ASCII文字
記号 /[!-/:-@[-`{-~]/g 1 / 2 / 1 空白・英数以外のASCII文字
半カナ /[。「」、・ー゙゚]/g 1 / 2 / 3
仮名 /[ヲ-ッア-ン]/g 1 / 2 / 3
全角 空白 全空 / /g 2 / 2 / 3
数字 全数 /[0-9]/g 2 / 2 / 3
英字 全英 /[A-Za-z]/g 2 / 2 / 3
仮名 かな /[ぁ-ん]/g 2 / 2 / 3
カナ /[ァ-ヶ]/g 2 / 2 / 3
ギリシャ /[Α-ΡΣ-Ωα-ρσ-ω]/g 2 / 2 / 2 ※SJISではシグマの語末形 ς を扱えない
キリル /[ЁА-Яа-яё]/g 2 / 2 / 2 ※Unicodeでは Ё ё の配置が異なる
記号 /[´¨±×÷°§¶]/g 2 / 2 / 2 UTF-8で2バイトの全角記号(8字)
/[、。, (中略) †‡◯]/g 2 / 2 / 3 UTF-8で3バイトの全角記号(138字)
罫線 /[─│┌ (中略) ┥┸╂]/g 2 / 2 / 3 罫線素片(32字)
漢字 第一 /[亜唖娃 (中略) 湾碗腕]/g 2 / 2 / 3 JIS第一水準漢字(2965字)
第二 /[弌丐丕 (中略) 瑤凜熙]/g 2 / 2 / 3 JIS第二水準漢字(3390字)
MS拡張 /[纊褜鍈 (中略) 鶴鸙黑]/g 2 / 2 / 3 IBM拡張文字(漢字360字)
/[①-⑳Ⅰ (中略) ¦'"]/g 2 / 2 / 3 NEC特殊/IBM拡張文字(記号等87字)
MS外字 /[\uE000-\uE757]/g 2 / 2 / 3 Microsoft ユーザー定義外字領域(1880字)
/[\uF8F0-\uF8F3]/g 1 / 2 / 3 ※SJIS保存時、0xA0/FD/FE/FF に変換される
Uni /[¢£«¬¯µ·¸»]/g 2 / 2 / 2 ※SJIS保存時、よく似た全角文字に変換される
/ゔ/g 2 / 2 / 3 ※SJIS保存時、全角カナの ヴ に変換される
/[\u0080-\u07FF]/g 1? / 2 / 2 上記以外のUTF-8で2バイトの文字
SP /[\uD800-\uDBFF][\uDC00-\uDFFF]/g 2? / 4 / 4 サロゲートペア (U+10000-10FFFF)
/[\u0800-\uFFFF]/g 1? / 2 / 3 上記以外のUTF-8で3バイトの文字
  • Shift_JIS では、 MS拡張  に分類される文字は「機種依存文字」に該当するため、Windows 以外では文字化けする可能性があります。
  • Shift_JIS では、 Uni  に分類される文字を正常に保存することができません。保存を強行した場合は、よく似た文字や ? の文字に変換されます。

文字種別について

文字種の分類は、ソースコードの最初のほうにある「検索リスト」の部分で定義されています。

var list = [
{sjis:数値,utf16:数値,utf8:数値, type:"文字列", re:正規表現},
 中略
];
key(添字) value(値) 説明
re 正規表現
RegExp
カウントしたい文字を正規表現で記述します。
たとえば全角カタカナなら、re:/[ァ-ヶ]/g という具合です。
利用できる正規表現は、実行環境 JScript (JavaScript) の仕様に依存します。
type 文字列
String
文字種の分類名です。複数設定したい場合はカンマで区切ります。
たとえば、type:"総数,全角,カナ" という具合です。
この場合、type["総数"], type["全角"], type["カナ"] の変数にカウントが加算されます。
sjis
utf16
utf8
数値
Number
Shift_JIS/UTF-16/UTF-8 での1文字 (1カウント) あたりの容量(バイト)設定です。
省略した場合は 0 とみなされます。

表示結果について

表示される結果は、ソースコードの最後のほうにある「ここから~ここまで結果の定義」の部分で定義されています。
ソースコードを単純化すると、以下のような処理になっています。

var result = (出力用のテキストを生成);
Alert(result);
スポンサーリンク