英語の単語数の数え方No.04399
マボカル さん 04/07/01 01:13
 
会議室の皆様こんにちは。今回は英語など、分かち書きされた文の
文字数ではなく、単語数の数え方のについてご意見を伺いにきました。

文字数をカウントするマクロはマクロライブラリーにもありますが、
スペースで分かち書きされた単語をカウントするマクロが無いので、
自分で組もうとしていますが、アイディアが単純で大きなファイルを
扱う場合、非常に使いにくそうな気がします。

そのアイディアというのが、分かち書き、つまり単語と単語の切れ目
となるスペースを改行していって、単語数の計算の対象外となる改行
のみの行を削除した後、全体の行数を数えさせて、それを単語数と
みなすといったアイディアです。

ワードプロセッサーなどには単語数を計算してくれるものもあります
が、あのようなものではどういった動きで単語数を計算しているので
しょうか。まぁ、今扱っているファイルに関してはそれほど大きな
ファイルではないので、今のアイディアでも何とかいけそうですが、
何かご指摘の点があればご教授いただきたいです。

[ ]
RE:04399 英語の単語数の数え方No.04400
Iranoan さん 04/07/01 04:59
 
 マボカルさん今日は、Iranoan です。
> 会議室の皆様こんにちは。今回は英語など、分かち書きされた文の
> 文字数ではなく、単語数の数え方のについてご意見を伺いにきました。
<snip>
> スペースで分かち書きされた単語をカウントするマクロが無いので、
> 自分で組もうとしていますが、アイディアが単純で大きなファイルを
> 扱う場合、非常に使いにくそうな気がします。
 もしこの様にスペースか改行で分かち書きされているなら、連続する空白、
改行と句読点の数を数えればよいので、末尾のマクロで数えられると思います。
 何を単語とするかによって、回答が変わっては来るのですが...。
//--------------------------------------------------------------------
disabledraw;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
#reg_search=getregnum("SelectFound");
if(!#reg_search){
  writeregnum "SelectFound",1;
  envchanged;
}
closereg;
$search=searchbuffer;
#search=searchoption;
#orgX=x;
#orgY=y;
gofiletop;
searchdown2 "([ \\t 。、\\.,]+|[^ \\t 。、\\.,]$)",regular;
while(result){
  moveto selendx,selendy;
  #word_num=#word_num+1;
  finddown2;
}
moveto #orgX,#orgY;
message "単語の数は "+str(#word_num)+" 個です。";
if(!#reg_search){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}setsearch $search, #search;

[ ]
RE:04400 英語の単語数の数え方No.04401
ENCODINGSHIFTJIS さん 04/07/01 10:40
 
> 何を単語とするかによって、回答が変わっては来るのですが...。

アイデアは同じく、全置換の置換個数ダイアログを使う方法
区切る文字列のマッチを恒等置換する。
置換、正規表現

[ ,".]+

\0

行選択範囲もカウントできます。

[ ]
RE:04401 英語の単語数の数え方No.04402
マボカル さん 04/07/01 16:37
 
Iranoanさん・ENCODINGSHIFTJISさん

ご親切にご回答本当に有難うございます。なるほど、やっぱりスマート
な方法がありますね。大変勉強になりました。

>何を単語とするかによって、回答が変わっては来るのですが...。

そうですね。私の求める単語数の計算方法(あるワードプロセッサー
での計算方法と同じ結果)では、Iranoanさんのマクロの場合、少し
大目の結果になって、ENCODINGSHIFTJISさんの場合はほぼ同じ結果に
なりますが、ファイルによっては多少差が出るのもありました。いずれ
にしても、何を単語とするかが重要なので、私の使っているワード
プロセッサーの単語算出基準をよく見て、マクロをいろいろといじって
みたいと思います。ちなみに私の使っているワードプロセッサーと
いうのが韓国語のワープロでして、韓国語の単語数計算の為に今回
質問させていただきました。

よいアイディアを頂けて本当に助かっています。有難うございました。


[ ]
RE:04400 英語の単語数の数え方No.04403
Iranoan さん 04/07/01 17:47
 
 今日は、Iranoan です。自己フォローです。
 表題に「英語」とありますね。
> searchdown2 "([ \\t 。、\\.,]+|[^ \\t 。、\\.,]$)",regular;

searchdown2
  "([a-zA-Z-]+-\\n[a-zA-Z-]+|[a-zA-Z][a-zA-Z'.-]*|[0-9][0-9,.]*)",
  regular;
とすれば、分かち書きをしていなくとも、ハイフネーションが起きていたり、
U.S.A や don't といった表記も一語となる、少しはまともな数え方になりま
す。あとは用途に合わせて正規表現を書き換えてください。
 ##U.S.A や don't って、本当に一語と数えて良いのだろうか(^^;。

[ ]
RE:04403 英語の単語数の数え方No.04404
マボカル さん 04/07/01 18:12
 
Iranoanさん

ありがとうございます。

> 表題に「英語」とありますね。

厳密に言えば、先ほどのコメントにも残したように「韓国語」ですが、
英語も韓国語も分かち書きをする言語なので、基準としてはとにかく
何でもいいから文字なり記号なりが入っていて、それがスペースなり
改行なりで区切られているのが、一つの単語とみなしています。

ですからここでは「単語」というより「語節」という表現が相応しい
かと思います。

> ##U.S.A や don't って、本当に一語と数えて良いのだろうか(^^;。

ですから例えば「■∵ΘÅ♪∇」といった意味の無い文字列があっても
それがスペースなり改行なりで区切られていれば、そこまでを一単語
(厳密には一語節)とみなせばいいということです。現在目標の結果に
なるようにマクロ改造中!

[ ]