【自然语言实战】·第二章(1.1)——获取词语首字字母
一、maven依赖
<dependency><groupId>net.sourceforge.pinyin4j</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version></dependency>
二、示例代码
import com.pingan.lcloud.ark.log.LoggerUtil;
import net.sourceforge.pinyin4j.PinyinHelper;
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;import java.lang.annotation.Native;
import java.util.Objects;/*** <code>Details determine success.</code>* by Liang ZC., Phd@Stanford* 中文工具类** @author LIANGZHICHENG035* @date 2019-11-6 15:57* @see http://www.stanford.edu*/
public class ChineseUtils {/** N777777777NO* N7777777777777N* M777777777777777N* *N877777777D77777M* N M77777777ONND777M* MN777777777NN D777* N7ZN777777777NN ~M7778* N777777777777MMNN88777N* N777777777777MNZZZ7777O* DZN7777O77777777777777* N7OONND7777777D77777N* 8*M++++?N???$77777$* M7++++N+M77777777N* N77O777777777777$ M* DNNM$$$$777777N D* N*N:=N$777N7777M NZ* 77Z::::N777777777 ODZZZ* 77N::::::N77777777M NNZZZ$* $777:::::::77777777MN ZM8ZZZZZ* 777M::::::Z7777777Z77 N++ZZZZNN* 7777M:::::M7777777$777M $++IZZZZM* M777$:::::N777777*M7777M +++++ZZZDN* NN$::::::7777$*M777777N N+++ZZZZNZ* N::::::N:7*O:77777777 N++++ZZZZN* M::::::::::::N77777777+ +?+++++ZZZM* 8::::::::::::D77777777M O+++++ZZ* ::::::::::::M777777777N O+?D* M:::::::::::M77777777778 77=* D=::::::::::N7777777777N 777* INN===::::::=77777777777N I777N* ?777N========N7777777777787M N7777* 77777*D======N77777777777N777N? N777777* I77777$$*N7===M$$77777777$77777777*MMZ77777777N* $$$$$$$$$$*NIZN$$$$$$$$*M$$7777777777777777ON* M$$$$$$$*M M$$$$$$$*N=N$$$$7777777$$*ND* O77Z$$$$$$$ M$$$$$$$*MNI==*DNNNNM=~N* 7 :N MNN$$$*M$ $$$777$8 8D8I* NMM.:7O 777777778* 7777777MN* M NO .7:* M : M* 8*/// Constant matcher factory methodspublic ChineseUtils() {}private static final String PUNCTUATION = "\\pP";/**** <p>get chinese initail, if the first char is number return the number, if it is a polysyllabic character,* take only the first one, if the chinese initail is empty return {@param defaultValue}.<p/>** <pre>* ChineseUtils.getChineseInitial("我爱中国")) = W* ChineseUtils.getChineseInitial("爱中国")) = A* ChineseUtils.getChineseInitial("1爱中国") = 1* ChineseUtils.getChineseInitial("中国")) = Z* ChineseUtils.getChineseInitial("@#国")) = G* ChineseUtils.getChineseInitial("国%$")) = G* ChineseUtils.getChineseInitial("国")) = G* ChineseUtils.getChineseInitial("W我爱中国")) = W* ChineseUtils.getChineseInitial("I我爱中国")) = I* ChineseUtils.getChineseInitial("null")) = N* ChineseUtils.getChineseInitial(null)) = ""* ChineseUtils.getChineseInitial("")) = ""* ChineseUtils.getChineseInitial(",")) = ""* <pre/>** @param chinese* @param defaultValue* @return the pinyin of first chinese char,if {@param chinese} is't chinese,return {@link StringUtils.EMPTY}.*/public static String getChineseInitialDefaultIfEmpty(String chinese, String defaultValue) {String result = getChineseInitial(chinese, true);return StringUtils.isEmpty(result) ? defaultValue : result;}/**** <p>get chinese initail, if the first char is number return the number, if it is a polysyllabic character,* take only the first one.<p/>** <pre>* ChineseUtils.getChineseInitial("我爱中国")) = W* ChineseUtils.getChineseInitial("爱中国")) = A* ChineseUtils.getChineseInitial("1爱中国") = 1* ChineseUtils.getChineseInitial("中国")) = Z* ChineseUtils.getChineseInitial("@#国")) = G* ChineseUtils.getChineseInitial("国%$")) = G* ChineseUtils.getChineseInitial("国")) = G* ChineseUtils.getChineseInitial("W我爱中国")) = W* ChineseUtils.getChineseInitial("I我爱中国")) = I* ChineseUtils.getChineseInitial("null")) = N* ChineseUtils.getChineseInitial(null)) = ""* ChineseUtils.getChineseInitial("")) = ""* ChineseUtils.getChineseInitial(",")) = ""* <pre/>** @param chinese* @return the pinyin of first chinese char,if {@param chinese} is't chinese,return {@link StringUtils.EMPTY}.*/public static String getChineseInitial(String chinese) {return getChineseInitial(chinese, true);}/**** <p>get chinese initail, if the first char is number return the number, if it is a polysyllabic character,* take only the first one.<p/>** <pre>* ChineseUtils.getChineseInitial("我爱中国") = W* ChineseUtils.getChineseInitial("爱中国") = A* ChineseUtils.getChineseInitial("1爱中国") = 1* ChineseUtils.getChineseInitial("中国") = Z* ChineseUtils.getChineseInitial("@#国") = G* ChineseUtils.getChineseInitial("国%$" = G* ChineseUtils.getChineseInitial("国") = G* ChineseUtils.getChineseInitial("W我爱中国") = W* ChineseUtils.getChineseInitial("I我爱中国") = I* ChineseUtils.getChineseInitial("null") = N* ChineseUtils.getChineseInitial(null) = ""* ChineseUtils.getChineseInitial("") = ""* ChineseUtils.getChineseInitial(",") = ""* <pre/>** @param chinese* @param removePunctuation is remove the punctuation in {@param chinese}.* @return the pinyin of first chinese char,if {@param chinese} is't chinese,return {@link StringUtils.EMPTY}.*/public static String getChineseInitial(String chinese, boolean removePunctuation) {// if need remove punctuation.if (removePunctuation) {chinese = removePunctuation(chinese);}// if chinese is blankif (StringUtils.isBlank(chinese)) {return StringUtils.EMPTY;}// first char.char firstChar = chinese.charAt(0);// if first char in [a-z,A-Z,0-9]if (CharUtils.isAsciiAlphanumeric(firstChar)) {return CharUtils.toString(firstChar).toUpperCase();}// if is chinese.boolean isChinese = CharUtils.toString(firstChar).matches("[\u4E00-\u9FA5]+");if (!isChinese) {return StringUtils.EMPTY;}// chinese to pinyin and get first char.try {String[] res = PinyinHelper.toHanyuPinyinStringArray(firstChar);return res[0].substring(0, 1).toUpperCase();} catch (Exception e) {LoggerUtil.warn("get " + chinese + " chinese initial fail.", e);}return StringUtils.EMPTY;}/*** <p>replace {@param str} punctuation to "", if {@param str} is empty , return {@link StringUtils.EMPTY}.</p>** <pre>* ChineseUtils.removePunctuation(null) = ""* ChineseUtils.removePunctuation("") = ""* ChineseUtils.removePunctuation(" ") = ""* ChineseUtils.removePunctuation("我爱中国") = 我爱中国* ChineseUtils.removePunctuation("我爱中国!") = 我爱中国* ChineseUtils.removePunctuation("我爱中国。") = 我爱中国* ChineseUtils.removePunctuation("我爱中国.") = 我爱中国* ChineseUtils.removePunctuation(" 我爱中国. ") = 我爱中国* </pre>** @param str* @return string*/public static String removePunctuation(String str) {if (StringUtils.isEmpty(str)) {return StringUtils.EMPTY;}return str.trim().replaceAll(PUNCTUATION, StringUtils.EMPTY);}}
三、运行结果
public static void main(String[] args) {System.out.println(ChineseUtils.getChineseInitial("我爱中国"));System.out.println(ChineseUtils.getChineseInitial("爱中国"));System.out.println(ChineseUtils.getChineseInitial("1爱中国"));System.out.println(ChineseUtils.getChineseInitial("中国"));System.out.println(ChineseUtils.getChineseInitial("@#国"));System.out.println(ChineseUtils.getChineseInitial("国%$"));System.out.println(ChineseUtils.getChineseInitial("国"));System.out.println(ChineseUtils.getChineseInitial("W我爱中国"));System.out.println(ChineseUtils.getChineseInitial("I我爱中国"));System.out.println(ChineseUtils.getChineseInitial("null"));System.out.println(ChineseUtils.getChineseInitial(null));System.out.println(ChineseUtils.getChineseInitial(""));System.out.println(ChineseUtils.getChineseInitial(","));}
W
A
1
Z
G
G
G
W
I
N
https://pan.baidu.com/s/18R8DGiGAkHdtafYLBlTVvg 提取码: h4jm
【自然语言实战】·第二章(1.1)——获取词语首字字母相关推荐
- 基于python的界面自动化测试-基于Python语言的自动化测试实战第二章(上)
原标题:基于Python语言的自动化测试实战第二章(上) 测试环境搭建 2.1 Windows 下的环境搭建 如果想要学习一门编程语言,对于新手来说只需到其官方网站上去下载最新版本安装即可,但对于想要 ...
- 数字图像处理:第二章 图象获取、显示、表示与处理
第二章 图象获取.显示.表示与处理 图象获取是图象的数字化过程,显示则是将数字图象转化为适合人们使用的形式,而处理是通过软件对图象进行变换操作的过程. 目录 图象获取 图象显示 图象表示 图象处理 参 ...
- 2021-9-2 第二章 空间数据的获取 155319
第二章 空间数据的获取 2.1 空间数据的内容与特征 2.1.1 地理空间数据的内容 数字线划数据(Digital Line Graph,DLG) DLG:地形图上基础地理要素的矢量数据集,将空间 ...
- php 将中文字符转英文字母_PHP实现将汉字转换为拼音及获取词语首字母的方法...
本文实例讲述了PHP实现将汉字转换为拼音及获取词语首字母的方法.分享给大家供大家参考,具体如下: 最近要开发将汉字转换为拼音和得到首字的功能记录下来哈子:呵呵~ class Pinyin{ priva ...
- JAVA获取字符串首字拼音和全拼
JAVA获取字符串首字拼音或者全部拼音,用的是pinyin4j. import java.util.ArrayList; import java.util.Hashtable; import java ...
- linux VCS+verdi运行UVM实战(第二章)中的例子
目录 前言 介绍 建立工程 运行代码 查看波形 总结 前言 用VCS+verdi运行了下UVM实战中的例子(第二章). 介绍 在某宝上花了几十块,买了个虚拟机(已经安装好VCS+verdi).直接用U ...
- 并发编程实战-第二章学习
"共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值再其声明周期内可以发生变化. 如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那 ...
- 机器学习实战-第二章代码+注释-KNN
#-*- coding:utf-8 -*- #https://blog.csdn.net/fenfenmiao/article/details/52165472 from numpy import * ...
- .NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
内容:本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 在这一篇文章中我们希望使用Ope ...
最新文章
- RDKit:计算不同分子或构象之间的RMSD
- pci中断号分配_西门子S7-200 SMART中断及中断指令概述
- JS实现表格Table动态添加删除行
- Oracle 11g 下载及安装教程
- Python实战-获取鼠标键盘事件
- MySQL函数笔记_MySQL笔记之数学函数详解
- 二十一天学通Java:调用对象为null值的引用
- x86汇编之任务切换
- SpreadJS 纯前端表格控件应用案例:立信智能审计云平台(SACP)
- python电子病历交接班系统_电子病历的进展
- golang报错:slice bounds out of range
- win2012+r2+php+mysql_Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
- 说说在JAVA中使用Redis,以及Redis分布锁
- 【Sass/SCSS】我花4小时整理了的Sass的函数
- STL源码剖析(一)STL简介
- 不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事...
- 一文读懂——光纤通信技术
- AVI常用的压缩算法
- 大牌网站都在用的字体,专治选择困难症!|附字体
- 软件工程-需求工程-UML
热门文章
- 在《进击的巨人》中,你同情谁?
- 世界一流企业,谁不是靠模仿起家的?
- 电脑上计算机中的文档怎么变成格子样,电脑有的软件文字显示小方格是怎么回事?怎样解决?...
- 央视影音 服务器暂时无法连接服务器,央视影音APP播放不了怎样办 打开不知道决办法...
- 用 TensorFlow Extended 实现可扩展、快速且高效的 BERT 部署 (一)
- allegro问题总结记录
- 超级右键--Mac上最强的右键菜单工具
- vscode搭建opencv4.5.5+opencv_contrib4.5.5开发环境
- 使用FRP进行内网穿透的最佳实践
- 南方iData数据工厂(一个平台,一套数码,一体化生产):构建基础空间数据的好平台