Node.js での使用
CommonJS (require)
--target nodejs でビルドした場合、パッケージは require() で読み込めます:
const { TokenizerBuilder } = require('lindera-wasm-ipadic-nodejs');
const builder = new TokenizerBuilder();
builder.setDictionary("embedded://ipadic");
builder.setMode("normal");
const tokenizer = builder.build();
const tokens = tokenizer.tokenize("東京スカイツリー");
tokens.forEach(token => {
console.log(`${token.surface}\t${token.details.join(',')}`);
});
Node.js ターゲットでは、明示的な WASM 初期化は不要です。モジュールが自動的に処理します。
ES Modules (import)
Node.js プロジェクトで ES Modules を使用している場合(package.json に "type": "module" を指定、または .mjs ファイル):
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const { TokenizerBuilder } = require('lindera-wasm-ipadic-nodejs');
const builder = new TokenizerBuilder();
builder.setDictionary("embedded://ipadic");
builder.setMode("normal");
const tokenizer = builder.build();
const tokens = tokenizer.tokenize("形態素解析");
for (const token of tokens) {
console.log(`${token.surface}\t${token.details.join(',')}`);
}
サーバーサイドトークナイズの例
入力テキストをトークナイズする簡単な Express.js エンドポイント:
const express = require('express');
const { TokenizerBuilder } = require('lindera-wasm-ipadic-nodejs');
const app = express();
app.use(express.json());
// Create the tokenizer once at startup
const builder = new TokenizerBuilder();
builder.setDictionary("embedded://ipadic");
builder.setMode("normal");
const tokenizer = builder.build();
app.post('/tokenize', (req, res) => {
const { text } = req.body;
if (!text) {
return res.status(400).json({ error: 'Missing "text" field' });
}
const tokens = tokenizer.tokenize(text);
const result = tokens.map(token => ({
surface: token.surface,
details: token.details,
byteStart: token.byteStart,
byteEnd: token.byteEnd,
}));
res.json({ tokens: result });
});
app.listen(3000, () => {
console.log('Tokenization server running on port 3000');
});
リクエスト例
curl -X POST http://localhost:3000/tokenize \
-H "Content-Type: application/json" \
-d '{"text": "関西国際空港限定トートバッグ"}'
複数辞書の使用
アプリケーションで複数言語のトークナイズが必要な場合は、個別のトークナイザーを作成できます:
const { TokenizerBuilder } = require('lindera-wasm-cjk-nodejs');
// Japanese tokenizer
const jaBuilder = new TokenizerBuilder();
jaBuilder.setDictionary("embedded://ipadic");
jaBuilder.setMode("normal");
const jaTokenizer = jaBuilder.build();
// Korean tokenizer
const koBuilder = new TokenizerBuilder();
koBuilder.setDictionary("embedded://ko-dic");
koBuilder.setMode("normal");
const koTokenizer = koBuilder.build();
console.log(jaTokenizer.tokenize("東京タワー"));
console.log(koTokenizer.tokenize("서울타워"));
この例では embed-cjk feature フラグを使用してビルドする必要があります。これにより IPADIC、ko-dic、Jieba の辞書が含まれます。
N-Best トークナイズ
サーバー上で複数のトークナイズ候補を取得します:
const results = tokenizer.tokenizeNbest("すもももももももものうち", 3);
for (const result of results) {
console.log(`Cost: ${result.cost}`);
for (const token of result.tokens) {
console.log(` ${token.surface}\t${token.details.join(',')}`);
}
}