Skip to content

Instantly share code, notes, and snippets.

@hankei6km
Created May 2, 2013 14:24
Show Gist options
  • Save hankei6km/5502554 to your computer and use it in GitHub Desktop.
Save hankei6km/5502554 to your computer and use it in GitHub Desktop.
Node.js から libkkc を利用してみるテスト. 実際には Python(PyGObject) のスクリプトを経由して、結果を受け取る.
/**
* Node.js から libkkc を利用してみるテスト.
* 実際には Python(PyGObject) のスクリプトを経由して、結果を受け取る.
* Usage: node node-libkkc.js <SENTENCE>
*/
var path = require('path');
var spawn = require('child_process').spawn;
var bufConcat = function(src, data){
var len = src.length;
var ret = new Buffer(len + data.length);
src.copy(ret, 0, 0);
data.copy(ret, len, 0);
return ret;
}
var print_segments = function(segments){
segments.forEach(function(segment){
var out = '';
segment.forEach(function(item){
out = out + item.output + ' ';
})
console.log(out);
});
}
var decode = function(sentence, cb){
var script = path.join(__dirname, 'node-libkkc.py');
var kkc = spawn('python', [script, sentence]);
var stdout = new Buffer(0);
var stderr = new Buffer(0);
kkc.stdout.on('data', function(data){
stdout = bufConcat(stdout, data);
});
kkc.stderr.on('data', function(data){
stderr = bufConcat(stderr, data);
});
kkc.on('exit', function(code){
cb(code, stdout, stdout);
});
};
decode(process.argv[2], function(err, stdout, stderr){
if(!err){
try{
var segments = JSON.parse(stdout.toString());
print_segments(segments);
}catch(e){
console.log(e);
}
}else{
console.log(stderr);
}
});
# -*- encoding: utf-8 -*-
""" libkkc の decode 結果を JSON 文字列として出力する.
"""
import sys
import json
from gi.repository import Kkc
Kkc.init()
model = Kkc.LanguageModel.load ("sorted3");
decoder = Kkc.Decoder.create(model);
segments = decoder.decode(sys.argv[1], 1, []);
segments_array = []
for segment in segments:
segment_array = []
segments_array.append(segment_array);
while segment is not None:
segment_array.append({
'input': segment.get_property('input'),
'output': segment.get_property('output')
})
segment = segment.next
print(json.dumps(segments_array))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment