kusamoji
Version:
Japanese morphological analyzer for Node.js — Viterbi tokenizer with mmap dict loading and pluggable POS-source strategy
43 lines (36 loc) • 1.46 kB
JavaScript
;
/**
* Connection costs matrix from cc.dat file.
* 2 dimension matrix [forward_id][backward_id] -> cost
* @constructor
* @param {number} forward_dimension
* @param {number} backward_dimension
*/
function ConnectionCosts(forward_dimension, backward_dimension) {
this.forward_dimension = forward_dimension;
this.backward_dimension = backward_dimension;
// leading 2 integers for forward_dimension, backward_dimension, respectively
this.buffer = new Int16Array(forward_dimension * backward_dimension + 2);
this.buffer[0] = forward_dimension;
this.buffer[1] = backward_dimension;
}
ConnectionCosts.prototype.put = function (forward_id, backward_id, cost) {
let index = forward_id * this.backward_dimension + backward_id + 2;
if (this.buffer.length < index + 1) {
throw "ConnectionCosts buffer overflow";
}
this.buffer[index] = cost;
};
ConnectionCosts.prototype.get = function (forward_id, backward_id) {
let index = forward_id * this.backward_dimension + backward_id + 2;
if (this.buffer.length < index + 1) {
throw "ConnectionCosts buffer overflow";
}
return this.buffer[index];
};
ConnectionCosts.prototype.loadConnectionCosts = function (connection_costs_buffer) {
this.forward_dimension = connection_costs_buffer[0];
this.backward_dimension = connection_costs_buffer[1];
this.buffer = connection_costs_buffer;
};
module.exports = ConnectionCosts;