フォルダ内にある html ファイルの文字数/単語数を調べたい

★ぴったりの回答には 500pt ~★

■やりたいこと
あるフォルダに html ファイルが大量にあります。100 以上と考えてください。各ファイルの文字数/単語数を調べて一覧にしたいと思います。

たとえば、Word VBA でフォルダ内の *.html を 1 つずつ開いてワードカウントの情報 (単語数、文字数など各種の情報) を取得して Word 内の表に並べていくとか、Excel シートに並べていくとか・・・

質問などあればコメント欄にどうぞ
よろしくお願いします。

Win XP Home, Word 2003, Excel 2003

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2009/02/27 19:21:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:airplant No.1

回答回数220ベストアンサー獲得回数49

ポイント800pt

WSHが一番適切と思いましたので、スクリプトを作ってみました。

Option Explicit

Const wdStatisticWords = 0
Const wdStatisticLines = 1
Const wdStatisticPages = 2
Const wdStatisticCharacters = 3
Const wdStatisticParagraphs = 4
Const wdStatisticCharactersWithSpaces = 5
Const wdStatisticFarEastCharacters =6

Dim strArg
Dim objFSO, objWord, objDoc, objRng
Dim objFolder, objFile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWord = CreateObject("Word.Application")
objWord.Visible = True  ' 表示が煩わしいならコメントにする

Wscript.Echo "ファイル名,文字数,単語数"
For Each strArg In WScript.Arguments
    Set objFolder = objFSO.GetFolder(strArg)

    For Each objFile In objFolder.Files
        ' htmも許すときは適宜変更ください
        If Lcase(Right(objFile.Name, 5)) = ".html" Then
            Set objDoc = objWord.Documents.Open(objFile.Path)
            Set objRng = objWord.ActiveDocument.Content
            ' ディレクトリ不要なら objFile.PathをobjFile.Nameに変更ください
            Wscript.Echo objFile.Path & "," & _
                objRng.ComputeStatistics(wdStatisticCharacters) & "," & _
                objRng.ComputeStatistics(wdStatisticWords)
            objWord.Documents.Close
            Set objDoc = Nothing
            Set objRng = Nothing
        End If
    Next
Next

objWord.Quit

●使い方

  • 上のファイルを適当な名前で保存します(例.wordinfo.vbs)
  • コマンドプロンプトで動かします(アクセサリ→コマンドプロンプト)

cscript wordinfo.vbs . aaaa >output.csv

wordinfo.vbsの後ろには、調べたいディレクトリを書きます(複数可)。

カレントなら「.」、相対なら「aaaa」のように、当然「C:\hproot」のように絶対パスもOKです。

最後に「>output.csv」のようにリダイレクトしてファイルに落としています。始めは、この「>output.csv」をつけなければ画面に表示されますので、その後でリダイレクトしてファイルに落とすのがいいかも知れません。

  • csvを開いて先頭の何行かのゴミを削れば一覧表の完成です。
  • 後はお好みに応じてパラメータを増やしたり、wordのちかちかをなくすれば、あっという間にファイルが作れます。
id:Nigitama

ありがとうございます。

柔軟に変更ができそうなコードで助かります。

ざっと試しましたが期待通りの結果になっています。

ほかの文字カウント情報も出せるようですし、

ちょっと手を加えれば別のファイル形式にもいけそうです。

大変助かりました。ありがとうございます。

2009/02/27 11:04:12

その他の回答2件)

id:airplant No.1

回答回数220ベストアンサー獲得回数49ここでベストアンサー

ポイント800pt

WSHが一番適切と思いましたので、スクリプトを作ってみました。

Option Explicit

Const wdStatisticWords = 0
Const wdStatisticLines = 1
Const wdStatisticPages = 2
Const wdStatisticCharacters = 3
Const wdStatisticParagraphs = 4
Const wdStatisticCharactersWithSpaces = 5
Const wdStatisticFarEastCharacters =6

Dim strArg
Dim objFSO, objWord, objDoc, objRng
Dim objFolder, objFile

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objWord = CreateObject("Word.Application")
objWord.Visible = True  ' 表示が煩わしいならコメントにする

Wscript.Echo "ファイル名,文字数,単語数"
For Each strArg In WScript.Arguments
    Set objFolder = objFSO.GetFolder(strArg)

    For Each objFile In objFolder.Files
        ' htmも許すときは適宜変更ください
        If Lcase(Right(objFile.Name, 5)) = ".html" Then
            Set objDoc = objWord.Documents.Open(objFile.Path)
            Set objRng = objWord.ActiveDocument.Content
            ' ディレクトリ不要なら objFile.PathをobjFile.Nameに変更ください
            Wscript.Echo objFile.Path & "," & _
                objRng.ComputeStatistics(wdStatisticCharacters) & "," & _
                objRng.ComputeStatistics(wdStatisticWords)
            objWord.Documents.Close
            Set objDoc = Nothing
            Set objRng = Nothing
        End If
    Next
Next

objWord.Quit

●使い方

  • 上のファイルを適当な名前で保存します(例.wordinfo.vbs)
  • コマンドプロンプトで動かします(アクセサリ→コマンドプロンプト)

cscript wordinfo.vbs . aaaa >output.csv

wordinfo.vbsの後ろには、調べたいディレクトリを書きます(複数可)。

カレントなら「.」、相対なら「aaaa」のように、当然「C:\hproot」のように絶対パスもOKです。

最後に「>output.csv」のようにリダイレクトしてファイルに落としています。始めは、この「>output.csv」をつけなければ画面に表示されますので、その後でリダイレクトしてファイルに落とすのがいいかも知れません。

  • csvを開いて先頭の何行かのゴミを削れば一覧表の完成です。
  • 後はお好みに応じてパラメータを増やしたり、wordのちかちかをなくすれば、あっという間にファイルが作れます。
id:Nigitama

ありがとうございます。

柔軟に変更ができそうなコードで助かります。

ざっと試しましたが期待通りの結果になっています。

ほかの文字カウント情報も出せるようですし、

ちょっと手を加えれば別のファイル形式にもいけそうです。

大変助かりました。ありがとうございます。

2009/02/27 11:04:12
id:keino No.2

回答回数204ベストアンサー獲得回数11

ポイント20pt
  1. ubuntuなどLive CD(ハードディスクにインストールしなくても動くLinux)でboot
  2. 目的のファイルがあるディレクトリに cd
  3. wc * > result.txt
  4. XPを起動しなおして result.txt から Excelファイルに貼り付ける

というやり方は、きっと質問者の好みには合いそうもないな

id:Nigitama

ありがとうございます。

ご指摘の通り、確かに合いそうもないですね。

2009/02/27 11:01:22
id:kaerx No.3

回答回数78ベストアンサー獲得回数3

以下のソフトはどうでしょう。

JW - ファイルの行数、単語数、文字数を数えて、標準出力に出力

http://www.vector.co.jp/soft/dos/util/se000851.html

Text Analyzer

テキストの簡単な解析(文字数,行数,英単語数,原稿用紙枚数のカウント等)

http://www.vector.co.jp/soft/win95/util/se144972.html

id:Nigitama

ありがとうございます。

手軽にできそうなのはよかったんですが、

html ファイルですので、タグの情報などはカウントしたくありません。

ソースの状態ではなく、ブラウザ上(ワード上でも可)で表示される文字数/単語数が知りたかったのです。ご紹介いただいたソフトで実現可能かどうかちょっとわかりませんが、先によりよい回答をいただいていますのでそちらで対応しようと思います。

2009/02/27 11:00:38
  • id:pahoo
    「単語数」というのは英語(半角英数字)の単語のことですか、それとも日本語の単語のことですか?
  • id:Nigitama
    pahoo さんいつもありがとうございます。

    「単語数」とは半角英数の単語です。
    ワードの「ツール」→「文字カウント」で表示される情報ごっそりとつかめればベストです。
    http://www5c.biglobe.ne.jp/~yamag/data/Soft/VBAProgramingTIPS.html#WordCount
  • id:airplant
    Nigitamaさん、大量のポイントといるかありがとうございました。
    お役に立てたようで嬉しいです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません