小さなフットプリント
WASM モジュールと内蔵辞書を合わせて gzip 227KiB 以下。数十 MB の辞書を取得・配信する必要がありません。
サーバー・辞書・プライバシーの負担なしに、クライアント側で日本語をトークナイズできます。
WASM モジュールと内蔵辞書を合わせて gzip 227KiB 以下。数十 MB の辞書を取得・配信する必要がありません。
ブラウザやランタイム上だけで動作します。トークナイズ用のサーバーも API 往復も CORS 設定も不要です。
解析は端末内で完結し、入力がブラウザの外に出ません。機微なテキストを自社インフラに預けずに済みます。
単語の境界を固定辞書ではなく文字パターンから求めます。ブランド名・スラング・専門用語もそのまま残ります。
ネイティブに近い WASM 速度と同期 API。ネットワーク遅延なしで、キー入力ごとにトークナイズできます。
TypeScript の型を完備した C++ コア。Python・ネイティブ C/C++ で、バックエンド・バッチ・組み込みにも使えます。
日常文・口語・方言・古語の例文を選ぶか、手元の文章を貼り付けて試せます。処理はブラウザ内で完結します。
TinySegmenter の軽さと、MeCab に近い詳しさ。Suzume はその中間に位置します。
| 機能 | Intl.Segmenter 標準 | TinySegmenter 軽量 | Suzume | kuromoji | MeCab 高精度 |
|---|---|---|---|---|---|
| ブラウザ動作 | ✓ | ✓ | ✓ | △ | ✗ |
| 外部辞書の準備 | 不要 | 不要 | 同梱 | 必須 | 必須 |
| バンドルサイズ | 0KB | ~10KB | 227KiB | ~20MB | N/A |
| サーバー不要 | ✓ | ✓ | ✓ | △ | ✗ |
| 品詞情報 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 原形復元 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 複合名詞判定 | ✗ | ✗ | ✗ | ✓ | ✓ |
| カスタム辞書 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 未知語対応 | △ | △ | ✓ | △ | △ |
npm install @libraz/suzumeyarn add @libraz/suzumepnpm add @libraz/suzumebun add @libraz/suzumepip install suzumegit clone https://github.com/libraz/go-suzume.git
cd go-suzume && make lib
cd /path/to/your/module
go mod edit -replace github.com/libraz/go-suzume=/path/to/go-suzume
go get github.com/libraz/go-suzumegit clone https://github.com/libraz/suzume.git
cd suzume && make installPython 製のサービスやデータパイプラインでは Python バインディング、Go では Go バインディング、ネイティブ組み込みでは C / C++ ライブラリを参照してください。
各バインディングは、言語ごとの命名に合わせて同じ解析モデルを公開します。
import { Suzume } from '@libraz/suzume'
const suzume = await Suzume.create()
try {
for (const m of suzume.analyze('東京都に住んでいます')) {
console.log(m.surface, m.pos, m.baseForm)
}
} finally {
suzume.destroy()
}from suzume import Suzume
with Suzume() as sz:
for m in sz.analyze("東京都に住んでいます"):
print(m.surface, m.pos, m.base_form)package main
import (
"fmt"
"log"
"github.com/libraz/go-suzume"
)
func main() {
analyzer, err := suzume.New()
if err != nil {
log.Fatal(err)
}
defer analyzer.Close()
for _, m := range analyzer.Analyze("東京都に住んでいます") {
fmt.Println(m.Surface, m.POS, m.BaseForm)
}
}#include "suzume/suzume.hpp"
#include <cstdio>
int main() {
suzume::Tokenizer tokenizer;
for (const suzume::Morpheme& m : tokenizer.analyze("東京都に住んでいます"))
std::printf("%s\t%s\t%s\n", m.surface.c_str(), m.pos.c_str(), m.base_form.c_str());
}各トークンは表層形、品詞、原形、オフセットなどを持ちます。バインディングごとの名前は JavaScript/WASM、Python、Go、C / C++ の各リファレンスを参照してください。