[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: Word Count?



山本と申します.

In message <uu2i57kmo.wl@xxxxxxxxxxxxxxxxxxxxxxxx>,
Mito <mit@xxxxxxxxxxxxxxx> writes:
> 瀧山> 例えば
> 瀧山> -----
> 瀧山> abstract{
> 瀧山> This paper descrive foo is dummy.
> 瀧山> But, How funny it is.
> 瀧山> }
> 瀧山> このペーパーは、テストです。
> 瀧山> でもfooって一体だれが言い出したんだろう。
> 瀧山> うーん???
> 瀧山> -----
> 
> 瀧山> アブストラクトは何word、日本語部分は何文字、と言った具合です。
> 
> これで 11 word になればいいんですよね?
> こちらでは M-x how-many RET \w+ RET で 11 になりますが...。

context-free のような単語は 1 word でしょうから,
M-x how-many RET [-\w]+ RET
などとすれば word 数のカウントになるでしょうか.

なんにしても,word 数や字数を数える状況は,精神的に追い詰められてい
るときが(ぼくの場合)多いので,疑心暗鬼になってしまって,カーソルを
左に動かしながら数えていました.アブストラクトの修正のたびにそれを
やるのが疲れてしまって,emacs にカーソルを動かして数えてもらうこと
にしたのが,つぎの恥ずかしい emacs-lisp です.

リージョンを指定して,M-x wc-region で line 数, word 数,字数を数え
ます.ただしリージョンの最後が改行またはスペースである必要がありま
す.

(defun wc-region (start end)
  (interactive "r")
  (save-excursion
    (save-restriction
      (let ((c 0) (l 0) (w 0) (in-word nil) c-after)
	(goto-char start)
	(while (< (point) end)
	  (setq c-after (char-after (point))) ; no need (point) if emacs 20
	  (if (= c-after ?\n)
	      (setq l (1+ l)))
	  (if (or (= c-after ?\n) (= c-after ? ) (= c-after ?\C-i))
	      (if in-word
		  (setq w (1+ w) in-word nil))
	    (setq c (1+ c) in-word t))
	  (forward-char))
	(message (format "%d lines, %d words, %d characters" l w c))))))

# 一つのファイルやバッファにたくさんの修正バージョンのアブストラク
# トを並べているので,リージョン内のみの word 数を数えることができ
# ることは必須でしょう.
-- 
 kouji