とりあえず、作ってみよう (文字列サーチモード編)


ここでは、テキストデータの識別データ作成について、説明します。

テキストデータとは、読んで字のごとくテキスト情報のみで構成されたファイル
のことです。

一般に、Web文書を構成するhtml,cgi,cssファイルやiniなどの設定ファイル、
もちろん普通の文章もテキストデータです。

また、この文字列サーチモードではSHIFT-JISのみをサポートします。
端的にいうと、Windowsで表示可能な文字しかサポートしません。
(EUC,JIS,UNICODE等はサポートしてません。後述する拡張機能で各自作成し対応
することは勿論可能ですが・・)


今回は、「html」の識別データ作成を例にとって説明していきます。

えー、まず前章のバイナリモードと違いバイナリエディタなどは必要ありません。
この点は簡単ですね〜。


ですが、今回の相手は「テキストファイル」です。
テキストファイルの場合、一般的にバイナリデータほどフォーマットがちゃんとして
なかったり、また特定のデータ位置に常に同じヘッダーがあるということも少ないでしょう。

たとえば、今回説明する「html」で言えば、ファイルによって<html>があったり
なかったり、<title>があったりなかったりします。

この当たりを考慮して、どうデータを作るかが今回のポイントになります。


では、まず「html」を表示させた時のメッセージ登録から行います。


その前に・・
データセットを開いていない場合、「DataCreater」を起動しデータセットを
新規作成してください。


やり方は、
---------------------------------------------------------------------------------------
1.まずは、「Data Creater.exe」をダブルクリックしプログラムを起動してください。

2.メニューの「ファイル(F)」にある「データセットの新規作成(N)」をクリックしてください。
(infomation:作成途中のデータセットを編集する場合は、"データセットを開く"を選択します)

3.データセット名、作者名、保存先を任意に設定してください。 *編集機能の都合上、作者名は出来る限り毎回同じのものにしてください。異なる名前にした場合、 以前の名前で作成したデータは編集出来ない場合があります。作者名は1度入力済みであれば、 次回以降は自動で入力されます。  設定が終わったら、「OK」を押してダイアログを閉じましょう。  上手く行ってれば、設定した保存位置にデータセット名のフォルダが作成されているはず  です。 --------------------------------------------------------------------------------------- 以上の手順を行うと「識別ベースライン」というウィンドウが表示されます。 また、今回データセット名は「str_t1」としました。 さて、ではメッセージを登録しましょう。 メニューの「編集(V)」から、「メッセージ編集(M)」を選択してください。 「メッセージ編集」というウィンドウが出るので、ここで識別時に表示させる メッセージを登録します。 "新規"と書かれているボックスに、表示させたい拡張子を入力します。ここでは「HTML」と入力 しました。また、、"メッセージを入力してください"と書かれているダイアログに、識別時に表示 させるファイル説明を入力します。 ここでは「Web文章 (Hyper Text Markup Language))」と入力することにします。
上の画像と同じように設定し終わったら、「閉じる」ボタンを押してこのウィンドウを閉じましょう。 次に、HTMLに含まれる特長的な文字列の情報(<html>など)を登録します。 実際には、これらはバイナリデータでいうヘッダと厳密には意味合いが違いますが、 バイナリデータ同様、「ヘッダー定義作成」で作成を行います。 ただし、作成方法自体は「バイナリデータモード」とはかなり違いますので、 注意してください。 メニューの「編集(V)」から「ヘッダー定義作成(H)」を選択します。 今回は、とりあえず実際にhtmlの識別を設定した画面を先に見てみてください。
まず、画面一番上「モード」の項目では"文字列サーチ"を選択します。 次に、固定バイナリと文字列サーチで共通の項目「両モード共通」を設定します。 「ヘッダータイプ」では、ファイルの先頭と終端のどっちを調査するか設定します。 ここで、HOFはファイルの先頭を、EOFはファイルの終端を表します。 ファイル「html」つまりWeb文章の場合、先頭の方に<html>などのヘッダーがあり、 その後に、ページ本文などが随時書き加えられていきます。 なので、ここではHOFを選んでおけば間違いないでしょう。 (もちろん、EOFを基準にして</html>や</body>を探すパターンもありですが・・) 「基準点からのバイト」では、先ほどの「ヘッダータイプ」でHOFを選んだ場合、ファイルの 先頭から調べるというのが普通でしょう・・。なのでここは、0でいいです。 (不覚にも!?EOFを選択したチャレンジャーは、速やかに-1024を入力すべし) と、ここまでで基本的な設定は終了です! 次は、いよいよ「文字列サーチ」固有の設定をします。 「検索対象のバイト」。これは文字通り先ほど設定した「基準点」および「基準点からのバイト」 から何バイトの文字列を検索対象にするかを設定します。 つまり、検索対象の文字列が<html>であった場合、この「検索対象のバイト」に1024を 設定すると、先頭から1024バイト中に<html>が含まれるファイルを正常に「htmlである」 と識別することが出来ます。 今回は、対象がhtmlであるので、先頭1024バイト(1KB)ぐらいを調べれば問題がありません。 (だいたい、この辺にヘッダーが集中してるので・・) なのでここでは、1024と入力しています。 次の「論理式」というのはとりあえず飛ばして・・。 まずは、「検索文字列」を設定しましょう。 検索文字列には、識別させたいファイルに必ず、もしくはほぼ含まれる文字列を指定します。 この検索文字列の設定は先ほど飛ばした「論理式」によって、ある程度カスタマイズ可能なので ここでは、「html」ファイルに含まれそうな文字列(タグ)をいくつか選んで入力しています。 それぞれ、 (a)<html> (b)<body> (c)<title> (d)<br> (e)<hr> と入力しました。 そしたら、この検索文字列がどういう組み合わせで、現われたら対象ファイルをhtmlとみなすか を「論理式」で設定します。 この「論理式」とは「論理演算」などで一般的に用いる「論理式」と同じものです。 プログラムをやったことのある人なら、おなじみですね。 そうでない人は、初めて聞く言葉かも知れません。 「論理式」とは、「数式」のように大きな値や少数などを求めるものではなく、 条件に当てはまるか?当てはまらないか?YESかNOか?ということだけを判断するために使います。 なので、ここでは「html」と判断するか?しないか?の式を作ります。 また、この文字列サーチモードでは、「or(|)」演算と「and(&)」演算が使えます。 or演算とは"どちらかの条件を満たす場合"、and演算とは"両方の条件を満たす場合" です。 今回この「論理式」には、「a|b&c|d&e」と指定しています。 ここで、aやbなどの数字は先ほど指定した検索文字列 (a)<html> (b)<body> (c)<title> (d)<br> (e)<hr> を示します。 これは、意味に分解すると 対象の文字列に、 <html>が含む場合 または(or) <body>と<title>の両方(and)を含む場合 または(or) <br>と<hr>両方(and)を含む場合 に、初めて対象ファイルを目的のファイルとみなすことを示します。 前述のバイナリモードであれば、定義したヘッダー領域に対しての結果 だけを判断しましたが、このモードでは、「論理式」が成り立つことに よって初めて、このファイルが目的のファイル(html)であると見なします。 最後にもう1つ注目すべき項目があります。 それが「小文字⇔大文字変換」です。 今回の「html」の例のように、ファイル形式によっては文字列の大文字と小文字を 同じ意味として扱う場合があります。 例えば、それは<html>と<HTML>の違いです。 これは、htmlファイルでは同じ事として扱われますね! そのような場合に、「小文字⇔大文字変換」を「する」に設定すると、対象文字列 中に<html>と<HTML>のどちらがあっても同じものと見なされるので、 検索文字列の設定では、<html>の設定だけで済みます。 ただし、「小文字⇔大文字変換」と書いてある通り、 この機能を使う場合、かならず小文字で検索文字列を入力してください。 以上でヘッダー定義作成は終わりですので、上の画像のように入力したら 「作成/更新」ボタンを押してダイアログを閉じましょう。 次にこのヘッダー情報と、拡張子の情報を関連付け、識別の順序に加えます。 「識別ベースライン」というウィンドウが出ていますか? (閉じてしまったら、メニューの「編集(V)」から「識別ベースライン(B)」を選択して 開きましょう) 識別処理の1番目に、htmlの識別処理を追加します。 "データNo"と書かれている列(000000〜順に数字が入っている列)の "000000"をダブルクリックしてみましょう。 「データ編集 (データNo.000000)」というウィンドウが出たと思います。
ここで、先ほど編集したヘッダー定義と拡張子の情報を関連付けることになります。 ヘッダー定義、拡張子情報とも、ここまでの手順では少ししか作成してないので、 画面上では、すでにあっています。 ヘッダー定義は、先ほどヘッダー情報を編集した際に表示されたIDが表示されています。 「IDなんか見てなかったよ!」という人は、データ編集ウィンドウの上方にある 「編集」ボタンを押してみましょう。さっき設定した"<html>","<title>"などの 表示が再び出たと思います。 また、表示させる拡張子とメッセージのほうも、「html」用に作成したものに なっています。 なので、この2つの設定はOKです。 しかし、1つOKじゃない項目が・・(^^; しかもOKじゃないのを誇示するかのように、「N/A」となっている項目があります。 それが、「IDキーの取得状態」です。 「取得」ボタンを押し、バイナリモードの時同様実際のファイル(html)を開くことによって この状態を「OK」にすることが出来ます。 ただし、ここで注意点があります。 「バイナリモードの時」、この開くファイルは正しいヘッダー情報を持ったファイルでなくては いけませんでした。 では、「文字列サーチモード」の時は何を条件にするかというと・・。 そうです。ヘッダー定義作成の時に設定した、「論理式」の条件を満たすファイルを開かなくては なりません。 今回の、htmlのヘッダー定義は「html」「body」などの文字列でした。 htmlの場合、あまりこれに当てはまらないっていうのも少ないと思うので適当に条件に当てはまる ファイルを探し、学習させます。。 なにかしら、ファイルを開くと「IDキーの取得状態」が「取得済」に変わったと思います。 そしたら「OK」ボタンを押して、"データ編集"ダイアログを閉じましょう

「識別ベースライン」にhtmlの項目が追加されれば終了です。 「ファイル(F)」から「データセットの構築(S)」を選択し、現在の識別処理を保存しましょう。 これで、HTMLを識別できるデータセットの出来上がりです。 「作成したデータセットを使ってみよう!」 で実際に、htmlが識別できるか試してみましょう。
作成したデータセットを使ってみよう!