![見出し画像](https://assets.st-note.com/production/uploads/images/103437713/rectangle_large_type_2_07a5fb0e9727fe22499ca4fd3b2885dc.png?width=1200)
20年ぶりにWordファイルの横断検索をやってみた
こんにちは。
大量の仕様書がWordファイルで作られていて、その中から探し出すという必要性に迫られました。いまは令和も5年。いまの時代、どうやって全文検索できるのでしょうか?
昔はどうしていたか
私が20代前半の頃、平成10年~15年の頃の話ですが、全文検索システム Namazuを使って、Wordファイルの横断検索をしていました。HP-UXにApacheを導入して、CGIとして動かしていたと思います。HP-UXとかCGIとか懐かしいですね。
久々に探してみたら、まだNamazuのサイトが残っていました。さすがにもう開発は停止しているようです。
http://www.namazu.org/index.html.ja
Microsoft OfficeのWordやExcelなどを使い出したのは、私は社会人になってからですが、とにかく職場では不評でした。バイナリファイルなので、grepを使って検索はできないし、diffで差分も取れません。使えないじゃん!
Officeファイルの横断検索をしていたのは、このときぐらいで、それから久しくはやっていなかったと思います。
いまでも全文検索できるよね?
あれから20年が過ぎました。調べてみると、いろいろな方法でOfficeファイルの横断検索ができるようになっていました。
エクスプローラーで検索する
Windowsのエクスプローラーで、ファイルの中身も含めて検索することができます。ただし、フォルダーオプションの設定が必要です。
![](https://assets.st-note.com/img/1681903128002-IfeCzqNGz8.jpg)
エクスプローラーの右上の欄から検索ができます。
![](https://assets.st-note.com/img/1681903296423-XFUpZNJY2v.jpg?width=1200)
このやり方は、Windows標準機能なのですが、とにかく検索が遅く、使いにくいです。インデックスを作ると高速になるらしいのですが、インデックスの設定がなぜかうまくいかなくて、このやり方は断念しました。
バイナリファイルをgrepする
FavBinEditというバイナリエディタがあり、最近愛用しています。このソフトにはgrep機能が搭載されており、バイナリファイルを検索することができるのです。
バイナリエディタ | FavBinEdit (wabiapp.com)
Wordファイルの拡張子が.docのものは、文字コードがUTF-16(LE)で文字列が保存されています。
![](https://assets.st-note.com/img/1681903607592-3QYpfK0X4c.jpg?width=1200)
![](https://assets.st-note.com/img/1681903717561-QioidiliLJ.jpg?width=1200)
Wordファイルの拡張子が.docxのものは、このやり方での検索は難しいです。.docxはZIP圧縮されているので、一度展開(解凍)する必要があります。文字コードはUTF-8で、文字列が格納されています。
MiGrep2を使う
MiGrep2というツールと、xdoc2txtというツールを組み合わせることで、WordやExcelなどのOfficeファイルに加えて、PDFファイルも全文検索できます。
https://www.vector.co.jp/soft/winnt/util/se515999.html
http://ebstudio.info/home/xdoc2txt.html
最初に設定が必要ですが、一度設定すれば、あとは楽に検索ができるようになります。
![](https://assets.st-note.com/img/1681904162311-So26304FQV.jpg)
![](https://assets.st-note.com/img/1681904215610-XKOtZ1b5QZ.jpg?width=1200)
![](https://assets.st-note.com/img/1681904249924-H3uDtmU3AU.jpg?width=1200)
このやり方だと、大量のOfficeファイルがあっても高速に検索してくれました。とてもありがたいですね。
素敵なソフトウェアを作ってくださった作者様に感謝します。
おわりに
MiGrep2はヘルプによるとDelphiで作ってあるようです。懐かしいですね。私が大学の授業ではじめて学んだプログラミング言語が、Pascalでした。その後、個人的にBorlandのDelphiコンパイラを買って、独学していた時期もありました。
あれからもうPascalを使うことはなくなり、言語文法も忘れてしまいましたが、あのとき学んだプログラミング体験は、いまの自分にも活かされています。
いいなと思ったら応援しよう!
![Yutaka Hirata](https://assets.st-note.com/production/uploads/images/167301772/profile_030bfcb1b25366bde515a1b0851ab5c3.jpg?width=600&crop=1:1,smart)