Skip to content

API リファレンス

Suzume クラス

日本語トークン化のメインクラス。

Suzume.create(options?)

新しい Suzume インスタンスを作成します。

typescript
static async create(options?: SuzumeOptions & { wasmPath?: string }): Promise<Suzume>

SuzumeOptions:

オプションデフォルト説明
wasmPathstringundefinedWASM ファイルのカスタムパス
preserveVubooleantrueヴを保持(ビ等に正規化しない)
preserveCasebooleantrue大文字小文字を保持(ASCII を小文字化しない)
preserveSymbolsbooleanfalse記号・絵文字を出力に保持

戻り値: Promise<Suzume>

例:

typescript
// 通常の使用
const suzume = await Suzume.create()

// カスタム WASM パス
const suzume = await Suzume.create({ wasmPath: '/path/to/suzume.wasm' })

// オプション指定
const suzume = await Suzume.create({
  preserveSymbols: true,
  preserveVu: false,
})

analyze(text)

日本語テキストを解析し、トークンの配列を返します。

typescript
analyze(text: string): Morpheme[]
パラメータ説明
textstring解析する日本語テキスト

戻り値: Morpheme[]

例:

typescript
const result = suzume.analyze('東京に行きました')

// 結果:
// [
//   { surface: '東京', pos: 'NOUN', posJa: '名詞', ... },
//   { surface: 'に', pos: 'PARTICLE', posJa: '助詞', ... },
//   { surface: '行き', pos: 'VERB', posJa: '動詞', ... },
//   { surface: 'まし', pos: 'AUX', posJa: '助動詞', ... },
//   { surface: 'た', pos: 'AUX', posJa: '助動詞', ... }
// ]

generateTags(text, options?)

テキストから意味のあるタグを抽出します。検索インデックス、分類、コンテンツ分析に便利です。デフォルトでは内容語(名詞、動詞、形容詞、副詞)を抽出し、助詞、助動詞、形式名詞、低情報語を除外します。

typescript
generateTags(text: string, options?: TagOptions): Tag[]

Tag:

プロパティ説明
tagstringタグテキスト(useLemma 設定に応じて表層形または原形)
posstring品詞(Noun, Verb, Adjective, Adverb 等)
パラメータ説明
textstringタグを抽出する日本語テキスト
optionsTagOptionsタグ生成のオプション設定

TagOptions:

オプションデフォルト説明
pos('noun' | 'verb' | 'adjective' | 'adverb')[]全て抽出する品詞カテゴリ
excludeBasicbooleanfalseひらがなのみの原形を持つ基本動詞等を除外
useLemmabooleantrue表層形の代わりに原形(辞書形)を使用
minLengthnumber2タグの最小文字数
maxTagsnumber0タグの最大数(0 = 無制限)

戻り値: Tag[]

例:

typescript
// 基本的な使い方
const tags = suzume.generateTags('東京スカイツリーに行きました')
// [{ tag: '東京', pos: 'Noun' },
//  { tag: 'スカイツリー', pos: 'Noun' },
//  { tag: '行く', pos: 'Verb' }]

// 名詞のみ
const nouns = suzume.generateTags('美しい花が静かに咲いている', {
  pos: ['noun']
})
// [{ tag: '花', pos: 'Noun' }]

// 基本動詞の除外(する、いる、ある、なる等のひらがなのみの原形を持つ語)
const tags2 = suzume.generateTags('新しいプロジェクトを開始して管理する', {
  excludeBasic: false
})
// [{ tag: '新しい', pos: 'Adjective' },
//  { tag: 'プロジェクト', pos: 'Noun' },
//  { tag: '開始', pos: 'Noun' },
//  { tag: '管理', pos: 'Noun' },
//  { tag: 'する', pos: 'Verb' }]

const tags3 = suzume.generateTags('新しいプロジェクトを開始して管理する', {
  excludeBasic: true
})
// [{ tag: '新しい', pos: 'Adjective' },
//  { tag: 'プロジェクト', pos: 'Noun' },
//  { tag: '開始', pos: 'Noun' },
//  { tag: '管理', pos: 'Noun' }]
// 'する' は除外される(原形がひらがなのみ)

// 結果数を制限
const top3 = suzume.generateTags('東京タワーと東京スカイツリーを見学しました', {
  maxTags: 3
})
// [{ tag: '東京タワー', pos: 'Noun' },
//  { tag: '東京スカイツリー', pos: 'Noun' },
//  { tag: '見学', pos: 'Noun' }]

excludeBasic

excludeBasic: true は原形(辞書形)がすべてひらがなで書かれた語を除外します。する、いる、ある、なる、いく、くる等の基本動詞が除外される一方、開始、管理、確認等の漢字を含む動詞は保持されます。内容を表すタグのみが必要な場合に有用です。

フィルタパイプライン

タグジェネレーターは以下の順序でフィルタを適用します:

  1. 助詞 — 除外(は、が、を、に 等)
  2. 助動詞 — 除外(です、ます、た 等)
  3. 形式名詞 — 除外(こと、もの、ため 等)
  4. 低情報語 — 除外(低情報としてマークされた語)
  5. 接続詞 — 常に除外
  6. 記号 — 常に除外
  7. 品詞フィルタpos が設定されている場合、一致するカテゴリのみ通過
  8. 基本語excludeBasic: true の場合、ひらがなのみの原形を持つ語を除外
  9. 最小文字数minLength 文字未満のタグを除外
  10. 重複排除 — 重複タグを削除

loadUserDictionary(data)

実行時にカスタム単語を読み込みます。

typescript
loadUserDictionary(data: string): boolean
パラメータ説明
datastringCSV 形式の辞書エントリ

戻り値: boolean - 成功時 true

形式: 表層形,品詞[,コスト][,基本形]

例:

typescript
// 単一エントリ
suzume.loadUserDictionary('ChatGPT,NOUN')

// 複数エントリ
suzume.loadUserDictionary(`
ChatGPT,NOUN
スカイツリー,NOUN
DeepL,NOUN
`)

version

Suzume のバージョン文字列を取得します。

typescript
get version(): string

例:

typescript
console.log(suzume.version) // "0.1.0"

loadBinaryDictionary(data)

コンパイル済みバイナリ辞書(.dic形式)を実行時に読み込みます。

typescript
loadBinaryDictionary(data: Uint8Array): boolean
パラメータ説明
dataUint8Arrayバイナリ辞書データ(.dic形式)

戻り値: boolean - 成功時 true

例:

typescript
// ファイルから読み込み(Node.js)
import { readFile } from 'fs/promises'
const dictData = new Uint8Array(await readFile('custom.dic'))
suzume.loadBinaryDictionary(dictData)

// URLから読み込み(ブラウザ)
const response = await fetch('/dictionaries/custom.dic')
const dictData = new Uint8Array(await response.arrayBuffer())
suzume.loadBinaryDictionary(dictData)

バイナリ辞書 vs CSV辞書

バイナリ辞書(.dic)はCSV形式よりも高速に読み込めます。suzume-cli dict compile コマンドでTSV辞書をバイナリ形式にコンパイルできます。


destroy()

WASM メモリとリソースを解放します。インスタンスの使用が終わったら呼び出してください。

typescript
destroy(): void

FinalizationRegistry による自動クリーンアップ

Suzume は FinalizationRegistry コールバックを登録しているため、インスタンスがガベージコレクションされるとリソースは自動的に解放されます。ただし、destroy() を明示的に呼び出して即座にクリーンアップすることを推奨します。特に Node.js では GC のタイミングが不定で、WASM メモリは GC のヒープ使用量に反映されず、メモリ逼迫と判断されにくいためです。

例:

typescript
const suzume = await Suzume.create()
// ... suzume を使用 ...
suzume.destroy() // 即座にリソースを解放

Morpheme インターフェース

単一のトークン(言語単位)を表します。

typescript
interface Morpheme {
  surface: string      // 表層形(テキスト中の表記)
  pos: string          // 品詞(英語)
  baseForm: string     // 基本形/辞書形
  posJa: string        // 品詞(日本語)
  conjType: string | null  // 活用型
  conjForm: string | null  // 活用形
  extendedPos: string  // 拡張品詞サブカテゴリ(英語)
}

プロパティ

プロパティ説明
surfacestringテキスト中の表層形"食べ"
posstring品詞(英語)"VERB"
baseFormstring辞書形/基本形"食べる"
posJastring品詞(日本語)"動詞"
conjTypestring | null活用型(動詞/形容詞)"一段"
conjFormstring | null活用形"連用形"
extendedPosstring拡張品詞サブカテゴリ"VerbRenyokei"

品詞一覧

posposJa説明
NOUN名詞名詞
VERB動詞動詞
ADJ形容詞形容詞
ADV副詞副詞
PARTICLE助詞助詞
AUX助動詞助動詞
PRON代名詞代名詞
DET連体詞連体詞
CONJ接続詞接続詞
INTJ感動詞感動詞
PREFIX接頭辞接頭辞
SUFFIX接尾辞接尾辞
SYMBOL記号記号
OTHERその他その他/不明

拡張品詞(extendedPos)

extendedPos プロパティは基本の pos タグを超えた詳細なサブカテゴリを提供します。活用形の区別、助詞の役割、助動詞の機能、名詞のサブタイプなどを識別する場合に有用です。

動詞の活用形:

説明
VerbShuushikei終止形食べる, 書く
VerbRenyokei連用形食べ, 書き
VerbMizenkei未然形食べ-, 書か-
VerbOnbinkei音便形書い-, 泳い-
VerbTeFormて形食べて, 書いて
VerbKateikei仮定形食べれば, 書けば
VerbMeireikei命令形食べろ, 書け
VerbRentaikei連体形(現代語では終止形と同形)
VerbTaFormた形食べた, 書いた
VerbTaraFormたら形食べたら, 書いたら

形容詞の活用形:

説明
AdjBasic終止形美しい, 高い
AdjRenyokei連用形(く)美しく, 高く
AdjStem語幹(ガル接続)美し-, 高-
AdjKattかっ形美しかっ-, 高かっ-
AdjKeFormけ形(仮定)美しけれ-
AdjNaAdjナ形容詞語幹静か, 綺麗

助動詞:

説明
AuxTenseTa過去た, だ
AuxTenseMasu丁寧ます, まし, ませ
AuxNegativeNai否定ない, なかっ
AuxNegativeNu否定(古語)ぬ, ん
AuxDesireTai願望たい, たかっ
AuxVolitional意志/推量う, よう
AuxPassive受身れる, られる
AuxCausative使役せる, させる
AuxPotential可能れる, られる
AuxAspectIru継続いる, い, おる
AuxAspectShimau完了しまう, ちゃう
AuxAspectOku準備おく, とく
AuxAspectMiru試行みる
AuxAspectIku進行方向いく
AuxAspectKuru接近くる
AuxAppearanceSou様態そう
AuxConjectureRashii推定らしい
AuxConjectureMitai推定みたい
AuxCopulaDa断定だ, で, な, なら
AuxCopulaDesu丁寧断定です, でし
AuxHonorific尊敬れる, られる
AuxGozaru丁重ござる
AuxExcessive過度すぎる
AuxGaruガル接続がる

助詞:

説明
ParticleCase格助詞が, を, に, で, へ, と, から, まで, より
ParticleTopic係助詞は, も
ParticleFinal終助詞ね, よ, わ, な, か
ParticleConj接続助詞て, で, ば, ながら, たり, けど
ParticleQuote引用助詞と(引用)
ParticleAdverbial副助詞ばかり, だけ, ほど, しか, など
ParticleNo準体助詞
ParticleBinding係結びこそ, さえ, すら

名詞:

説明
Noun普通名詞東京, 天気
NounFormal形式名詞こと, もの, ところ, わけ
NounVerbal連用形転成名詞読み, 書き
NounProper固有名詞
NounProperFamily固有名詞(姓)田中, 鈴木
NounProperGiven固有名詞(名)太郎
NounNumber数詞一, 100

その他:

説明
Pronoun代名詞
PronounInterrogative疑問詞(何, 誰, どこ)
Adverb副詞
AdverbQuotative引用副詞(そう, こう)
Conjunction接続詞
Determiner連体詞
Prefix接頭辞
Suffix接尾辞
Symbol記号
Interjection感動詞
Otherその他
Unknown不明

エラーハンドリング

typescript
try {
  const suzume = await Suzume.create()
  const result = suzume.analyze('テスト')
} catch (error) {
  if (error.message === 'Failed to create Suzume instance') {
    console.error('WASM の初期化に失敗しました')
  }
}

メモリ管理

Suzume は JavaScript ヒープ外にメモリを確保する WebAssembly を使用します。FinalizationRegistry により GC 時にクリーンアップされますが、明示的な destroy() を強く推奨します。特に Node.js では GC のタイミングが不定で、WASM メモリは GC のヒープ使用量に反映されず、メモリ逼迫と判断されにくいためです。

typescript
// 良い例:使用後にクリーンアップ
const suzume = await Suzume.create()
try {
  const result = suzume.analyze(text)
  // 結果を処理...
} finally {
  suzume.destroy()
}

// 長時間実行アプリ:インスタンスを再利用
class MyApp {
  private suzume: Suzume | null = null

  async init() {
    this.suzume = await Suzume.create()
  }

  analyze(text: string) {
    return this.suzume?.analyze(text) ?? []
  }

  dispose() {
    this.suzume?.destroy()
    this.suzume = null
  }
}

Node.js での注意

Node.js では WASM メモリは V8 のヒープサイズに追跡されません。destroy() を呼ばずに多くのインスタンスを作成すると、GC からは圧力が見えないためメモリ使用量が増加し続けます。サーバーサイドコードでは必ず明示的に destroy() を呼び出してください。