2014年 12月 の投稿一覧

JavaScriptでn-gram

素朴に書いてみようと思って書きましたよ。のメモ。

var ngram = function(words, n) {
  var i;
  var grams = [];
  for(i=0; i<=words.length-n; i++) {
    grams.push(words.substr(i, n).toLowerCase());
  }
  return grams;
}

var text = "Hi. 本日は晴天なり。";
console.log(ngram(text,2));
console.log(ngram(text,3));

実行すると、BigramとTrigramの実行結果が得られます。

[ 'hi', 'i.', '. ', ' 本', '本日', '日は', 'は晴', '晴天', '天な', 'なり', 'り。' ]
[ 'hi.', 'i. ', '. 本', ' 本日', '本日は', '日は晴', 'は晴天', '晴天な', '天なり', 'なり。' ]

ロジックゲートをnode.jsでシミュレーションする

Rubyで2の補数の話題ぐらいから6年ぶり*1のビット演算の話題。

ロジックゲートをシミュレーションするg8というライブラリがあったので少し触ってみました。

サンプル見ればそのままなのですが、一応手元でも試してみました。

なぜか「ぬ」という日本語名がプロジェクト名。

var g8 = require('g8');
var a = g8.word(8);
var b = g8.word(8);
console.log("a=" + a('11110000', '1'));
console.log("b=" + b('00001111', '1'));
console.log("---");
console.log("a or b = " + g8.or(a('00000000', '0'), b('00000000', '0')));
console.log("not b  = " + g8.not(b('00000000', '0')));
a=11110000
b=00001111
---
a or b = 11111111
not b  = 11110000

これを利用して、10bit CPUの実装も行われていて興味深い。

最近コードを書いていてもビットの気持ちを忘れているなと感じたので時々触って思い出そうと思う。

*1:多分...ちゃんと振り返ってない...