!kiyoka.blog.2012_02 RSSPLAIN

Related pages: !kiyoka.blog.list
5555555333333333333333333033355555555555555555555555555545555555555555555555555555555555555555555555555552055555555555555555555555555555555555555555555555555555555555555555555555555555555555505555555555555555555555555555555555055555555555555555555555505555555555555555555555555555510555555555555555555555555555505
5

kiyoka日記。NendoSekkaの開発や、最近思うことなど

5

最新10件!kiyoka.blog   過去記事一覧!kiyoka.blog.list

5

kiyoka.blog_header 

5

このブログを書いている人: 西山 清香(kiyoka) - twitter: @kiyokaEXT

5

5

 

5

 

3

kiyoka.2012_02_27[Ruby] fuzzy-string-matchEXT 0.9.3 リリース

3

二つの文字列同士を曖昧比較するライブラリ(gem)をリリースしました。

3

 

3
 rubygems_icon_128
3

fuzzy-string-matchは lucene-3.0.2からJaro-Winkler distance アルゴリズムだけをポーティングしたものです。

3

 

3

今回はrspecの依存規則をdependencyに変更しました。

3

Github上でpull requestをもらったのをそのままmergeしました。

3
 #2: rspec is a development dependency by MSch for kiyoka/fuzzy-string-match - Pull Request - GitHubEXT
3

 

3

リリースノート

3

0.9.3 / 2012-02-27

3
Changed gem dependency of `rspec'.
3
  gemspec.dependency( "rspec" )  to  gemspec.development_dependency( "rspec" )
3

 

3

 

3

ソーシャルコーディングは楽しいです。

3

 

0

comment (disabled)

3

3

 

3

 

5

kiyoka.2012_02_25[Sekka][KVS][TRIE] Sekkaにトライ木の実装が必要な理由

5

 

5

Sekkaの曖昧文字列マッチングはかなり手抜きな実装になっているので直したい。

5

トライ木EXTを実装すべき時かもと思いはじめてきた。

5
 400px-Trie_example.svg
5

 

5

残念なデータ構造

5

Sekkaの辞書は、Tokyo CabinetやRedisなどKey-Value Storeに格納されるが、次のような残念なデータ構造になっている。

5

例えば、"kanji" というローマ字をキーに曖昧検索をする場合は、先頭2文字 "ka" のキーワードリストを キー "(ka)" で取り出す。

5

そのキーワードリストに対して、"kanji"との編集距離を求め、ある閾値を越えたキーワードだけを抜き出す。

5

 

5
 キー   値
5
 
5
 (aa)   
5
 (ab)   
5
 .
5
 .
5
 (ka)   Ka Kappa Katze ka ka' ka'ba ... kanji kanjiban kanjibann ...
5
 .
5
 (za)   za za'md za'men za'menn za'meq za'ra za'ru za'rurannto  ...
5
 .
5

 

5

残念な点は次の通り

5
先頭2文字がキーになっているので、先頭2文字にタイプミスがあると曖昧検索に失敗する。
5

例えば、"kanji" を "knji" に タイプミスすると救えない。

5

 

5
キーワードリストのサイズが大きい
4

例えば "(ka)" に対するキーワードリストは1.6MByteある。(汗;)

5

 

5
そのため、valueのサイズ制限があるKVSには入れることができない。
5

AmazonのSimpleDBに格納したい。SimpleDBにはvalueが1024バイトまでしか入れられない。

5

 

5
キーワードリストの更新が重い。
5

特にTokyoCabinetを使った時はDISK I/Oが発生してしまう。

5

RedisはDISK I/Oの遅延をしてくれるので、マシではあるが…

5

 

5

トライ木のライブラリを探すが見つからず

5

世の中には大量のトライ木のライブラリがある。

5
 参考:
5
 オープンソースのTrieライブラリまとめ - nokunoの日記EXT
5

 

5

自分が欲しいのは、Key Value Store上にツリーを格納でき、幅優先探索できるもの。

5

そして、さらには幅優先探索しながら編集距離で探索範囲を最適化できるもの。

5

 

5

ここまでくるとなかなか無い。

5

 

5

自分で実装するなら

5

次回は、自分で実装するならどういうデータを格納するかを書いてみたい。

5

 

5

 

5

#(comment)

5

5

 

5

 

5

kiyoka.2012_02_24[Nendo] Nendo 0.6.4 リリース

5

Nendo 0.6.4をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

リリースの概要

5

COPYINGとREADMEをgemに追加しました。

5

Sekkaのテストスイート内で#?=によるデバッグ出力を抑制したかったので debug.null を追加しました。

5

 

5

 

5

以下リリースノートです。

5

version 0.6.4

5
Added debug.null library for inhibiting to display debug message.
5
Added COPYING and README to gem.
5
Refactored Rakefile.
5
    Divided task `test' into `test1' and `test2'
5
    Renamed task `test2' to `test3'
5
    Removed arrays of command string.
5

 

5

 

5

次の目標

5

そろそろ、リファレンスマニュアルを *英語で* ちゃんと書きたいと思っています。

5

 

5

 

2

COMMENTRathod

Essays like this are so important to broaedinng people's horizons.

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_02_20[Ruby] nativeとpureの両方に対応したgemを作る方法

5

 

5

Sekkaの曖昧文字列マッチングを担っているkiyoka/fuzzy-string-matchEXTというgemのpure ruby版を作った話を書く。

5

JSONのgemがnativeとpureの両方をサポートしていたので参考したのだが、結果的にJSONよりもコンパクトに実現できたのでメモしておこう。

5

 

5

 

5

SekkaがJRubyでは動かないのでkiyoka/fuzzy-string-matchEXTのJRuby対応は自分は必要ないのだけど、GitHub上でJRuby用のforkが多かったので対応した。

5

自分はDebianパッケージ化の準備がメインの作業なのでgemの依存関係を直すだけでいいのだが、気分がノッている間に作業した。こういう勢いは重要だ。

5

DebianにはJRubyも入っているので、うまくいけばDebianのJRubyでも使えるのかな?

5

 

5

JRuby対応といってもJavaで高速な編集距離ライブラリをコーディングするわけではなく、pure Ruby版も用意しただけ。

5

GitHubでforkしてくれた方々はC言語に依存した部分を外してpure rubyのコードのみ残し、コメントに「JRubyで動かすため」と書いておられた。

5

処理速度もpure rubyで十分と書いておられる方もいた。

5

 

5

要望

5

JRubyでは、gccを必要とするRubyInlineをインストールしてほしくない。

5
fuzzy-string-match_pure パッケージはRubyInlineに依存せず、pure Ruby版のみがインストールされてほしい。
5
fuzzy-string-match と fuzzy-string-match_pure の二つのパッケージを両方同時にインストールしても良いようにしたい。
5
fuzzy-string-match は nativeとpureの両方を同梱してあり、テスト用に動的に切り替えれるようにしたい。
5

 

5

 

5

動的に切り替えるAPI

5

 

5
requireで切り替えれる
5

native版を使いたい場合

5
require 'fuzzystringmatch'
5
@jarow = FuzzyStringMatch::JaroWinkler.create()
5

 

5

pure版を使いたい場合

5
require 'fuzzystringmatch/pure'
5
@jarow = FuzzyStringMatch::JaroWinkler.create()
5

 

5
コンストラクタで切り替えれる
5

native版を使いたい場合

5
require 'fuzzystringmatch'
5
@jarow = FuzzyStringMatch::JaroWinkler.create( :native )
5

 

5

pure版を使いたい場合

5
require 'fuzzystringmatch'
5
@jarow = FuzzyStringMatch::JaroWinkler.create( :pure )
5

 

5

実装方法(Rubyコード)

5

native版にのみRubyInlineで実装したRubyクラスを含める。

5

require 'fuzzystringmatch' でrequireした時、native版のクラスが存在しなければ、自動的にpure版にfall backするようにした。

5

 

5

以下がLoadError例外処理を入れたrequire。JSONと同じ方法。

5

 

5
require 'fuzzystringmatch/pure'
5
begin
5
  require 'fuzzystringmatch/inline'
5
rescue LoadError
5
end
5

 

5

factoryメソッドで、実際にpure版にfall back しているコードがこちら。

5

native版のクラスのNameError例外を補足して、pure版のインスタンスを返している。

5

 

5
    def self.create( type = :pure )     # factory method
5
      case type
5
      when :pure
5
        FuzzyStringMatch::JaroWinklerPure.new
5
      when :native
5
        begin
5
          FuzzyStringMatch::JaroWinklerInline.new
5
        rescue NameError
5
          STDERR.puts "fuzzy-string-match Warning: native version is disabled. falled back to pure ruby version..."
5
          FuzzyStringMatch::JaroWinklerPure.new
5
        end
5
      end
5
    end
5

 

5

実装方法(gemspec)

5

fuzzy-string-match_pure gemパッケージは以下のようにしている。

5
RubyInlineへの依存を外している。
5
native版のRSpecテストケースを含めていない。
5
以下のファイルを含めない。
5
 lib/fuzzystringmatch/inline.rb
5
 lib/fuzzystringmatch/inline/*
5

それによって、factoryメソッドで :native が指定された場合でも、前述のRubyのLoadError例外によりpure版にfall backする。

5

 

5

このような方法で、純粋な計算しかしないライブラリではpure ruby版を用意すれば、それなりに喜ばれるだろう。

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_02_19[Nendo] Nendo 0.6.3 リリース

5

Nendo 0.6.3をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

リリースの概要

5

nendoのライブラリ(*.nnd *.nndc)のインストール先パスを一段深くし、nendoディレクトリ配下に置くようにしました。

5

Debianパッケージ化しようとして、0.6.2では、

5
 /usr/lib/ruby/vendor_ruby/init.nnd
5

にインストールされてしまうことから、インストール先が間違っていることに気がつきました。

5

 

5

本リリースでは、以下のパスに修正されます。

5
 /usr/lib/ruby/vendor_ruby/nendo/init.nnd
5

 

5

`load' と `use' マクロは上記の古いパスと新しいパスの両方を探す挙動にしたため、ユーザスクリプトは変更無しで動きます。

5

 

5

 

5

以下リリースノートです。

5

version 0.6.3

5
Removed gem dependency for `jeweler' and `ruby-prof'.
5
Changed install path of library files written in nendo. like
5
    *.nnd             =>  nendo/*.nnd
5
    debug/*.nnd       =>  nendo/debug/*.nnd
5
    nendo/*.nnd       =>  nendo/nendo/*.nnd
5
    rfc/*.nnd         =>  nendo/rfc/*.nnd
5
    text/*.nnd        =>  nendo/text/*.nnd
5
    util/*.nnd        =>  nendo/util/*.nnd
5

 

5

 

5

次の目標

5

そろそろ、リファレンスマニュアルを *英語で* ちゃんと書きたいと思っています。

5

フォーマットは何がいいかなぁ。RubyなのにSphinxEXTとかあり?

5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_02_18[Ruby] fuzzy-string-matchEXT 0.9.2 リリース

5

二つの文字列同士を曖昧比較するライブラリ(gem)をリリースしました。

5

 

5
 rubygems_icon_128
5

lucene-3.0.2からJaro-Winkler distance アルゴリズムだけをポーティングしたものです。

5

今回は、gemをC言語native版と、pure ruby版に分離しました。

5

これによって、JRubyからも簡単に使えるようになりました。

5

 

5

リリースノート

5

0.9.2

5
Supported JRuby platform
5

 

5
Divided into two gems.
5
fuzzy-string-match      ... native (RubyInline) version.
5
fuzzy-string-match_pure ... pure ruby version
5

 

5
Divided rspec files into several files.
5

 

5
Supported testable gem
5
   Please install rubygems-test and "gem test fuzzy-strint-match".
5

 

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_02_10[Nendo] Nendo 0.6.2 リリース

5

Nendo 0.6.2をリリースしました。(リリースノート: Nendo.ReleaseNote)

5

rubygems_icon_128

5

リリースの概要

5

gem単体でテストが走る rubygems-test への対応が中心です。

5

これまで、Nendoはgitリポジトリ上でしたテストが走りませんでした。

5

これからは、

5
$ gem install rubygems-test
5
$ gem test nendo
5

でテストが走ります。

5
 参考: Gem TestersEXT
5

 

5

 

5

以下リリースノートです。

5

version 0.6.2

5
Supported testable gem
5
   Please install rubygems-test and "gem test".
5
Modified Rakefile to build the debian package.
5
   to invoke rspec with "ruby `which rspec` ..." instead of "rspec ..."
5
Changed dependency rules of gemspec.
5

 

5

 

5

次の目標

5

Nendoについては今のところ目標はありません。

5

使いながら足りないものから機能追加していきます。

5

 

1

COMMENTLisa

Yeah that's what I'm takling about baby--nice work!

0

comment (disabled)

5

5

 

5

 

5

kiyoka.2012_02_01[Debian][Rubygems] gemsのDebian化ツールについて

5

 

5

NendoのgemのDebian化を簡単にできるツールからスタートしようとして、Google検索しているとこんな記事が出きて、Debian上の行く末が心配になったりした。

5

多分杞憂に終わりそうだけど…

5
 Rails Hub情報局: DebianのRubyパッケージメンテナ辞任で騒動にEXT
5

 

5

こちらがオリジナルのブログポストです。大量のコメントが付いています。

5
 Lucas Nussbaum’s Blog  » Blog Archive   » Giving up on Ruby packagingEXT
5

Lucasさんの開発されたgem2debを使おうとしているので、なんとなくその後を把握しときたくなるというのが人情というもの。

5

gem2debは今でも使えるのかとかも気になるし…

5

 

5

と思ってLucasさんのいくつかのブログ記事を見ていると、gem2debはメンテナンスされていることがわかった。とりあえずそれで進もう。

5
 Lucas Nussbaum’s Blog  » Blog Archive   » DebconfEXT
5
 Lucas Nussbaum’s Blog  » Blog Archive   » Re: Ubuntu vs RubyEXT
5

 

5

Github上のリポジトリもその後機能改善されている。

5

が、なぜかgem2debの最新版がrubygems.orgに上がっていないというオチもあったり…(笑)

5

githubからスナップショットを取ってくれとな。

5
 https://github.com/ln/gem2deb
5

 

5

というわけで、安心して

5

「gem2debを使いながらDebianパッケージ化してみてgemの作りかたを調整」

5

という手順を繰り返せそう。

5

まずは、Nendoをrubygems-testに対応してからかな。

5

 

0

comment (disabled)

5