人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

たぶんVBscriptについて質問です。
下記のようなテキストファイルを解析・集計したいと考えています。

2/20 10:00 A社訪問
2/20 11:00 B社入電
2/20 12:00 今期進捗についてMTG
2/21 12:00 C社訪問
2/21 15:00 D社来社
2/21 16:00 来期目標についてMTG

下記2点の要件が必要です。

1)頻出語を、「よく出る順」に並べる
2)日付でもフィルタリングできるようにする

期間ごとの頻出語推移なんかも追っていきたいと考えて
要件が相当ややこしくなりました。

これVBSで作れるんでしょうか?
もっといい方法はあるのでしょうか?

ちなみに社内の業務ログと連携させるので、パッケージソフトは使いづらいです。

●質問者: にらたま
●カテゴリ:コンピュータ インターネット
✍キーワード:00 MTG VBS VBScript ソフト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ardarim
●35ポイント

マイクロソフトが提供しているLogParser 2.2を使ってみてはどうでしょうか。

任意の形式のログファイルを入力し、任意の形式(CSVなど)を出力できる、汎用のツールです。

集計はSQLライクの文法で行えます。


以下、C:\sample.txtにテストデータを入れた場合のサンプルです。


1)頻出語を、「よく出る順」に並べる

サンプル

C:\Program Files\Log Parser 2.2>logparser "SELECT Field3 AS 単語, COUNT(Field3) AS 摘要 FROM c:\sample.txt GROUP BY Field3 ORDER BY COUNT(Field3) DESC" -i:TSV -iSeparator:space -nSep:1 -fixedSep:ON -nFields:3 -headerRow:OFF -stats:OFF -o:CSV

実行例

摘要,頻度
A社訪問,3
今期進捗についてMTG,1
C社訪問,1
D社来社,1
来期目標についてMTG,1
B社入電,1

2)日付でもフィルタリングできるようにする

サンプル(2/20以前の日付を抽出)

C:\Program Files\Log Parser 2.2>logparser "SELECT Field1 AS 日付,Field2 AS 時刻,Field3 AS 摘要 FROM c:\sample.txt WHERE TO_TIMESTAMP(Field1,'m/d')<=TO_TIMESTAMP('2/20','m/d')" -i:TSV -iSeparator:space -nSep:1 -fixedSep:ON -nFields:3 -headerRow:OFF -stats:OFF -o:CSV

実行例

日付,時刻,摘要
2/20,10:00,A社訪問
2/20,11:00,B社入電
2/20,12:00,今期進捗についてMTG

参考:

Log Parserの概要 ? @IT

◎質問者からの返答

できました、ありがとうございます!

ただ。。コマンドプロンプト不慣れなのですが、出力結果をテキストか何かに保存するにはどうしたらよいのでしょうか?バッチで出来れば大変助かります。

それにしても凄いですね、LogParser。勉強して使いこなします。


2 ● airplant
●35ポイント

まず前提があります。

1)頻出語を、「よく出る順」に並べる

とは、自分で単語を定義するのですよね?

自動で単語を分析するには、相当大掛かりなプログラムを作らなくてはいけませんので、ここでは、自分で単語を定義するという前提で進めます。

>これVBSで作れるんでしょうか?

VBSでも他言語でも作れないことはないと思いますが、Excelで十分と思います。

きっと最後にExcelでグラフ化などするのでしょうから。

実はVBSだと結構なコーディング量になるので、Excelでも目的が達成できるならいいかと思った次第です。

WSHでScripting.Dictionaryを使った日付つきソートとかできればカッコウ良さそうですが。→作ってみてはいかが? アルゴリズムは簡単ですよ。


●考え方

単に文章中の単語有無をcountifで見て、それを集計する

Step1.テキストファイルを読み込む

A B
1 2008/2/20 10:00 A社訪問
2 2008/2/20 11:00 B社入電
3 2008/2/20 12:00 今期進捗についてMTG

Step2.分析がしやすいようにセルに名前をつけておく

例えば、行$1:$3を選択して「昨日」と右上にある名前ボックス欄に入れ、行$4?$7は「今日」にしておく。単位が大きいなら「上半期」など。


Step3.同一ブック内の新規シートに次のように式を入れる(下のシートをそのままExcelへ貼り付ける)

A B C D
1 キー 昨日 今日 Sheet1!b:b
2 MTG =COUNTIF(INDIRECT(word),"*" & key & "*") =COUNTIF(INDIRECT(word),"*" & key & "*") =COUNTIF(INDIRECT(word),"*" & key & "*")

名前付けを行う(新規シートのほう)

$A:$A key

$1:$1 word


Step4.A列に単語を入れて、式を下にドラッグすれば単語出現数の表は完成

A B C D
1 キー 昨日 今日 Sheet1!b:b
2 MTG 1 2 3
3 訪問 1 1 2
4 来期 0 2 2
5 A社 1 0 1
6 B社 1 0 1
7 C社 0 1 1
8 D社 0 1 1
9 入電 1 0 1
10 今期 1 0 1

Step5.全体の頻度順で見たいならD列を降順ソート。

なお、D列のb:bは見たい範囲を指定すればいいので、b1:b100のように指定可。


上の方法では、あくまで分析メッシュがあまり多くないことを想定しています。

もし、1日毎のグラフなどを作るのであれば、今度は下記のように単語を横にして後で日付で統合させれば、活用できそうです。

A B C D E F G
1 日付 内容 A社 B社 C社 D社 訪問
2 2008/2/20 10:00 A社訪問 =IF(ISERROR(FIND(word,contents)),"",1) 同左・・・

名前付け:

$B:$B contents

$1:$1 word

◎質問者からの返答

ご丁寧に、大変ありがとうございます。

ご説明が不足していましたが

業務が定型化していない状態での調査なので単語は定義できてません。。

が、ある程度傾向が見えてきたら現場で運用しやすいexcelに切り替えると良いかと思いました。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ