文字及び記号の分かち書き単位での単語数No.04406
マボカル さん 04/07/10 02:57
 
みさなんこんにちは。マボカルと申します。以前質問いたしました
「04399 英語の単語数の数え方」と関連しますが、私の求めている
単語数と言いましょうか、語節数とも言いましょうか、分かち書き
された部分を一つの単位として数える場合に、簡単に計算するなら
秀丸の置換・正規表現で

[ \n]+

\0

という案がありますが、ファイルの内容によっては私の求めている
結果の数字にならない場合があります。

**【例1】*************************************************
1. Tour de France riders endured another miserable day in the saddle on Frid
ay with more rain and strong winds in a slippery sixth stage.[改行]
[EOF]
***********************************************************

例えば【例1】のような文では、スペースと改行の数が合わせて25に
なって、私の求める分かちを基準とする単語(語節)数の数(25)に
なりますが、

**【例2】*************************************************
1. Tour de France riders endured another miserable day in the saddle on Frid
ay with more rain and strong winds in a slippery sixth stage.[改行]
[改行]
[改行]
[改行]
[改行]
[改行]
[EOF]
***********************************************************

**【例3】*************************************************
1. Tour de France riders endured another miserable day in the saddle on Frid
ay with more rain and strong winds in a slippery sixth stage.[改行]
[改行]
[改行]
[スペース][スペース][改行]
[スペース][スペース][改行]
[改行]
[EOF]
***********************************************************

【例2】や【例3】のように改行だけの行が入っていたり、スペース
だけの行があると結果は(27)になり、逆に【例4】のように改行が
無く終っているものは(24)となります。

**【例4】*************************************************
1. Tour de France riders endured another miserable day in the saddle on Frid
ay with more rain and strong winds in a slippery sixth stage.[EOF]
***********************************************************

上に示した置換の正規表現ですから、当然の結果ですが、私の使って
いる韓国語のワードプロセッサーではどんな方法を取っても結果は
25 words と出ます。それこそ厳密に文字や記号のまとまりだけを
数えているというわけです。ちなみにマイクロソフトのワード2000でも
韓国語のワードプロセッサーと同じ結果がでます。

前回質問したときに、何を単語の基準とするかによって、回答が
変わってくるというご意見を頂きましたが、そういった厳密に分かち
書きされた文字および記号を一つの単位として数を数えたいというのが
私の求めている答えであり、基準であります。分かりやすく言えば、
ワードプロセッサーの単語数の計算方法と同じ結果を出すことです。

こういう場合はマクロで一度テキストを整形してから数を計算する
という方法しかないのでしょうか。できればあまりテキストはいじら
ないで計算したいのですが、可能でしょうか。それからやっぱり
ワードプロセッサーの単語数の計算方法は、何か特別な方法があるので
しょうか。

前回いろんな方からご意見頂いて、マクロを色々といじっていますが、
結局ワードプロセッサーの単語数の計算方法と全く同じになるように
改造することができませんでした。どなたかご教授お願いいたします。

[ ]
RE:04406 文字及び記号の分かち書き単位でNo.04407
山紫水明 さん 04/07/10 09:01
 
 マボカルさん,こんにちは。

 次のどれかでもだめでしょうか?

//--------------------------------------//
disabledraw;
gofiletop;
while( 1 ) {
  searchdown2 "[^  \n]+", regular;         //いずれか一つ
//    searchdown2 "[!-゚、-K]+", regular;   //
//  searchdown2 "[A-z0-9'-]+", regular;     //
    if( !result ) break;
    #i = #i + 1;
    wordright;
}
message str(#i);
endmacro;
//--------------------------------------//


     では, (^^)/~
                                        山紫水明(ユーザー)
                                        SANSHISUIMEI

[ ]
RE:04407 文字及び記号の分かち書き単位でNo.04408
マボカル さん 04/07/10 20:51
 
山紫水明さん

いつもお世話になっております。返事が遅れてすみません。

> 次のどれかでもだめでしょうか?
>
>//--------------------------------------//
>disabledraw;
>gofiletop;
>while( 1 ) {
>  searchdown2 "[^  \n]+", regular;         //いずれか一つ
>//    searchdown2 "[!-゚、-K]+", regular;   //
>//  searchdown2 "[A-z0-9'-]+", regular;     //
>    if( !result ) break;
>    #i = #i + 1;
>    wordright;
>}
>message str(#i);
>endmacro;
>//--------------------------------------//

上記のどの検索文でも目標とする結果にはなりません。ただ、昨日
投稿の後考えて、置換で

[^ \n]+
 ↓
\0

とすると、目標のワードプロセッサーと同じ目標の結果になりました。
それで

[^ \n]+

の部分を上のマクロに入れて

searchdown2 "[^ \n]+", regular;

として山紫水明さんのマクロ文を動かしても求める結果にはなりま
せん。置換ではちゃんと検索されているのに、マクロに入れると
その数が大幅に少なくなります。
上記の置換と方法で結果の数字が出るようにマクロを組むには
どうすればいいのでしょうか。

[ ]
RE:04408 文字及び記号の分かち書き単位でNo.04409
山紫水明 さん 04/07/10 22:52
 
 マボカルさん,こんばんは。

 まず,少し誤解しているのかもしれませんが,前提がよくわかりません。

> **【例1】*************************************************
> ay with more rain and strong winds in a slippery sixth stage.[改行]
> [EOF]
> ***********************************************************
>
> 例えば【例1】のような文では、スペースと改行の数が合わせて25に
> なって、私の求める分かちを基準とする単語(語節)数の数(25)に
> なりますが、

 この例ですと,実際に数えてみると単語数(語節)は12にしかなりません。25とい
うのはどういう数え方でしょうか。

> 上記のどの検索文でも目標とする結果にはなりません。ただ、昨日
> 投稿の後考えて、置換で
>
> [^ \n]+
>  ↓
> \0
>
> とすると、目標のワードプロセッサーと同じ目標の結果になりました。

 私も同じことをやってみましたが,12 になります。だけどこの数ではだめなん
ですよね?

> それで
>
> [^ \n]+
>
> の部分を上のマクロに入れて
>
> searchdown2 "[^ \n]+", regular;
>
> として山紫水明さんのマクロ文を動かしても求める結果にはなりま
> せん。

 やはり 12 になります。

> 置換ではちゃんと検索されているのに、マクロに入れると
> その数が大幅に少なくなります。

 置換でもマクロでも12という結果しか出ません。そしてそれは正しい数字だと
思います。
 どうもとんでもない誤解をしているのかもしれませんが。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:04409 文字及び記号の分かち書き単位でNo.04410
マボカル さん 04/07/10 23:28
 
山紫水明さん

たびたびお世話になります。

> まず,少し誤解しているのかもしれませんが,前提がよくわかりません。
>
>> **【例1】*************************************************
>> ay with more rain and strong winds in a slippery sixth stage.[改行]
>> [EOF]
>> ***********************************************************
>>
>> 例えば【例1】のような文では、スペースと改行の数が合わせて25に
>> なって、私の求める分かちを基準とする単語(語節)数の数(25)に
>> なりますが、
>
> この例ですと,実際に数えてみると単語数(語節)は12にしかなりません。25とい
>うのはどういう数え方でしょうか。

私の最初に出した例は以下の例文です。

**【例1】*************************************************
1. Tour de France riders endured another miserable day in the saddle on Frid
ay with more rain and strong winds in a slippery sixth stage.[改行]
[EOF]
***********************************************************

これだと、単語(語節)の数が25になりますよね。山紫水明さんの例文は
一部抜けていますね。

>> [^ \n]+
>>
>> の部分を上のマクロに入れて
>>
>> searchdown2 "[^ \n]+", regular;
>>
>> として山紫水明さんのマクロ文を動かしても求める結果にはなりま
>> せん。
>

山紫水明が試したところ、置換と同じ結果がでますか。私のマクロの
改造に間違いがあるのでしょうか?

searchdown2 "[^  \n]+", regular;

この部分を

searchdown2 "[^ \n]+", regular;

このように変えただけですが。

そこでRE:04399でIranoanさんがお作りになったマクロの検索部分を
変えて、以下のようにしたところ、求める結果になりました。

disabledraw;
openreg "CURRENTUSER", "Software\\Hidemaruo\\Maruo\\Env";
#reg_search=getregnum("SelectFound");
if(!#reg_search){
  writeregnum "SelectFound",1;
  envchanged;
}
closereg;
$search=searchbuffer;
#search=searchoption;
#orgX=x;
#orgY=y;
gofiletop;
searchdown2 "[^ \n]+",regular;
while(result){
  moveto selendx,selendy;
  #word_num=#word_num+1;
  finddown2;
}
moveto #orgX,#orgY;
message str(#word_num) + " words!";
if(!#reg_search){
  openreg "CURRENTUSER", "Software\\Hidemaruo\\Maruo\\Env";
  writeregnum "SelectFound",#reg_search;
  envchanged;
  closereg;
}setsearch $search, #search;

とりあえず上のマクロのような結果が出れば問題解決ですが、なぜ
山紫水明さんのマクロの検索部分を上のマクロのように [^ \n]+ と
しても同じ結果がでないのか、まだゆっくりとマクロ文を解析して
いないので分かりません。分からないというより、山紫水明さんが
置換と同じ結果が出たと言うのがどうしてか分かりません。
ちなみにチェックはMSワードなどといったワードプロセッサーの
単語数の数と同じか同じでないかという基準で調べています。また、
かなり大きなファイルでチェックしています。結果が3万単語といった
大きさです。

[ ]
RE:04410 文字及び記号の分かち書き単位でNo.04411
山紫水明 さん 04/07/11 08:28
 
 マボカルさん,こんにちは。

> 私の最初に出した例は以下の例文です。
>
> **【例1】*************************************************
> ay with more rain and strong winds in a slippery sixth stage.[改行]
> [EOF]
> ***********************************************************
>
> これだと、単語(語節)の数が25になりますよね。山紫水明さんの例文は
> 一部抜けていますね。

 最初,この部分がどうしても理解できませんでした。それで,Web の画面で見た
ら例題が確かに

1. Tour de France riders endured another miserable day in the saddle on
Friday with more rain and strong winds in a slippery sixth stage.[改行]
 [EOF]

となっていました。私の Telnet 接続だとなぜか一部脱落してしまっていました。
 それで上記例題で改めて試した結果は,
 最初の私のマクロの3つの方法,いずれも結果は 25 です。
 それから,マボカルさんが示された置換による方法,検索語を "[^ \n]+" に入
れ換える方法,Iranoan さんのマクロの一部改造,いずれもすべて結果は 25 で一
致します。

> また、かなり大きなファイルでチェックしています。結果が3万単語といった大
> きさです。

 これだけ大きなファイルのなると何か違いが出てくる可能性もあるのですが,上
記の例でも違いがあるのですね。マボガルさんの実験では 25 ではなくてどういう
数字になるのでしょうか?

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:04411 文字及び記号の分かち書き単位でNo.04412
マボカル さん 04/07/11 15:39
 
山紫水明さん

コメント有難うございます。

>それで上記例題で改めて試した結果は,
>最初の私のマクロの3つの方法,いずれも結果は 25 です。
>それから,マボカルさんが示された置換による方法,検索語を
>"[^ \n]+" に入れ換える方法,Iranoan さんのマクロの一部改造,
>いずれもすべて結果は 25 で一致します。

それぞれのマクロの結果は私の方でも同じ25の結果になります。

>記の例でも違いがあるのですね。マボガルさんの実験では 25 ではな
>くてどういう数字になるのでしょうか?

結果に違いが出るというのは、私がこの質問で最初に投稿した所にも
ありますように、

[ \n]+

\0

といった置換での置き換え結果の数字が、文書の内容が同じ(人間が
内容を理解する上で同じということ)であっても、改行が多く入ったり
すると、置換の結果が違ってくるということです。置換の検索語に
“[ \n]+”という文字を検索させているわけですから、改行が
多く入っていたりすると当然結果が違ってくるわけですよね。これは
投稿当初から私も理解していましたし、それならどういった方法で
ワードプロセッサーと同じような単語数の計算ができるのかという
ことをお伺いしていたわけです。

そこで今回、山紫水明さんとRE:04399でIranoanさんがお作りになった
マクロに手を加えて色々と実験しているわけですが、大きなファイル
になってもワードプロセッサーの単語数の計算方法と同じ結果になる
マクロはIranoanさんのほうです。例えば適当に www.yahoo.com 何でも
いいですがあるページを全体コピーして秀丸に貼り付けて、それぞれの
マクロで単語数を計算させてみても少しずつ違いが出ますが、どの
結果もワードプロセッサーと同じ結果になるものが、Iranoanさんの
マクロというわけです。

これは何を基準にして計算するかということに帰結するので、どの
マクロが良い悪いと言っているのではなくて、どのマクロがワード
プロセッサーの単語計算結果と同じになるのかということを言っている
わけです。この辺り、誤解なさって気分を害されてしまわないかと
心配です。

結局のところワードプロセッサーの単語計算方法の基準というものが
はっきりしないままこのように質問をしてしまい、混乱を招いている
感じがありますが、山紫水明さんとIranoanさんがお作りになった
それぞれのマクロをよく分析していくと、ワードプロセッサーの計算
方法というものが分かってくると思います。

ただ一つ不思議なのは英語のテキストではなく、韓国語のテキストの
場合、両マクロの結果にかなり差が出るということです。念のため
韓国語のテキスト及びファイル(Unicode)をアップしておきますが、

http://community.freechal.com/ComService/Activity/PDS/CsPDSContent.asp?GrpId
=2806427&ObjSeq=1&PageNo=1&DocId=27165794

例えば一つの段落だけ計算させてみても、Iranoanさんのマクロは
分かち書きされた一つ一つの韓国語の数が出るのに対して、山紫水明
さんのマクロは、何を基準に計算したのか想像もつかないような結果
が出ます。

【韓国語のあるテキストの文字数を計算】
Iranoanさんのマクロの結果 → 129(ワードプロセッサーの結果と同じ)
山紫水明さんのマクロの結果→ 4 (検索語 "[^ \n]+")
                4 (検索語 "[!-゚、-K]+")
                0 (検索語 "[A-z0-9'-]+")

テキストが韓国語なので、"[!-゚、-K]+" や "[A-z0-9'-]+" といった
検索語ではそういった結果になるのは、検索語を見てもすぐに分かり
そうですが、検索語を "[^ \n]+" にしても結果が「4」とかになるのは
どうしてなんだろう??と不思議でしょうがありません。もっとマクロ
文を詳しく分析してみます。上のマクロ類は使われる文字によっても
結果がかわってくるのでしょうかね?

ちなみに私の使用環境は韓国語版XP+秀丸英語版407です。

[ ]
RE:04412 文字及び記号の分かち書き単位でNo.04413
山紫水明 さん 04/07/11 21:24
 
 マボカルさん,こんばんは。

> マクロに手を加えて色々と実験しているわけですが、大きなファイル
> になってもワードプロセッサーの単語数の計算方法と同じ結果になる
> マクロはIranoanさんのほうです。

 すでに問題は解決しているわけですよね。

> この辺り、誤解なさって気分を害されてしまわないかと心配です。

 ご心配なく! それほどヤワでもありませんから(^^;

 英文についていえば,たとえば,
 How are you ?
  Fien.
の場合,疑問符を単語と数えると,語数は5,除外すると4となります。
 私のマクロで使っている wordright 文はこの疑問符をスキップしてしまいま
す。Iranoan さん方式ではこれも単語に計算しますから,ここで差が出ます。多
分,ワープロも疑問符なども1語に数えていると思います。

> ただ一つ不思議なのは英語のテキストではなく、韓国語のテキストの
> 場合、両マクロの結果にかなり差が出るということです。念のため
> 韓国語のテキスト及びファイル(Unicode)をアップしておきますが、
>
> http://community.freechal.com/ComService/Activity/PDS/CsPDSContent.asp?
> GrpId=2806427&ObjSeq=1&PageNo=1&DocId=27165794
>
> 例えば一つの段落だけ計算させてみても、Iranoanさんのマクロは
> 分かち書きされた一つ一つの韓国語の数が出るのに対して、山紫水明
> さんのマクロは、何を基準に計算したのか想像もつかないような結果
> が出ます。

 これも同じく,wordright に原因があります。wordright はハングル文字は全
部飛ばしてしまうようです。Iranoan さん方式では,ヒットした語の最後にカー
ソルを移動して次の検索を始めますので,そのような問題は生じません。

 次のマクロは置換方式によるものです。
//--------------------------------------//
replaceallfast "[^ \n]+", "\\0", regular;
#r = result;
message str(result);
disabledraw;
while( #r ) {
    undo;
    #r = #r - 1;
}
endmacro;
//--------------------------------------//
//4行目以降はファイル変更を元に戻す処理です。少し時間がかかるので,なく
//てもかまいません。

 これで上記のファイルの全部の語数を数えてみると,2714 という結果が出ます。

> ちなみに私の使用環境は韓国語版XP+秀丸英語版407です。

 環境の違いの影響は何ともわかりません。

     では, (^^)/~
                                        山紫水明
                                        SANSHISUIMEI

[ ]
RE:04413 文字及び記号の分かち書き単位でNo.04414
マボカル さん 04/07/11 22:26
 
山紫水明さん

ありがとうございます。

>私のマクロで使っている wordright 文はこの疑問符をスキップして
>しまいます。Iranoan さん方式ではこれも単語に計算しますから,
>ここで差が出ます。多分,ワープロも疑問符なども1語に数えている
>と思います。

なるほど。

>wordright はハングル文字は全>部飛ばしてしまうようです。Iranoan
>さん方式では,ヒットした語の最後にカーソルを移動して次の検索を
>始めますので,そのような問題は生じません。

マクロ文の分析まで有難うございます。

> 次のマクロは置換方式によるものです。
>//--------------------------------------//
>replaceallfast "[^ \n]+", "\\0", regular;
>#r = result;
>message str(result);
>disabledraw;
>while( #r ) {
>    undo;
>    #r = #r - 1;
>}
>endmacro;
>//--------------------------------------//
>これで上記のファイルの全部の語数を数えてみると,2714 という
>結果が出ます。

私のほうで任意のファイルを色々試したところ、どれもワープロと
同じ結果がでました。これで疑問は全て解決ですね。お見事!

>> ちなみに私の使用環境は韓国語版XP+秀丸英語版407です。
>
> 環境の違いの影響は何ともわかりません。

時々上手く動かないときは色々な原因を考えてしまいがちです。今回の
場合は、単純にマクロ文の単語計算方式の違いによる結果の差だった
わけですね。長々とお付き合い頂き本当に有難うございました。

[ ]