:::

線上中文斷詞工具:Jieba-JS / Online Chinese Analyzer: Jieba-JS

image

現在最流行的中文斷詞工具結巴(jieba)原本是以Python開發,必須要有Python的環境才能運作。不過它也有很多不同程式語言的版本,其中最好用的就是不需要安裝、只要瀏覽器就能夠執行的JavaScript版本:Jieba-JS。我把Jeiba-JS專案fork了一份:jieba-js,並加入了可以讓其他程式碼直接引用的方法。這樣在任何網頁上都可以輕易實作斷詞功能了。



Jieba-JS原始碼 / Repository

image

我把原始碼都放在GitHub上:

有需要的人可以直接下載:

或著用下面的方法,直接引用函式庫來斷詞。

使用方法 / Usage

布丁的Jeiba-JS使用的時候需要引用require-jieba-js.js檔案:

然後使用以下函式來呼叫:

call_jieba_cut(_text, _callback);

範例程式碼來說:


            html
            
        <script src="https://pulipulichen.github.io/jieba-js/require-jieba-js.js"></script>

<script>
_text = "這個布丁是在無聊的世界中找尋樂趣的一種不能吃的食物,喜愛動漫畫、遊戲、程式,以及跟世間脫節的生活步調。";
call_jieba_cut(_text, function (_result) {
  console.log(_result);
});
</script>

最後會在瀏覽器的console呈現斷詞結果:

image

斷詞的結果是:

["這個", "布丁", "是", "在", "無聊", "的", "世界", "中", "找尋", "樂趣", "的", "一種", "不能", "吃", "的", "食物", ",", "喜愛", "動漫畫", "、", "遊戲", "、", "程式", ",", "以及", "跟", "世間", "脫節", "的", "生活", "步調", "。"]

自訂詞庫設定 / Cutom Dictionary

Jieba允許大家自訂詞庫,我也在Jieba-JS中擴充了這個功能。

dict_custom.js是自訂詞庫的範例檔案,內容如下:


            javascript
            
        _custom_dict = [
  ["漫畫", 99999999, "n"],
];


// 引用設定檔案,以下不用變更
if (typeof(define) === "function") {
    define(function (require) {
        return _custom_dict;
    });
}
else {
    module.exports = _custom_dict;
}

詞庫是由多個詞彙組成,每個詞彙設定有三個欄位:

  • 詞:例如「漫畫」
  • 斷詞權重:要設很大才能蓋過原本的斷詞權重,如「99999999」。
  • 詞性標記:例如名詞「n」。Jieba的詞性列表請看「词的分类」這篇的內容。

在Jieba-JS中要使用自訂詞庫的話,用法如下:


            javascript
            
        call_jieba_cut(_text, _custom_dict, _callback);

示範用法如下:


            javascript
            
        var _text = "這個布丁是在無聊的世界中找尋樂趣的一種不能吃的食物,喜愛動漫畫、遊戲、程式,以及跟世間脫節的生活步調。";
var _custom_dict = "https://github.com/pulipulichen/jieba-js/blob/master/scripts/data/dict_custom.js";
call_jieba_cut(_text, _custom_dict, function (_result) {
  console.log(_result);
});

載入自訂詞庫之後,斷詞結果會有些變化:

image

原本「動漫畫」被視為一個詞,現在被斷開成為「動」跟「漫畫」了。

Node.js版本 / Use Jieba-JS in Node.js

image

我們也可以在Node.js上執行Jieba-JS。做法請參考node.js這個檔案,內容如下,運作結果如上圖:


            javascript
            
        require('../scripts/main.js');

_text = "這個布丁是在無聊的世界中找尋樂趣的一種不能吃的食物,喜愛動漫畫、遊戲、程式,以及跟世間脫節的生活步調。";

dict1 = require('../scripts/data/dictionary.js');
dict2 = require('../scripts/data/dict_custom.js');

node_jieba_parsing([dict1, dict2], _text, function (_result) {
    console.log(_result.join(" "));
});

線上展示 / Online Demo

你可以直接使用上面的網頁直接斷詞,不用再安裝其他工具了。


結語 / In closing

我開始研究Jieba-JS的理由很簡單,因為我只是想找一個免安裝的斷詞工具而已。雖然CKIP有提供線上展示服務,但是那並不是一個JavaScript工具,不好客製化。而且CKIP的詞庫是以Big5為主,一些特殊的文字是沒辦法辨識的。

另一方面,現在中文斷詞最主流的Jieba雖然也很多程式語言,也大多提供線上展示的連結,像是原始Python版的 http://jiebademo.ap01.aws.af.cm/ 或 PHP版的 http://jieba-php.fukuball.com/ ,但是也因為是伺服器端的語言,使用上並沒有這麼便利。

找著找著,沒想到Jieba真的有不用安裝的JavaScript版本,我就這樣子做了一個真正免安裝的「線上展示斷詞工具」了。這個工具並不是在伺服器端運作,而是完全在使用者端的瀏覽器運作。雖然運作速度比較慢一點,但是這樣我就幾乎不需要擔心伺服器當機的問題,非常好用。

除了解決了線上展示的問題之外,Jieba-JS也解決了另一個問題:Node.js難以安裝結巴斷詞器的問題。Node.js在Windows中要使用Jieba的話,必須要先安裝Python,然後在作業系統上編譯Jieba所需要的檔案,最後才能使用Jieba斷詞。但是這個安裝過程非常地困難,時常遭遇問題,可以看NodeJieba Readme.me中的「NodeJieba 在 Windows 上面的一系列安装问题和斗争成功过程参考」。

不過現在有Jieba-JS這樣的JavaScript函式庫之後,就不需要再去煩惱NodeJieba編譯的問題,可以在Node.js中直接使用Jieba-JS來斷詞。

希望這個程式幫得上大家的忙,一起來做中文文本分析吧。

總共38 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 回覆刪除
  2. 回覆刪除
    回覆
    1. 回覆刪除
  3. 回覆刪除
  4. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  5. 回覆刪除
    回覆
    1. 回覆刪除
  6. 回覆刪除
    回覆
    1. 回覆刪除
  7. 回覆刪除
    回覆
    1. 回覆刪除
  8. 回覆刪除
  9. 回覆刪除
  10. 回覆刪除
    回覆
    1. 回覆刪除
  11. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  12. 回覆刪除
  13. 回覆刪除
    回覆
    1. 回覆刪除
  14. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
    6. 回覆刪除
  15. 回覆刪除
    回覆
    1. 回覆刪除
  16. 回覆刪除