※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

xyzzy + xdoc2txt.l + Hyper Estraier + HE-grep.l


Hyper Estraier で抽出したファイルに対してgrep


[2006-02-20]更新 [2005-12-30]

準備

xdoc2txt

xdoc2txt v1.27
 pdf, word, excel などの各種バイナリ文書からテキストを抽出する。
cryptlib.dll Ver1.00
 パスワード無しで暗号化されたPDFを検索・表示するための追加DLL

3つのファイルををパスの通った所に置く。
  • xdoc2txt.exe(2008-02-05 現在 ver.1.27)
  • zlib.dll(xdoc2txt に同梱)
  • cryptlib.dll

xdoc2txt.l

xdoc2txt.l v0.8
  xdoc2txt を利用して pdf, word, excel などの各種バイナリ文書からテキストを
 抽出、xyzzy で表示する。

grep-dialog , ggrep -dialog で 直接 grep が可能。要 encap.l

1.~/site-lisp 配下にxdoc2txt.lをコピー、必要に応じてbyte-compile
2.~/site-lisp/siteinit.l または ~/.xyzzyに アーカイブ同梱の .xyzzy.sample の
  記述を転記、必要に応じてカスタマイズ(xdoc2txtのオプションはreadme.txt参照)

(require "xdoc2txt")

xdoc2txt.l ver.0.7 以前では、システムのTempフォルダに一時ファイルが残ります。
デフォルトでは、
"C:\Documents and Settings\user\Local Settings\Temp\~xyzfnk(数字).tmp"
ver.0.8 以降で削除されるようになりました。(2006-06-10 追記)

Hyper Estraier

http://hyperestraier.sourceforge.net/
インデックスを使った全文検索システム

Windows版バイナリパッケージ(hyperestraier-1.x.x-win32.zip)を DL、
パスの通ったディレクトリに以下の8個のファイルをコピー
(xdoc2txt.exe , zlib.dll は Hyper Estraierパッケージにも同梱されているが、
最新版を別個に展開してあればそれ以外の6個で OK)

estcmd.exe
estraier.dll
estxfilt.bat
libiconv-2.dll
mgwz.dll
pthreadGC2.dll
qdbm.dll
regex.dll

HE-grep.l

 http://homepage2.nifty.com/kimagurenixyzzy/HE-grep.html
 Hyper Estraierで抽出したファイルやバイナリ文書から抽出したテキストに対して
 grep をかける。

1.~/site-lisp 配下にHE-grep.lを保存、必要に応じてバイトコンパイル
2.~/site-lisp/siteinit.l または ~/.xyzzyに 以下を記述

;HE-grep をロード
(require "HE-grep")

設定は HE-grep.l を参考に(自分の環境に合わせて)
;検索結果表示を別フレームにしない
(setq *use-frame-HE-grep* nil)

;検索対象をリスト形式で指定
(setq *HE-command-list*
'(
  (
   "pdf(&P)"           ;ポップアップメニューに表示する名前
   "E:/pdf/casket"     ;インデックスを保存してあるディレクトリ
   "estcmd search -sf -ic CP932 -vh -max -1"
                       ;estcmd search コマンドをオプション付きで指定
   "E:/pdf"            ;インデックス作成対象のディレクトリ
  )
  (
   "doc(&D)"
   "C:/Documents and Settings/user/My Documents/casket"
   "estcmd search -sf -ic CP932 -vh -max -1"
   "C:/Documents and Settings/user/My Documents"
  )
  (
   "html(&H)"
   "E:/HTML/casket"
   "estcmd search -sf -ic CP932 -vh -max -1"
   "E:/HTML"
   )
))

;インデックスを作成
(setq *HE-make-index-command-list*
'(
 ;インデックス化(gather)、存在しない文書情報の削除(purge)、
 ;最適化(optimize)を実行する(PDFの例)
 (
   "E:/pdf/casket"      ;インデックスを保存するディレクトリ
   "E:/pdf"             ;検索対象ディレクトリ
   "estcmd gather -cl -fx .pdf T@estxfilt -fz ^ -ic CP932 -pc CP932 -sd -cm"
                        ;estcmd gather コマンドをオプション付きで指定
   "estcmd purge -cl"   ;estcmd purge コマンドをオプション付きで指定
                        ;行わない場合nil
   "estcmd optimize"    ;estcmd optimize コマンドをオプション付きで指定
                        ;行わない場合nil
   "gather-pdf(&P)"     ;ポップアップメニューに表示する名前
 )

 ;purge と optimize を行わない場合(Office文書の例)
 (
   "C:/Documents and Settings/user/My Documents/casket"
   "C:/Documents and Settings/user/My Documents"
   "estcmd gather -cl -fx .rtf,.doc,.xls,.ppt T@estxfilt -fz
     ^ -ic CP932 -pc CP932 -sd -cm"
   nil
   nil
   "gather-doc(&D)"
 )

;登録したディレクトリのインデックスをまとめて作成
(setq *HE-make-index-all-command-list*
'(
  (
  "E:/casket"
  "E:/DiaryData"
  "estcmd gather -pc CP932 -ic CP932 -fh -sd -cm"
  "estcmd purge"
  "estcmd optimize"
  )
))


estcmd optimize [-onp] [-ond] db
              :インデックスを最適化して、不要な領域を削除
              
estcmd search [-ic enc] [-vu|-va|-vf|-vs|-vh|-vx|-dd] [-kn num] [-um] [-ec rn]
              [-gs|-gf|-ga] [-cd] [-ni] [-sf] [-hs] [-attr expr] [-ord expr]
              [-max num] [-sk num] [-sim id] db [phrase]
              :インデックスに登録された文書を検索
              
estcmd gather [-cl] [-no] [-fe|-ft|-fh|-fm] [-fx sufs cmd] [-fz] [-fo]
              [-rm sufs] [-ic enc] [-il lang] [-bc] [-pc enc] [-px name]
              [-apn|-acc] [-xl|-xh] [-sd] [-cm] [-cs num] [-kn num] [-um] db
              [file|dir]
              :ファイルシステムを探索して文書を登録
              
estcmd purge [-cl] [-no] [-fc] [-pc enc] [-attr expr] db [prefix]
              :インデックス内にあってファイルシステム上にない文書情報を削除

  -sf:検索式を簡便形式で
  -vh:VIEW HUMAN 表示方法の設定
  -max:最大表示件数。負数にすると無制限
  -cl:上書きされた文書の領域を整理
  
  -fx:ファイル(カンマ区切りで列挙)に関連づけた外部コマンドを指定
  T@estxfilt:Hyper Estraierからxdoc2txtを呼び出し(estxfilt.bat)、
              外部コマンドによる出力をプレーンテキストとして解析(T@)
  -fz:-fxの条件に当てはまらないファイルを無視
  -fh:処理対象をHTMLとして扱う
  -fm:処理対象をMIME(メール)として扱う
  ^:エスケープシーケンス
  -ic;対象文書の文字コードを指定 CP932 はestxfiltの出力の文字コード
  -pc:ファイルのパスの文字コードを指定
  -il:文字コードの判定で優先される言語を指定
  -sd:ファイルの更新日時を文書の属性として追加
  -cm:文書の属性の更新日時がファイルの更新日時より古い場合にのみ登録

3.使い方
M-x HE-make-index
:ポップアップメニューから選択してインデックスを作成
 purge(削除)・optimize(最適化)もこのメニューから。(casketディレクトリは
 初回インデックス作成時に自動作成される)
 初回インデックス作成後すぐに optimize しておく。
M-x HE-make-index-all
:*HE-make-index-all-command-list* に登録したディレクトリのインデックスを
 まとめて作成。
M-x HE-grep
 :検索語を入力して検索(検索対象インデックスが複数ある場合は、前回の対象
 インデックスからの検索になる。)
C-u M-x HE-grep
:検索対象インデックスをポップアップメニューから選択して検索

検索語が含まれるファイル名と行全てと、検索語が強調され表示されます。

HE-grep は AND OR検索などには未対応
AND OR 検索をしたい場合は、ggrep-dialog または Hyper Estraier Mode on xyzzy で。
ただし、Hyper Estraier Mode on xyzzy では、検索語が含まれるファイルパスと
該当する部分の抜き出し表示です(estcmd search の標準出力)。

regrep.l

http://xyzzy.s53.xrea.com/wiki/index.php?Memo%2FGrep%B4%D8%CF%A2
Grep 関係バッファ又は *NAMAZU SEARCH* バッファに対し再検索

  • M-x regrep して検索語入力。
  • M-x regrep-open-file :Grep関連バッファでカーソル下のファイルを開く。

HE-grep の検索結果にも regrep

regrep.l に以下を追加
70行目あたりに  (string= "*HE-grep*" bufname)
130行目あたりに (string= bufname "*HE-grep*")
160行目あたりに (string= "*HE-grep*" bufname)

grep 結果のクリックでジャンプ

(まいくろちっぷすxyzzy部門より)
http://xyzzy.s53.xrea.com/wiki/index.php?TipsDirectory
  • *regrep*バッファの検索結果上でも、 Enter or クリックでファイルを開いて
 該当個所にジャンプ&反転表示ができる。(HTMLのみ?)


-