spencermountain/compromise

modest natural-language processing

compromise – 輕量級 JavaScript NLP 庫

是什麼compromise(原名 nlp-compromise)是一個小型、快速、純 JavaScript 的函式庫,可將原始英文文字轉換為可操作的資料結構。它專注於實用的規則式處理,而非深度學習,提供分詞、詞性標記、詞幹提取,以及幾項高階輔助功能(數字、日期、縮寫等)。

為何重要 – 對於許多面向 Web 的專案,你不需要引入數百 MB 的模型,就能實現快速、即時的語言處理。compromise 正是為此而生:最小化後的套件體積約為 250 KB,可在瀏覽器或 Node.js 中執行,每秒可處理約 1 MB 的文字。

主要功能(如 README 所述)

  • 三層 APIcompromise/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.mddocs/match-syntax.md 等)和一系列 Observable 笔記本,展示效能、內部機制和標籤圖。


所有陳述均直接取自倉庫的 README;未添加任何外部主張。

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案