UNPKG

node-stemmer

Version:

A Node.js interface to the Snowball stemming algorithms

36 lines (35 loc) 1.32 kB
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; } }