ruby-pytst-0.2

Posted by yatsu Tue, 10 Oct 2006 05:41:47 GMT

2007-06-04 追記 ダウンロードはこちら → yatsu.info : ruby-pytstをRubyForgeに登録

ruby-pytstを更新しました。

日本語のテキストを正しく扱えるようにしました。 以前のものはマルチバイト文字の途中のバイトから検索がマッチしてしまう問題がありました。

マルチバイト・エンコーディングは組込変数の $KCODE から取得しています。

$KCODEを指定するには、コードの中で

$KCODE = 'e'

とするか、rubyの起動時に ruby -Ke のようにします。

本家のpytstがバージョンアップして1.14になったので、それに合わせた変更もこれからしなければなりません。

Posted in ,  | no comments | no trackbacks

ruby-pytstに至るまで

Posted by yatsu Mon, 09 Oct 2006 02:59:18 GMT

自分でアルゴリズムを書くのが面倒なのと、メンテナンスする時間がなさそうだという理由で、誰かが書いたものにRubyインターフェースをかぶせるという方針にしました。

pytstの他には、ctstがAho-Corasick法の検索をサポートしていて、使えそうでした。 そこで以下を試みました(括弧内は進捗率)。

  1. pytstをCで書き直し、SWIGを使えずRuby拡張を作る (80%)
  2. ctstのコードからSWIGを使わずRuby拡張を作る (80%)
  3. ctstのコードからSWIGを使ってRuby拡張を作る (95%)
  4. pytstのPython依存部分をRubyで書き換え、SWIGを使ったRuby拡張を作る
    • (ruby-pytstとして公開済み)

1はコードを書き換えてしまっているので最初の方針に違反しているし、手間がかかるため途中で諦めました。 この時点ではSWIGを覚えるのが面倒だという気持ちが強かったです。

2は普通にできましたが、途中からSWIGでやってみたくなりました(あれ?)。

3はけっこう苦労しました。 SWIGる(すうぃぐる)のに簡単なコードと難しいコードがあることがわかりました。 Cで書かれていると、クラスとして見せるためにラッパーを書かなければなりません。 そのため、インターフェースとして公開するメソッドが多いと大変です。 また、typedefがいっぱいあったり、構造体と共用体の構成が複雑だったりすると、泣きたくなります。 ctstの場合は、直接Ruby拡張を書いた方が簡単でした。 いちおう動作しているようなので、SWIGインターフェースファイルだけ置いておきます。

結局、pytstの方がわかりやすくて使いやすいと感じたので、もう一度pytstに戻って、4の方法でruby-pytstを実装しました。

RubyでTST+AC法 (ruby-pytst)

Posted in ,  | no comments | no trackbacks

RubyでTST+AC法 (ruby-pytst)

Posted by yatsu Mon, 09 Oct 2006 01:01:25 GMT

2007-06-04 追記 ダウンロードはこちら → yatsu.info : ruby-pytstをRubyForgeに登録

ずっと前に、pytstをRubyに移植中と書きましたが、作りかけのものを公開しておきます。 ファイル読み込み/書き込み以外は動作していると思います。

pytstはもともとSWIGで実装されているのですが、Python依存部分が結構あって、移植はそれなりに大変でした。

これはTernary Search Trie (TST)というデータ構造を実装したRuby拡張です。 Aho-Corasick法(AC法)によるスキャニングもサポートしています。 文章中から複数のキーワードを抽出したり、一括置換したりするのに使えます。 くわしくはpytstのページをご参照ください。

使用例

例1 (example/tokenize.rb)

コード
require 'pytst'

t = Pytst::TST.new

t['1234'] = 'token 1'
t['123456'] = 'token 2'
t['45678'] = 'token 3'
t['5678910'] = 'token 4'

result = t.scan('1234561234567891012345',
                Pytst::TupleListAction.new)
p result
実行
% ruby example/tokenize.rb
結果
[["123456", 6, "token 2"], ["123456", 6, "token 2"],
["78910", -5, nil], ["1234", 4, "token 1"], ["]

ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

例2 (example/callable_action.rb)

コード
require 'pytst'

t = Pytst::TST.new

t['1234'] = '[token 1]'
t['123456'] = '[token 2]'
t['45678'] = '[token 3]'
t['5678910'] = '[token 4]'

mycallback = Proc.new {|key, length, obj|
  if length > 0
    print obj
  else
    print key
  end
}

myresult = Proc.new {
  puts
}

result = t.scan('1234561234567891012345',
                Pytst::CallableAction.new(mycallback, myresult))
実行
% ruby example/callable_action.rb
結果
[token 2][token 2]78910[token 1]5

ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

今後の予定

  • ファイル読み込み/書き込み
  • 例外処理
  • Marshal対応
  • Rubyっぽいインターフェース(ブロック処理など)

そして最終目的は、LesserWikiのレンダリング速度を改善して、サービス(ASP)化して公開することです。 半年くらいサボッてますが、そろそろ再開しようかと……。

Posted in ,  | no comments | no trackbacks

『Compilers 2nd Edition』

Posted by yatsu Tue, 03 Oct 2006 00:25:04 GMT

『Compilers 2nd Edition』

ついに出た。
けど、高いのでしばらく買えない。

『MAC OS X Internals』は高いけど買ってしまった。

Posted in ,  | no comments | no trackbacks

EmEditorがTextMate化してきたような

Posted by yatsu Sat, 12 Aug 2006 19:14:44 GMT

EmEditorがv6になってからTextMateに似てきたような気がする。 意識しているのだろうか?

タブが付いてからWindowsのときは手放せないエディタになっていたが、今回エクスプローラ・プラグインが追加されて、ますます使いやすくなった。 僕の場合、馴れているTextMateに近いから使いやすいのかもしれないが……。
explorer.jpg (JPEG 画像, 640x480 px)

EmEditor Professional v6 の主な特長を見ると、TextMateと同じくSnippet機能もあるらしい。 TextMateみたいに使えるのかは未確認。

「EmEditor TextMate」で検索したら、以下を発見。

Posted in ,  | no comments | no trackbacks

『Understanding MySQL Internals』

Posted by yatsu Fri, 09 Jun 2006 15:37:37 GMT

Safari Bookshelf の Rough Cuts で『Understanding MySQL Internals』というものを発見したので、「Online Access Only」で購入。 MySQLの内部構造がソースレベルで解説されている。

Overview

The MySQL database provides unprecedented opportunities for IT departments, software vendors, and computer science students to learn about the inner workings of an enterprise-proven database.Written by a former MySQL company employee, Understanding MySQL Internals takes you on a tour of MySQL 5 and shows you how to figure out the inner-workings of this widely-used database. Learn how data structures and convenience functions operate, how to add your own storage engine or configuration option, and much more. Get started today with Understanding MySQL Internals and you will soon reach a whole new level of comprehension regarding database development.

DBつながりで言うと、『Oracleはこう動いている。』も読んでみたいと思っている。

Posted in ,  | no comments | no trackbacks

RubyCocoa in Mac OS X

Posted by yatsu Sun, 05 Mar 2006 16:36:57 GMT

FreeML メッセージ RubyCocoa/AEOSA ML - 325

RubyCocoaをMac OS Xに含めることが検討されていているらしい。

これに関する話しをMLやblogなど公の 場でしてもいいということなので、書いてみた。

Posted in , ,  | no comments | no trackbacks

Today plugin

Posted by yatsu Sat, 04 Feb 2006 20:05:31 GMT

W-ZERO3のToday画面を拡張したくて、Today pluginでも作ろうかと思い、開発方法を調べてみた。

.NET Compact Framework + C# で開発できればお手軽だと思っていたのだが、どうやらそれは無理で、C++でネイティブDLLを作成するしかないようだ。

MSDN: .NET Compact Framework and Smart Device Programming (February 08, 2005)

Q: When will it be easy to write plugins for the Today screen?
A: A today plugin requires a dll which exports specific methods. It is not possible to write such a dll in managed code, so there will still be a requirement for a native (C++) dll.

すでに .NET Compact Framework の本で Safari Bookshelf のスロットを4つも使ってしまったよ……。

作成方法は以下が参考になりそう。

Todayを拡張するソフトはここで紹介されている。

ソースが公開されているものもあるので、参考にできそう。

ところでいちばんの問題は、Virtual PC上のActive Syncで同期できないことだ。

追記 2006.02.17

User Interface

.NET Compact Frameworkでも開発できるらしい……。 今さら知っても……。

Posted in ,  | no comments | no trackbacks

Rough Cuts

Posted by yatsu Tue, 24 Jan 2006 18:19:47 GMT

Safari BookshelfRough Cuts というサービスが始まった。 書籍のベータバージョンを正式発売前に読むことができる。 Pragmatic Bookshelf の影響だろうか。 技術書は新しいものがすぐに読みたいので、こういうサービスは非常に助かる。

現在、以下の書籍を購入できる。

  • 『Flickr Hacks』Paul Bausch, Jim Bumgardner
  • 『Ajax Hacks』Bruce Perry
  • 『Ruby Cookbook』
  • 『Ruby on Rails: Up and Running』

『Ruby on Rails: Up and Running』の価格は以下のようになっている。

  • Print Book and Online Access Bundle USD $33.99
  • Online Access Only USD $15.99
  • Print Book Only USD $19.99

Safari Bookshelfのアカウントを持っていても、Shelfに入れて読むことはできないようだ。 各ページのプレビューを少しだけ読むことはできる。

Posted in ,  | no comments | no trackbacks

Intel Software Development Products for Mac OS

Posted by yatsu Fri, 13 Jan 2006 20:52:54 GMT

Mac DevCenter - Intel Mac dev tools より

Intelのサイトに Development Support for Intel-based Macs - Intel Software Network というページがあり、そこから Intel Software Development Products for Mac OS なるものをダウンロードできる。

以下のものがあるようだ。

  • Intel C++ Compiler for Mac OS
  • Intel Fortran Compiler for Mac OS
  • Intel Math Kernel Library for Mac OS
  • Intel Integrated Performance Primitives for Mac OS

これらはXcodeに統合できるらしい。

試して、iMac買った人!

Posted in ,  | no comments | no trackbacks

Older posts: 1 2 3 4 ... 26