Direct Acyclic Word Graph
Common Lisp
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib/dict-0.2.0 dictを0.2.0にバージョンアップ & プロジェクト内に組み込み Oct 4, 2011
COPYING first commit Oct 15, 2010
README dic読み込み方法再修正 Jan 6, 2012
bintrie-builder.lisp dictを0.2.0にバージョンアップ & プロジェクト内に組み込み Oct 4, 2011
byte-order.lisp バイトオーダー指定可能: load関数対応 Aug 28, 2011
dawg.asd dic読み込み方法再修正 Jan 6, 2012
dawg.lisp バイトオーダー指定可能: load関数対応 Aug 28, 2011
double-array-buffered-output.lisp 開発ブランチ(indexファイル削減)を手動で取り込み Aug 28, 2011
double-array-builder.lisp Correct children length check expression Dec 3, 2015
double-array-node-allocator.lisp 定数が確実にコンパイル時に評価されるように修正 Dec 1, 2010
global.lisp dictを0.2.0にバージョンアップ & プロジェクト内に組み込み Oct 4, 2011
load-hashmap.lisp
octet-stream.lisp 実装終了 Oct 31, 2010

README

[概要]
・DAWG(Direct Acyclic Word Graph)によるマップの実装
・入力キーセットを静的に受け取り、各キーに一意なIDをマッピングする
 ・入力キーセットはソート済みであり、かつ各キーはユニークでなければならない
 ・キーのID == 先頭から数えたキーの出現位置、となる  ※ 先頭のキーのID値は0となる
・数千万程度のキーセットをCommon Lispで比較的手軽に扱えるようにするのが目的
 ・2~4GBのメモリを積んでいる32bitマシンで


[バージョン]
・0.3.2


[依存パッケージ]
・dict-0.2.0  ※ cl-dawgプロジェクト内に組み込まれている (lib/dict-0.2.0)
 ・ポータブルなハッシュテーブル
 ・https://github.com/sile/dict


[インストール]
> (require :asdf)
> (require :asdf-install)
> (asdf-install:install "cl-dawg-VERSION.tar.gz")


[API]
###
# dawg
 メインパッケージ

####
# dawg:build (&key input output byte-order show-progress) => t
 キーセットファイル※1からDAWGインデックスファイル※2を作成する。
 = input: 入力キーセットファイルのパス名 or キーセットが格納されたリスト (必須)
 = output: 出力DAWGインデックスファイルのパス名 (必須)
 = byte-order: インデックスファイルのバイトオーダーを指定する。:native or :big or :little
        デフォルトは :native                
 = show-progress: 作成時の進捗表示を行うかどうか。デフォルトはnil

※1: キーセットが昇順に改行区切りで格納されているファイル
※2: 正確にはDAWGをDoubleArray形式で保存したインデックスファイル

####
# dawg:load (index-path &key byte-order) => dawg:dawg
 DAWGインデックスファイルからDAWG(DoubleArray形式)を読み込む。
 = index-path: build関数で作成したDAWGインデックスファイル
 = byte-order: インデックスファイルのバイトオーダーを指定する。:native or :big or :little
        デフォルトは :native                

###
# dawg:member? (key dawg &key start end) => boolean
 キーがDAWGに含まれているかどうかを判定する。
 = key: 対象のキー文字列。(simple-array character)型でなければならない
 = dawg: DAWG
 = start: キー文字列内の開始位置
 = end: キー文字列内の終端位置

###
# dawg:get-id (key dawg &key start end) => (or null fixnum)
 キーに紐付くIDを取得する。
 キーがDAWG内に存在しない場合はnilを返す。
 = key: 対象のキー文字列。(simple-array character)型でなければならない
 = dawg: DAWG
 = start: キー文字列内の開始位置
 = end: キー文字列内の終端位置
 
###
# dawg:each-common-prefix ((match-id match-end) 
                           (key dawg &key start end) 
                           &body body)
 入力キーに対して共通接頭辞検索を行う。
 入力キーの接頭辞部分にマッチするDAWG内の各キーに対して、body部分の処理が実行される。
 ※ return関数を使うことで、途中でループを抜けることが可能
 = match-id: 入力キーの接頭辞部分にマッチしたキーのID値
 = match-end: 入力キー内のマッチした部分の終端位置
 = key: 入力キー文字列。(simple-array character)型でなければならない
 = start: キー文字列内の開始位置
 = end: キー文字列内の終端位置
 = body: マッチの度に実行される式

###
# dawg:each-predictive ((match-id)
                        (key dawg &key start end) 
                        &body body)
 入力キーが接頭辞となる全ての要素を走査する。
 各走査で要素のIDを受け取り、body部分の処理が実行される。
 ※ return関数を使うことで、途中でループを抜けることが可能
 = match-id: 入力キーが接頭辞となる要素のID値
 = key: 入力キー文字列。(simple-array character)型でなければならない
 = start: キー文字列内の開始位置
 = end: キー文字列内の終端位置
 = body: マッチの度に実行される式


[注意事項]
・DAWGのキー内の文字にヌル文字を含めることは出来ない
 ・DoubleArray中で(CHECK配列の初期値として)特別扱いしているため