spencermountain/compromise
modest natural-language processing
compromise – 輕量級 JavaScript NLP 庫
是什麼 – compromise(原名 nlp-compromise)是一個小型、快速、純 JavaScript 的函式庫,可將原始英文文字轉換為可操作的資料結構。它專注於實用的規則式處理,而非深度學習,提供分詞、詞性標記、詞幹提取,以及幾項高階輔助功能(數字、日期、縮寫等)。
為何重要 – 對於許多面向 Web 的專案,你不需要引入數百 MB 的模型,就能實現快速、即時的語言處理。compromise 正是為此而生:最小化後的套件體積約為 250 KB,可在瀏覽器或 Node.js 中執行,每秒可處理約 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 流水線前,進行簡單的文字清洗或歸一化。
- 建構需要快速意圖辨識但無需重型模型的聊天機器人或語音助理。
- 實時生成或編輯內容(如自動名詞複數化、動詞轉過去式)。
- 在 Web 應用中從使用者產生的文字中提取結構化資訊(數字、日期、地點)。
優勢
- 體積小、速度快 – 套件體積極小,可實現每按鍵一次的即時運行。
- 零相依、純 JS – 只要支援 JavaScript 的環境即可執行。
- 確定性 – 基於規則的輸出可預測,適用於模板化和規則驅動的代理。
- 模組化 – 僅載入所需層級,保持最小體積。
限制
- 準確率權衡 – README 承認其「不如你想像的聰明」;在模糊或領域特定文字上,性能無法與現代基於 Transformer 的解析器相比。
- 以英語為中心 – 核心函式庫針對英語;其他語言為獨立分支(法語、德語、義大利語、西班牙語),可能落後。
- 規則基礎 – 除非手動擴展詞典,否則無法學習新模式。
快速上手
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."
進一步閱讀 – 倉庫內建豐富的 Markdown 文件(docs/api.md、docs/match-syntax.md 等)和一系列 Observable 笔記本,展示效能、內部機制和標籤圖。
所有陳述均直接取自倉庫的 README;未添加任何外部主張。
相關
- 專案
- 專案
- 專案
- 專案
- 專案