java 同音字_GitHub - houbb/pinyin: The high performance pinyin tool for java.(java 高性能中文转拼音工具。支持同音字。)...

pinyin

pinyin 是 java 实现的高性能中文拼音转换工具。

68747470733a2f2f7472617669732d63692e636f6d2f686f7562622f7365676d656e742e7376673f6272616e63683d6d6173746572

68747470733a2f2f6d6176656e2d6261646765732e6865726f6b756170702e636f6d2f6d6176656e2d63656e7472616c2f636f6d2e6769746875622e686f7562622f70696e79696e2f62616467652e737667

68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d417061636865322d4646303038302e737667

68747470733a2f2f6261646765732e66726170736f66742e636f6d2f6f732f76322f6f70656e2d736f757263652e7376673f763d313033

创作目的

想为 java 设计一款便捷易用的拼音工具。

特性

极简的 api 设计

支持转换长文本

支持多音字

支持多种拼音标注方式

支持中文分词

支持中文繁简体

支持自定义拼音词库

支持判断是否为同音字

支持单独获取声调信息

支持获取声母韵母信息

v0.1.4 主要变更

支持输入法的拼音模式

快速开始

准备

jdk 1.7+

maven 引入

com.github.houbb

pinyin

0.1.4

快速开始

返回中文的拼音

使用 PinyinHelper.toPinyin(string) 进行中文转换。

String pinyin = PinyinHelper.toPinyin("我爱中文");

Assert.assertEquals("wǒ ài zhōng wén", pinyin);

返回多音字列表

使用 PinyinHelper.toPinyinList(char) 获取多音字的读音列表。

List pinyinList = PinyinHelper.toPinyinList('重');

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

INPUT

键盘输入模式,使用 v 替代 ü。

nv hai

测试案例

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);

指定连接符号

有时候使用者希望指定特定的连接符号。

final String text = "我爱中文";

Assert.assertEquals("wazw", PinyinHelper.toPinyin(text, PinyinStyleEnum.FIRST_LETTER, StringUtil.EMPTY));

第三个参数用于指定一个非 null 的字符串作为拼音连接符号。 (默认是空格进行连接)

更多特性

是否为同音字

PinyinHelper.hasSamePinyin() 用来判断两个汉字是否为同音字,包括对多音字的处理。

char one = '花';

char two = '重';

char three = '中';

char four = '虫';

Assert.assertFalse(PinyinHelper.hasSamePinyin(one, three));

Assert.assertTrue(PinyinHelper.hasSamePinyin(two, three));

Assert.assertTrue(PinyinHelper.hasSamePinyin(two, four));

支持繁体中文

本框架支持繁体中文获取对应拼音。

当然你也可以使用 opencc4j 统一转换为简体再做拼音获取,从而提高准确率。

String pinyin = PinyinHelper.toPinyin("奮斗");

Assert.assertEquals("fèn dòu", pinyin);

自定义拼音词库

已有的词库很难满足各种各样的场景,本工具提供自定义拼音词库的功能。

自定义单个字的拼音

自定义字典

自定义 resources/pinyin_dict_char_define.txt 文件内容,格式如下:

莪:wǒ

噯:ài,āi,ǎi

汉字与拼音使用英文: 分割,多音字使用英文,做拼音的分割。

测试

String pinyin = PinyinHelper.toPinyin("莪");

Assert.assertEquals("wǒ", pinyin);

自定义词组的拼音

自定义字典

自定义 resources/pinyin_dict_phrase_define.txt 文件内容,格式如下:

褈慶炎鍋:chóng qìng huǒ guō

测试

以一串火星文为例。

String pinyin = PinyinHelper.toPinyin("莪噯褈慶炎鍋");

Assert.assertEquals("wǒ ài chóng qìng huǒ guō", pinyin);

注意点

仅支持汉语的自定义拼音。

为了保持功能的一致性,如果你自定义的是繁体字(词),对应的简体也会变成自定义注音。

Benchmark

性能对比时使用相同的机器,相同测试文本,验证相同的次数。

均提前做好预热处理,可供参考。

单个分词

对比函数

对比次数

对比内容

耗时

Pinyin4j toHanyuPinyinStringArray()

100w 次

相同文本随机选择一个字符

621 ms

pinyin toPinyin()

100w 次

相同文本随机选择一个字符

317 ms

字符串分词

对比函数

对比次数

对比内容

耗时

Pinyin4j toHanyuPinyinString()

1w 次

相同长文本

33002 ms

pinyin toPinyin()

1w 次

相同长文本

17975 ms

而且 Pinyin4j 的汉语字符串转换是不支持分词的,本项目在支持分词的情况下速度基本依然是 pinyin4j 的两倍。

技术鸣谢

segment 提供的中文分词。

后期 Road-Map

键盘输入拼音形式支持

同音字列表返回

谐音字判断

谐音字列表返回

拼音转汉字

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值