一款簡單好用的開源簡繁轉換類庫

今天給大家介紹一個非常有意思類庫,基於java實現的簡繁體轉換,適用於後端、android等開發領域

源碼地址:* liuyueyi/quick-chinese-transfer: 簡繁轉換,支持香港繁體,臺灣繁體與簡體互轉

1. 實例體驗

以maven做項目管理,可以直接從中央倉庫下載,再pom文件中添加以下依賴即可

<!-- https://mvnrepository.com/artifact/com.github.liuyueyi/quick-transfer-core -->
<dependency>
    <groupId>com.github.liuyueyi</groupId>
    <artifactId>quick-transfer-core</artifactId>
    <version>0.2.6</version>
</dependency>

說明:0.2.6版本於2022-08-11上傳,若在mvn倉庫搜索不到,不要慌,可以先使用0.2.5

如果是gradle做項目管理,依賴同樣很簡單

// https://mvnrepository.com/artifact/com.github.liuyueyi/quick-transfer-core
implementation 'com.github.liuyueyi:quick-transfer-core:0.2.6'

此外,針對網絡不好的小夥伴,也可以通過jitpack的方式導入依賴,具體姿勢如下

maven依賴

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

<dependency>
    <groupId>com.github.liuyueyi.quick-chinese-transfer</groupId>
    <artifactId>quick-transfer-core</artifactId>
    <version>0.2.6</version>
</dependency>

gradle依賴

allprojects {
	repositories {
		...
		maven { url 'https://jitpack.io' }
	}
}

dependencies {
    implementation 'com.github.liuyueyi.quick-chinese-transfer:quick-transfer-core:0.2.6'
}

環境準備完畢之後,可以直接進行使用了,使用姿勢非常非常非常的簡單

public void testTrans() {
    String text = "這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;纔=才";
    // 簡體轉繁體
    String out = ChineseUtils.s2t(text);
    System.out.println("s2t -->" + out);
    // 簡體轉香港繁體
    String hkOut = ChineseUtils.s2hk(text);
    System.out.println("s2hk -->" + hkOut);
    // 簡體轉檯灣繁體
    String twOut = ChineseUtils.s2tw(text);
    System.out.println("s2tw --> " + twOut);

    // 繁體轉簡體
    String origin = ChineseUtils.t2s(out);
    System.out.println("t2s -->" + origin);
    // 香港繁體轉簡體
    System.out.println("hk2s -->" + ChineseUtils.hk2s(hkOut));
    // 臺灣繁體轉簡體
    System.out.println("tw2s -->" + ChineseUtils.tw2s(twOut));
}

入口類 ChineseUtils 支持簡繁互轉,這裏區分了香港繁體 + 臺灣繁體,兩者的主要區別在於某些字、詞的叫法不一樣

通常來講,使用最簡單的簡繁互即可

上面的case輸出結果如下:

s2t -->這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;纔=才
s2hk -->這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲説西遊,許多人都這樣説,收拾一下,拾金不昧;才=才
s2tw --> 這斜月三星洞…… 長壽麵,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;才=才
t2s -->這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;才=才
hk2s -->這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;才=才
tw2s -->這斜月三星洞…… 長壽麪,孫悟空,豬八戒,唐僧,沙和尚,白龍馬,李靖,托塔天王, 戲說西遊,許多人都這樣說,收拾一下,拾金不昧;才=才

2. 進階使用

簡繁轉換,核心在於詞典的管理,改類庫在首次實現轉換的時候,會加載詞典,並解析爲內部的數據結構Dict;因此第一次調用時,會出現冷啓動的耗時高問題

2.1 預熱

基於此,可以再合適的地方先預熱加載詞典;官方提供了同步預熱/異步預熱兩種方式,如

// 預熱加載所有的詞典
ChineseUtils.preLoad(true, TransType.values());

// 預加載簡體轉繁體詞典
ChineseUtils.preLoad(true, TransType.SIMPLE_TO_TRADITIONAL);

// 預加載簡繁互轉詞典
ChineseUtils.preLoad(true, TransType.SIMPLE_TO_TRADITIONAL, TransType.TRADITIONAL_TO_SIMPLE);

preLoad方法的第一個參數,就是用來控制同步還是異步的情況

後面的參數則爲希望加載的詞典

2.2 卸載

同樣有了預熱就有卸載,對於客戶端的小夥伴來說可能更關注這一點的內存佔用;對於不需要的詞典,可以指定卸載

// 卸載所有詞典
ChineseUtils.unLoad(TransType.values());

// 卸載簡繁互轉詞典
ChineseUtils.unLoad(TransType.SIMPLE_TO_TRADITIONAL, TransType.TRADITIONAL_TO_SIMPLE);

2.3 通用方法

在第一節的使用實例中,提供了各種特有的方法來實現轉換;同樣也提供一個統一的方法,根據傳參的詞典類型來進行轉換;適用於統一api接口的設計,根據傳參來返回對應的結果場景

ChineseUtils.transfer("一灰灰blog", TransType.SIMPLE_TO_TRADITIONAL);

3. 小結

最後簡單介紹下這個項目,沒錯這個項目目前是我再維護,核心實現主要來自 chinese-utils,那麼爲啥要獨立搞一個呢? 原因如下

  1. 這個項目不再維護了,最後一次提交在15年
  2. 詞典舊且,有問題的數據較多,所以我完全替換了它的默認詞典,改用 HanLP 詞典文件
  3. 新特性增加(如港臺繁體的區分支持,如預熱加載)
  4. 性能優化等(詞典解析規則、匹配算法的改進等)

更多詳情推薦點擊右邊查看詳情:* quick-chinese-transfer | 一灰灰Learning

歡迎有興趣的小夥伴前往查看嚐鮮, 期待你的評論、點贊、收藏

我是一灰灰,微信公衆號: “一灰灰blog”,歡迎來撩

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章