今天給大家介紹一個非常有意思類庫,基於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,那麼爲啥要獨立搞一個呢? 原因如下
- 這個項目不再維護了,最後一次提交在15年
- 詞典舊且,有問題的數據較多,所以我完全替換了它的默認詞典,改用 HanLP 詞典文件
- 新特性增加(如港臺繁體的區分支持,如預熱加載)
- 性能優化等(詞典解析規則、匹配算法的改進等)
更多詳情推薦點擊右邊查看詳情:* quick-chinese-transfer | 一灰灰Learning
歡迎有興趣的小夥伴前往查看嚐鮮, 期待你的評論、點贊、收藏
我是一灰灰,微信公衆號: “一灰灰blog”,歡迎來撩