java 支持分詞的高性能拼音轉換工具,速度是 pinyin4j 的兩倍

pinyin

pinyin 是 java 實現的高性能中文拼音轉換工具。

變更日誌

創作目的

想爲 java 設計一款便捷易用的拼音工具。

如何爲 java 設計一款高性能的拼音轉換工具 pinyin4j

特性

快速開始

準備

jdk 1.7+

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>pinyin</artifactId>
    <version>0.0.4</version>
</dependency>

快速開始

參考 PinyinBsTest

返回中文的拼音

使用 PinyinHelper.toPinyin(string) 進行中文轉換。

String pinyin = PinyinHelper.toPinyin("我愛中文");
Assert.assertEquals("wǒ ài zhōng wén", pinyin);

返回多音字列表

使用 PinyinHelper.toPinyin(char) 獲取多音字的讀音列表。

List<String> pinyinList = PinyinHelper.toPinyin('重');
Assert.assertEquals("[zhòng, chóng, tóng]", pinyinList.toString());

分詞特性

默認支持中文分詞,對用戶透明。

String pinyin = PinyinHelper.toPinyin("重慶火鍋");
Assert.assertEquals("chóng qìng huǒ guō", pinyin);

String pinyin2 = PinyinHelper.toPinyin("分詞也很重要");
Assert.assertEquals("fēn cí yě hěn zhòng yào", pinyin2);

指定拼音標註形式

api

/**
 * 轉換爲拼音
 * @param string 原始信息
 * @param styleEnum 樣式枚舉
 * @return 結果
 * @since 0.0.3
 */
public static String toPinyin(final String string, final PinyinStyleEnum styleEnum)

PinyinStyleEnum 樣式枚舉

枚舉 說明 例子
DEFAULT 默認模式,拼音聲調在韻母第一個字母上。 pīn yīn
NORMAL 普通模式,即不帶聲調。 pin yin
NUM_LAST 數字標註模式,即拼音聲調以數字形式在各個拼音之後,用數字 1-5 進行表示。 pin1 yin1
FIRST_LETTER 首字母模式,只返回拼音的首字母部分。 p y

測試案例

DEFAULT

String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.DEFAULT);
Assert.assertEquals("wǒ ài zhōng wén", pinyin);

NORMAL

String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.NORMAL);
Assert.assertEquals("wo ai zhong wen", pinyin);

NUM_LAST

String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.NUM_LAST);
Assert.assertEquals("wo3 ai4 zhong1 wen2", pinyin);

FIRST_LETTER

String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.FIRST_LETTER);
Assert.assertEquals("w a z w", pinyin);

後期 Road-Map

  • 支持中文繁簡體

默認關閉該功能

  • 拼音轉漢字

用戶自定義相關

  • 用戶自定義詞組

  • 用戶自定義分詞

benchmark

測試代碼見 BenchmarkTest.java

性能對比時使用相同的機器,相同測試文本,驗證相同的次數。

均提前做好預熱處理,可供參考。

單個分詞

對比函數 對比次數 對比內容 耗時
Pinyin4j toHanyuPinyinStringArray() 100w 次 相同文本隨機選擇一個字符 621 ms
pinyin toPinyin() 100w 次 相同文本隨機選擇一個字符 317 ms

字符串分詞

對比函數 對比次數 對比內容 耗時
Pinyin4j toHanyuPinyinString() 1w 次 相同長文本 33002 ms
pinyin toPinyin() 1w 次 相同長文本 17975 ms

而且 Pinyin4j 的漢語字符串轉換是不支持分詞的,本項目在支持分詞的情況下速度基本依然是 pinyin4j 的兩倍。

技術鳴謝

pinyin-dataphrase-pinyin-data 提供的拼音數據。

segment 提供的中文分詞。

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