限りなき知の探訪

45年間、『知の探訪』を続けてきた。いま座っている『人類四千年の特等席』からの見晴らしをつづる。

軟財就計:(第4回目)『私のソフトウェア道具箱(その 4)』

2022-02-27 20:26:15 | 日記
前回

事務作業では、書類の検索が非常に重要な仕事だ。書類には紙のものも多いが、最近では電子媒体の書類の方が圧倒的に多いだろう。長いファイル名だけでは、内容を思い出すのは難しいが、Google検索でも意図しないファイルが検索に多くひっかかって困っている人は多いことだろう。この問題の根本的理由は、検索に使う複数の単語はファイル全体に散らばっているのではなく、局所的であるという特性にある。局所的とは、40文字(せいぜい60字)程度の範囲をいう。このような検索プログラムが必要なのだが、残念な事に一般的には存在していない。

こう言うと、「いやいや、UNIXにはgrep という検索プログラムがあるよ」としたり顔にいう御仁もおられよう。確かにプログラミング開発の場合、UNIXの grep を使って検索をするのは初歩の初歩といえる。ただ、この場合、特徴的なのはプログラムが対象なので、【行番号】が判明することが非常に重要なのだ。少し専門的になるが grep では「正規表現」が使えるので、いろいろなパターンを検索条件として指定することができる。ただ、この時、問題となるのは単語の出現順序だ。つまり、 Aの後にBが現れるケースと、Bの後にAが現われるケースは違う検索条件となることだ。もっとも、両方のケースを探そうとすると、2つの grep 検索をパイプで連結すればよい。しかし、3つ以上の場合はそれだけの段数のパイプ連結が必要となり、検索はできるとはいうものの、実際問題としては、結構厄介だ。

問題はこれだけでない。プログラミングの場合は、1行だけの検索で済んだが日本文ではこの技は使えないことが多い。というのは、日本語では文字の途中で改行されると grep では検索できないからだ。それで、ワードのように、見かけ上は何行かに渡って分割されているように見えても、内部では一節が連続している、そのような文章なら検索はできるが、検索ワードは一つしか指定できない。

結局、市販のツールでは「複数行にまたがる文章に複数の指定ワードで検索する」ことができない。それで、私は新たな自作プログラムを開発して解決した。以下、自作のプログラムを xge という名前で呼ぶ。

1.xge では、ファイル内の連続の2行を内部的(メモリー)上では連結して1行にする。
2.その1行に対して複数の文字があるかを検索する。例:「特定の場所 一覧に できる」
3.このようにすると、行末で改行されていても検索することができる。
4.ただし、2行では足りないケースもあるので、オプションで3行も可能とする。また逆に連結したくない時もあるので、オプションで通常の grep のように検索対象を1行にすることも可能である。

この検索プログラム xge はC言語で書いてあるので、実行は極めて速い。それだけでなく、ディレクトリートリ―をリカーシブ(recursive)に辿ることができるので、特定のフォルダーだけでなく、その下にぶらさがっている全てのフォルダーのファイルを対象に検索することができる。このプログラムがあるおかげで、フレーズをうろ覚えでもファイルを見つけることができる。更に、この xge (実際には、このバリエーションの xgf)の優れた点は、テキストファイルだけでなく、マイクロソフトの他のファイル形式(doc, docx, xls, xlsx, ppt, pptx)やPDFファイルも内部的にテキストファイルに変換して、テキスト検索できることだ(内部的には、xdoc2txt.exe を使っている)。

ここで、一つ問題となるのは、検索順序である。Aの後にBがでるケースも、 Bの後にAがでるケースのどちらも検索結果として出てくる。もし、検索件数が少ないのなら、目視チェックで十分だが、多い場合は、この検索結果に対して、順序どおり検索するプログラム(mgrep と呼ぶ)を実行する。

いづれにせよ、幾つかのプログラムを組み合わせることで、初期の目的が達成された。 

【xge のオプション】

続く。。。)
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする