node-stemmer
Version:
A Node.js interface to the Snowball stemming algorithms
36 lines (35 loc) • 1.32 kB
JavaScript
import { isNullPointer } from "ffi-rs";
import { Libstemmer } from "./libstemmer.js";
import { UnavailableAlgorithmError } from "./error/unavailable-algorithm-error.js";
import { CharacterEncoding } from "./enum/character-encoding.js";
export default class Stemmer {
libstemmer;
stemmer;
constructor(algorithm, charenc = CharacterEncoding.UTF_8) {
this.libstemmer = Libstemmer.getLibstemmer();
this.stemmer = this.libstemmer.sb_stemmer_new(algorithm, charenc);
if (isNullPointer(this.stemmer)) {
throw new UnavailableAlgorithmError('Unavailable algorithm');
}
}
static algorithms() {
const libstemmer = Libstemmer.getLibstemmer();
const sbStemmerList = libstemmer.sb_stemmer_list();
let algorithms = [];
Array.from(sbStemmerList).forEach(item => {
algorithms.push(item);
});
return algorithms;
}
stemWord(word) {
const size = word.length;
const stem = this.libstemmer.sb_stemmer_stem(this.stemmer, word, size);
const length = this.libstemmer.sb_stemmer_length(this.stemmer);
return stem.slice(0, length);
}
stemWords(words) {
let stems = [];
words.forEach(word => stems.push(this.stemWord(word)));
return stems;
}
}