
(圖片來源:作者/部分由 AI 技術生成)
如果你正在處理大量的搜尋結果或文件,想透過 Carrot2 進行自動分類(Clustering),你可能會發現它預設對中文、日文、韓文(合稱 CJK)的支援相當有限。雖然這款聚類引擎在國際上享有盛名,但對於亞洲用戶來說,「開箱即用」的體驗往往卡在語言障礙上。
這並非因為 Carrot2 技術上做不到,而是官方在編譯發行版(Binary Distribution,如我們下載的 carrot2-4.x.x.zip)時,為了保持主程式輕量化與通用性,並未將 CJK 相關的語言擴充模組納入編譯設定。具體來說,官方在 build.gradle 的 dependencies {} 區塊中並未引入這些模組。雖然在 GitHub 儲存庫裡可以看到完整的 CJK 原始碼資源,但官方封裝的二進位包卻將其剔除了。因此,我們必須手動將這些強大的語意處理功能重新「找回來」。
想要讓 Carrot2 支援 CJK,有以下兩種做法:
- 快速修正:直接在官方編譯好的發行版中手動進行「功能補完」。這就像是在不改動建築結構的情況下,手動搬進家具與裝潢。適合想快速上線、不想處理複雜 Java 專案編譯流程的人(這將會是本篇重點)。
- 原始碼編譯:從底層修改專案的 build.gradle 設定檔,將 CJK 模組加入相依性區塊並重新 Build 出專屬版本。這適合有 Java 開發背景、需要長期維護的團隊(這部分我們留到下一篇分享)。
在這篇教學中,我會帶大家用最直覺、最不需要開發環境的「快速修正」方法,手動把 CJK 語言模組接回 Carrot2 的靈魂裡!
為什麼 Carrot2 需要手動安裝 CJK 模組?
Carrot2 在 4.x 版本之後進行了大刀闊斧的架構重組,將語意邏輯抽象成了「語言元件(Language Components)」。英文或德文等印歐語系,通常只需要簡單的空白斷詞(Whitespace Tokenizer)就能處理,但中、日、韓文屬於「無邊界語言」,必須依賴強大的 Lucene 分析器 來進行精準的斷詞與語法分析。
關鍵的痛點在於:官方發行版並不內建支援 CJK。即便你在 GitHub 上能看到 lang/lucene-chinese 等模組的原始碼,但官方提供的 carrot2-4.x.x.zip 裡完全沒有對應的 JAR 檔。由於系統缺少這些元件,因此 Carrot2 會把整段中文當成一個超長的單一詞彙,導致聚類標籤全數失效。我們接下來的工作,就是要把這些被官方排除在外的碎片,一個一個裝回去。
前置環境
在開始之前,請確保你的運行環境符合要求:
- Java 版本:目前 Carrot2 4.8.x 以上版本建議搭配 Java 21。
- 主程式:從 Carrot2 GitHub 儲存庫下載官方發行版,並解壓縮到你的系統中。














