12月 132013
asearchという文字列が似ているかどうか判定するrubygemがある。
増井先生が作ったもので、gyazzのページ名サジェストなどに使われている。
それをnodeに移植した。
https://npmjs.org/package/asearch
https://github.com/shokai/node-asearch
特徴
- はやい
- byte列を比較しているだけ
- 結果はtrue/falseで返ってくる
- あいまい度は指定できる(0〜3まで)
- 他のライブラリに依存していない、pure javascript
インストール
npm install asearch
使い方
Asearch = require 'asearch'
a = new Asearch 'abcde'
console.log a.match 'abcde' # => true
console.log a.match 'AbCdE' # => true
console.log a.match 'abcd' # => false
console.log a.match 'abcd', 1 # => true
console.log a.match 'ab de', 1 # => true
console.log a.match 'abe', 1 # => false
console.log a.match 'abe', 2 # => true
typoを判定
a = new Asearch 'cheese burger'
console.log a.match 'cheese burger' # => true
console.log a.match 'chess burger', 2 # => true
console.log a.match 'chess', 2 # => false
2バイト文字もok
a = new Asearch '漢字文字列'
console.log a.match '漢字文字列' # => true
console.log a.match '漢字文字烈' # => false
console.log a.match '漢字文字烈', 2 # => true
このように手っ取り早く2つの文字列が似ているかどうか判定できて便利。
Nodeでビット演算
RubyからJavaScriptへ移植するにあたってビット演算がちょっと違った。右シフト >> はjavascriptでは符号なし右シフト >>> にしないと符号が反転してしまう事がある。10分ぐらい気付かなかった。
|= とか >>>= とかも使える。
coffee-scriptだとさらに0b1010のような2進数記法も使えて便利。
RubyのString#unpackはNodeにもjspackという実装があるが、2byte文字に対応していなかったので自前実装した。