本文介绍: 【代码】Java实现汉字拼音转换和关键字分词(pinyin4j、hanlp)
pinyin4j
- 添加maven依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
- 获取文本拼音
/**
* 获取文本拼音
* @param context 文本内容
* @param existNotPinyin 是否保存非汉字
* @return String 拼音
*/
private String pinyinTest(String context, boolean existNotPinyin) {
if (context == null || context.trim().length() <= 0) {
return null;
}
//设置格式
HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
//WITHOUT_TONE 不带音标、WITH_TONE_NUMBER 带数字音标、WITH_TONE_MARK 带符号音标
outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
char[] chars = context.trim().toCharArray();
StringBuilder builder = new StringBuilder();
try {
for (char aChar : chars) {
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(aChar, outputFormat);
//不是汉字会返回null
if (pinyin == null || pinyin.length <= 0) {
if (existNotPinyin) {
builder.append(aChar);
}
continue;
}
//多音字的情况取第一个(也可以全取)
builder.append(pinyin[0]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return builder.toString().toUpperCase();
}
- 测试用例
@Test
public void test() {
String temp = "我爱罗52";
String list = pinyinTest(temp, false); //WOAILUO
}
hanlp
- 添加Maven依赖
<dependency>
<groupId>com.hankcs</groupId>
<artifactId>hanlp</artifactId>
<version>portable-1.8.4</version>
</dependency>
- 获取文本拼音
/**
* 获取文本拼音
* @param context 文本内容
* @param existNotPinyin 是否保存非汉字
* @return String 拼音
*/
private String hanLpTest(String content, Boolean existNotPinyin) {
if (context == null || context.trim().length() <= 0) {
return null;
}
if (existNotPinyin) {
return HanLP.convertToPinyinString(content, "", false).toUpperCase();
}
List<Pinyin> pinyinList = HanLP.convertToPinyinList(content);
StringBuilder builder = new StringBuilder();
pinyinList.forEach(pinyin -> {
if (pinyin == null || Pinyin.none5.equals(pinyin)) {
return;
}
builder.append(pinyin.getPinyinWithoutTone());
});
return builder.toString().toUpperCase();
}
- 测试用例
@Test
public void test() {
String temp = "我爱罗52";
System.out.println(hanLpTest(temp, true)); //WOAILUO52
}
关键字分词
- 正则表达式
/**
* 分词正则表达式
*/
private final String SPLIT_WORD_REG_EX = "[^aoeiuv]?h?[iuv]?(ai|ei|ao|ou|er|ang?|eng?|ong|a|o|e|i|u|ng|n)?";
- 获取分词结果
/**
* 关键字分词
* @param keyword 关键字
* @return List<String> 分词列表
*/
private List<String> splitTest(String keyword) {
if (context == null || context.trim().length() <= 0) {
return Collections.emptyList();
}
List<String> keywordList = new ArrayList<>();
int index = 0;
Pattern pat = Pattern.compile(SPLIT_WORD_REG_EX);
for (int i = keyword.length(); i > 0; i = i - index) {
Matcher matcher = pat.matcher(keyword);
if (!matcher.find()) {
break;
}
keywordList.add(matcher.group());
index = matcher.end() - matcher.start();
keyword = keyword.substring(index);
}
return keywordList;
}
- 测试用例
@Test
public void test() {
String temp = "我爱罗52";
List<String> list = splitTest(temp);
System.out.println(list); //[我, 爱, 罗, 5, 2]
}
原文地址:https://blog.csdn.net/qq_45674493/article/details/134964692
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_51812.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。