spencermountain/compromise
modest natural-language processing
compromise – クライアントサイドで動作する軽量な JavaScript NLP ライブラリ
何であるか – compromise(旧称 nlp-compromise)は、純粋な JavaScript で構成された小型で高速なライブラリであり、生の英語テキストを操作可能なデータ構造に変換します。深層学習ではなく、実用的なルールベース処理に焦点を当てており、トークン化、品詞タグ付け、語幹抽出、およびいくつかの高レベルなヘルパー(数字、日付、短縮形など)を提供します。
なぜ重要か – 多くのウェブプロジェクトでは、数百メガバイトに及ぶモデルを読み込むことなく、迅速かつ即時の言語処理が必要です。compromise はそのニッチに最適です:最小化されたバンドルは約 250 KB であり、ブラウザまたは Node.js で動作可能で、1 秒あたり約 1 MB のテキストを処理できます。
主な機能(README に記載)
- 三段階 API –
compromise/one(トークナイザー)、compromise/two(品詞タガー&文法解釈器)、compromise/three(フレーズレベルのユーティリティ)。必要に応じて必要な段階のみをロードできます。 - タグセット – 83 の組み込みタグ(例:
#Verb、#Noun、#FirstName)を備えています。タグは階層的であり、debug()やverbose('tagger')で確認可能です。 - マッチ構文 – マイクロ言語(
doc.match('#Adjective of times'))により、正規表現に似たパターンでドキュメントをクエリできますが、タグを認識します。 - 便利な変換 – 時制の変更(
doc.verbs().toPastTense())、名詞の複数形化、短縮形の展開/縮約、数字の加算/減算など。 - データ抽出 –
doc.json()は構造化された表現(語彙、正規化形、計算されたメタデータ(音節数、金額、分数など))を返します。 - 拡張性 –
compromise-speechなどの追加モジュールをプラグイン可能。 - クライアントサイド対応 – CDN から
<script>タグで読み込むことができ、静的ページに簡単に追加できます。
一般的な用途
- 大規模な AI パイプラインにデータを送信する前の単純なテキストクリーニングや正規化。
- 重いモデルを使わずに、素早い意図検出が必要なチャットボットや音声アシスタントの構築。
- フレーズの自動複数形化、動詞を過去形に変換するなど、リアルタイムでのコンテンツ生成・編集。
- ウェブアプリでユーザー生成テキストから構造化された情報(数字、日付、場所)を抽出。
強み
- サイズと速度 – バンドルが非常に小さく、キー入力ごとに実行可能。
- 依存関係ゼロ、純粋な JS – JavaScript を実行できる環境であればどこでも動作。
- 決定論的 – ルールベースの出力は予測可能であり、テンプレートやルール駆動エージェントに有用。
- モジュール化 – 必要な段階のみをロードすることで、フットプリントを最小限に抑える。
制限
- 精度のトレードオフ – README では「思ったほど賢くない」と認められており、曖昧またはドメイン特化されたテキストでは、現代のトランスフォーマー基盤のパーサーと比べて性能が劣ります。
- 英語中心 – コアライブラリは英語を対象としており、他の言語は別途フォーク(フランス語、ドイツ語、イタリア語、スペイン語)で提供され、追従が遅れる可能性があります。
- ルールベース – レキソンを手動で拡張しない限り、新しいパターンを学習する能力に制限があります。
導入方法
npm install compromise # または CDN スクリプトタグを使用
import nlp from 'compromise'
let doc = nlp('she sells seashells by the seashore.')
console.log(doc.verbs().toPastTense().text()) // "she sold seashells by the seashore."
さらに学ぶ – リポジトリには豊富なマーカドダウンドキュメント(docs/api.md、docs/match-syntax.md など)と、パフォーマンス、内部構造、タググラフを示す Observable ノートブックのコレクションが同梱されています。
すべての記述はリポジトリの README から直接引用;外部の主張は一切追加していません。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト