libraryGomokuをベースにしたSanmokuという形態素解析器を実装した。Gomokuに比べて解析時に必要なメモリ量が少ないのと初期ロード時間が短いのが特徴。speedマージソート(1)の改良版。ソートのような高階関数では、引数で渡した比較関数の間接呼び出しのコストも実行速度にそれなりの影響を与えるので、それを(マクロをほとんど使わずに)できるだけ低く抑えるための試み。speed昨日に作成したマージソートに手を加えたもの。要素数が少ない部分リスト*1には、(再帰的な)マージソートではなく、ソーティングネットワーク的なソートを適用することで高速化を図った。結果的にはほとんど効果がなかった。speed久々にマージソートを実装してみたら、結構良いものができたので載せておく。パッケージ定義とグルーバルな宣言。optimize以下、sbcl-1.0.51-x86-64-linuxでの実行結果。utilitysb-alienパッケージとかを使ってネイティブライブラリを使用していると、ちょくちょくCの定数の値や型の定義(型のサイズ)を知りたくなることがある。毎回ヘッダファイルを調べるのも面倒なので、lisp上から取得出来るように関数を用意してみた。lispプログラムを載せたら「inline宣言を付けるともっと早くなりますよ」というコメントを頂いたので試してみた。speedForthを触ってみたくなったので、試しにハノイの塔を実装してみた。lispとC++でも実装し、Forthとの処理速度を比較してみた。algorithm前半および後半で実装を省略していたパッケージのソースコードをここに載せておく。buffered-outputパッケージとnode-allocatorパッケージの二つ。ランダムアクセス可能なバイナリファイル出力用のパッケージ。algorithm昨日の続き。今回は主に、前回のtrieパッケージでは未定義だったchange-active-node関数を埋めていくことになる。ちなみに今回は'後半'となっているけど、まだ後続がある・・・。詳しくはソースコード内のコメントを参照。utilityタイトル通りのパッケージ。algorithm格納するキー数に大してO(1)のメモリ使用量で、DoubleArrayを構築する方法を思いついたので、その実装メモ。DoubleArrayの実装を行うとやや複雑となるので、まずはより単純な通常のトライ(オンメモリ)の実装から始める。parallel後々使いたいので、簡単なカウントダウンラッチを作成してみた。ウェイトは単純なスピンで実装しているのであまり実用的ではないけど、お試し用途であれば十分(だと思う)。parallel実行中のスレッドがN個あるとして、そのそれぞれに0からN-1のID値を割り振る関数を作成した。sileの日記の続き。Gomoku(0.0.4)では辞書引き部分*1にDAWGを使っているので、それもIgoに取り込んで処理速度の変化を図ってみた。諸々の条件は前回と同様。今回は新たにIgoのDAWG版が加わる。speedGomoku(0.0.4)で得た知見の一部をIgo(0.4.3)に取り込んでみた。形態素解析の部分が少し速くなっている。MeCab(0.98)、Gomoku(0.0.4)、Igo(0.4.2,0.4.3)の処理速度の比較*1。以前とはマシンも変わっているので、全部計り直した。若干のパフォーマンス向上2011-05-29SBCLの出力をパイプして使う場合の注意点sbclSBCLの出力をパイプして使う場合の注意点。何も気にせずに書いていると大量のエラー情報が出力されて戸惑うことがある。例として以下のSBCLスクリプトを用いる。lispで実装してみた。実装は適当で制限も多いけど、処理効率は(通常のループと同程度に)良い。utilityマシンのネイティブのバイトオーダーを自動的に判定できるユーティリティ関数があると便利かと思ったので作成してみた。speedigo-gaeを修正して、辞書データ読み込みを速度を向上させた。igo-gaeの現在のバージョンは0.0.2。オリジナルのIgoでは、データ読み込みにはnio系パッケージのjava.nio.channels.FileChannelとjava.nio.MappedByteBufferを使っていた。I/Oを使いたくなったので少し調べてみた。serve-eventというものが利用可能らしい。lispで実装してみたメモ(かなり雑)。prefixes」の概要。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。