pinyin 是 java 實現的高性能中文拼音轉換工具。java
變動日誌
想爲 java 設計一款便捷易用的拼音工具。git
如何爲 java 設計一款高性能的拼音轉換工具 pinyin4jgithub
jdk 1.7+api
<dependency> <groupId>com.github.houbb</groupId> <artifactId>pinyin</artifactId> <version>0.0.4</version> </dependency>
參考 PinyinBsTestmaven
使用 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);
/** * 轉換爲拼音 * @param string 原始信息 * @param styleEnum 樣式枚舉 * @return 結果 * @since 0.0.3 */ public static String toPinyin(final String string, final PinyinStyleEnum styleEnum)
枚舉 | 說明 | 例子 |
---|---|---|
DEFAULT |
默認模式,拼音聲調在韻母第一個字母上。 | pīn yīn |
NORMAL |
普通模式,即不帶聲調。 | pin yin |
NUM_LAST |
數字標註模式,即拼音聲調以數字形式在各個拼音以後,用數字 1-5 進行表示。 | pin1 yin1 |
FIRST_LETTER |
首字母模式,只返回拼音的首字母部分。 | p y |
String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.DEFAULT); Assert.assertEquals("wǒ ài zhōng wén", pinyin);
String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.NORMAL); Assert.assertEquals("wo ai zhong wen", pinyin);
String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.NUM_LAST); Assert.assertEquals("wo3 ai4 zhong1 wen2", pinyin);
String pinyin = PinyinHelper.toPinyin("我愛中文", PinyinStyleEnum.FIRST_LETTER); Assert.assertEquals("w a z w", pinyin);
默認關閉該功能測試
測試代碼見 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-data 與 phrase-pinyin-data 提供的拼音數據。
segment 提供的中文分詞。