Skip to content
PDICを検索とか(ほげほげとか)する簡易CUIツール
C++ C Makefile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
pdic
test
util
.pdicrc.sample
COPYING
Changelog
Makefile
README
Shell.cc
Shell.h
TODO
cpplint.py
main.cc

README

PDIC CUI search - PDICを検索とか(ほげほげとか)する簡易CUIツール
であります

(c) 2012-2013 by naoya_t

【注意】
2012/1/22のバージョン以前に作られたTOCはPDICのindexに出てくる順番になっているため
アドレスが正しくソートされておらず、正しく出てこない単語がある可能性があります。
お手数ですが(ちょっと時間がかかりますが).make toc で索引を作り直して下さい。

■目的

PDIC形式の辞書資産の活用(+個人的な研究)が目的です。

内部でBOCU-1符号化された上、見出し語が圧縮格納されているPDIC形式は、
データ収納効率はよく考えられていて素晴らしいと思うのですが、
そのままでは近代的で高速な全文検索手法には向いていないと思うので、
例えば英辞郎の検索だけが目当てなら、取り急ぎPDIC形式辞書ではなくTEXT形式の辞書を入手した上、
saryとかkyoto cabinetで検索したらいいんじゃないかと思います。

...というわけで、suffix arrayを用いた高速検索なんかにも対応してみました。
...GUIフロントエンドも多分そのうち作ります。

■必要なもの

- GNU C++
- iconv, gtest, re2
- PDIC辞書がないと意味ない

■簡単な用法

.pdicrc.sample を ~/.pdicrc としてコピーして、編集して使ってください。

起動するとプロンプトが出ます。辞書が選択されていれば、入力した文字列を検索します。正規表現でいうと
  (1) word → /^word$/
  (2) word* → /^word/
  (3) *word → /word/
  (4) /word/ → /word/ (※そのまま正規表現として)
  (5) +word → /word/
のような検索になります。

(1)(2)ではPDICが持つインデックスを利用した前方一致検索を行います。

(3) の*word ではsuffix arrayを用いて高速に見出し語全検索を行います。(要インデックス作成)
※今はインデックスを小さめにしていて、単語の先頭からしかマッチしないようになっています。英単語の途中からのマッチングをどうするか、音節単位とか、接頭辞接尾辞区切りとか検討中です。(1/12)

(4) では正規表現ライブラリre2を利用した見出し語全検索を行います。単語の一部分にマッチするような検索も可能です。
(5) は(1),(2),(3),(4)の和集合を得るのですが、大抵の場合(4)と同様です。

AND/OR検索は、とりあえず正規表現に置き換えるなどして何とかしてください。

readlineには(少なくとも現時点では)対応していません。(rlwrapを使ってください)

■特殊コマンド

特殊コマンドは先頭に . をつけます。

.list
    - 現在ロードされている辞書一覧。
.aliases
    - 設定されているエイリアス一覧。
.add loadpath
    - 辞書ロードパスを追加。
.group グループ名 = 名前1 名前2 ... 
    - 辞書グループを登録。
.load ファイル名
    - 辞書を
.use 辞書名
    - ターゲット辞書を変更。
.make toc
    - カレント辞書のsuffix arrayインデックスを生成します。(今のところ見出し語・訳語のみ)
.make macdic
    - Mac OS X付属のDictionary.app用のXMLファイルを生成します。
.dump {header|index|words|datablock|all}
    - ダンプコマンド。〈これはいまのところ開発用〉
    - 見出し語の全リストが .dump words で取れるとか
.lookup 文字列
    - 検索実行。プロンプトに単に文字列を打ち込むのと同義。
.set 変数 = 値
    - limit = 数値
        数値: 結果表示件数の上限。デフォルトは150
    - lookup = {exact|forward|sarray|regexp|all}
        exact: デフォルトを完全一致検索に設定
        forward: 〃前方一致検索に設定
        sarray: 〃単語区切りでの一致に設定
        regexp: 〃正規表現検索に設定
        all: 〃全検索方式の和集合に設定
    - stop_on_limit = {on|off}
        on: 検索表示件数の上限に来たら検索を停止する
        off: 〃 停止しない(あとで検索結果を全部見たいときなどに用いる)
    - verbose = {on|off}
        on: メッセージ出力多め
        off: 少なめ
    - full = {on|off}
        on: 見出し語, 訳語の両方を検索対象とする(発音記号、例文にもそのうち対応)
        off: 見出し語のみ
    - direct = {on|off}
        on: 結果を(配列に格納してソートして、というステップを飛ばして)直接垂れ流す
        off: 結果を配列に格納してソートしてから出力。
             検索が終わるまで出力が始まらないので、人によってはイラッとするが
    - coloring = {on|off}
        on: 結果出力中の検索文字列を色彩&強調表示を行う
        off: 〃行わない
    - separator = {on|off}
        on: 検索結果に辞書区切りを入れる
        off: 〃入れない
.last
    - 最後の検索結果を表示。
       last n
       last n-
       last -m
       last n-m
      のように、何番目の結果を表示するか指定することが可能。(辻褄があう範囲でなら組み合わせ可)
      この指定がある場合、limit の数値は無視される。
.quit あるいは .bye
    - 終了。インデックスファイル等をunmmapするのに数秒待つ場合があります。

■注意事項

GNU Lesser General Public License version 2 で公開します。COPYING 参照。
無保証です。
あと、辞書は付属していません。

■連絡先

@naoya_t とか
You can’t perform that action at this time.