Java实现汉字拼音转换和关键字分词(pinyin4j、hanlp)

文章目录

  • pinyin4j
  • hanlp
  • 关键字分词

pinyin4j

  1. 添加maven依赖
<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.0</version>
</dependency>
  1. 获取文本拼音
 /*** 获取文本拼音* @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);//不是汉字会返回nullif (pinyin == null || pinyin.length <= 0) {if (existNotPinyin) {builder.append(aChar);}continue;}//多音字的情况取第一个(也可以全取)builder.append(pinyin[0]);}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return builder.toString().toUpperCase();}
  1. 测试用例
@Test
public void test() {String temp = "我爱罗52";String list = pinyinTest(temp, false); //WOAILUO
}

hanlp

  1. 添加Maven依赖
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.4</version>
</dependency>
  1. 获取文本拼音
 /*** 获取文本拼音* @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();
}
  1. 测试用例
@Test
public void test() {String temp = "我爱罗52";System.out.println(hanLpTest(temp, true)); //WOAILUO52
}

关键字分词

  1. 正则表达式
/*** 分词正则表达式*/
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)?";
  1. 获取分词结果
/*** 关键字分词* @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;
}
  1. 测试用例
 @Testpublic void test() {String temp = "我爱罗52";List<String> list = splitTest(temp);System.out.println(list); //[我, 爱, 罗, 5, 2]}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/595735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机组成原理-总线标准(系统总线 局部总线 设备总线)

文章目录 总览例子总线标准的基本概念系统总线标准局部总线标准设备总线标准对比小结为何串行总线取代并行总线 总览 例子 总线标准的基本概念 北桥芯片速度大于南桥芯片 系统总线标准 ISA和EISA都是并行总线 Intel提出了FBS总线标准比EISA和ISA快&#xff0c;后来又提出来…

LeetCode(31) 下一个排列

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地&#xf…

linux没有在/etc/passwd里的用户如何修改默认 shell(zsh)

找了半天终于找到解决办法&#xff0c;记录一下&#xff01; 不在/etc/passwd, 是因为用户数据库存储在其他地方&#xff0c;例如LDAP 这样的话&#xff0c;只能在.bashrc最后&#xff0c;添加 exec -l zsh 就是每次先登入到bash再切到zsh&#xff0c;不这样的话每次登入ba…

创作活动(七十一)———编程语言未来的发展方向

#编程语言的未来&#xff1f;# 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 编…

数据结构期末复习(1)数据结构和算法 线性表

数据结构期末总复习&#xff08;gaois课堂版&#xff09; 数据结构的概念 数据结构是计算机科学中的一个重要概念&#xff0c;它指的是组织和存储数据的方式。数据结构可以帮助我们高效地操作和管理数据&#xff0c;使得计算机程序能够更加有效地执行各种任务。 数据结构有很…

防火墙未开端口导致zookeeper集群异常,kafka起不来

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 主机信息&#xff1a; IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…

山西电力市场日前价格预测【2024-01-05】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-05&#xff09;山西电力市场全天平均日前电价为259.10元/MWh。其中&#xff0c;最高日前电价为363.99元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

CMakeLists.txt 怎么写

写程序的大体步骤就是&#xff1a;首先用编辑器编写源代码&#xff0c;如.c文件&#xff1b;然后经过预处理、编译和汇编生成可重定位目标文件&#xff0c;也就是.o&#xff08;Unix下&#xff09;文件&#xff1b;最后通过链接器将所有的.o以及用到的库文件链接成可执行文件。…

K8S Dashboard登录Token过期问题处理

整体思路 用户访问一个页面&#xff0c;在该页面中设置一个超链接&#xff0c;点击跳转至K8S Dashboard&#xff1b;跳转后&#xff0c;使用剪贴板上已复制的Token粘贴到Dashboard页面中的输入框登录即可。 写个定时任务将Token复制到页面上&#xff0c;过期了重新再登…

Linux第1步_VMware软件安装

1、双击“VMware-workstation-full-15.5.0-14665864”&#xff0c;得到下面的界面&#xff1a; 2、等待几分钟&#xff0c;得到下面的界面&#xff1a; 3、点击“下一步” 4、勾选“我接受许可协议中的条款(A)”&#xff0c;见下图&#xff1a; 5、点击“下一步”&#xff0c;得…

阿里云Alibaba Cloud Linux 3镜像版本大全特性说明

Alibaba Cloud Linux阿里云打造的Linux服务器操作系统发行版&#xff0c;Alibaba Cloud Linux完全兼容完全兼容CentOS/RHEL生态和操作方式&#xff0c;目前已经推出Alibaba Cloud Linux 3&#xff0c;阿里云百科aliyunbaike.com分享Alibaba Cloud Linux 3版本特性说明&#xff…

使用通用MCU实现无人机飞行任务的快速二次开发

使用通用MCU实现无人机飞行任务的快速二次开发 ---TIDronePilot外部控制offboard模式介绍 无名小哥 2024年1月1日 传统飞控二次开发方法和主要存在的问题简介 通过对前面几讲中《零基础竞赛无人机积木式编程指南》系列开发教程的学习可知&#xff0c;在以往TI电赛真题的学习…

K8S学习指南(59)-K8S核心组件ETCD简介

文章目录 前言一、设计思路1.1 一致性与可靠性1.2 分布式键值存储 二、在K8S集群中的主要功能2.1 配置存储2.2 选主与高可用2.3 服务发现 三、内部工作原理3.1 Raft一致性算法3.2 快照和日志3.3 分布式事务 四、与其他NoSQL产品的比较4.1 优势4.1.1 一致性4.1.2 性能 4.2 劣势4…

RK3568驱动指南|第九篇 设备模型-第101章 总线注册流程理论分析实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

力扣hot100 二叉树展开为链表 递归 特殊遍历

&#x1f468;‍&#x1f3eb; 题目地址 &#x1f469;‍&#x1f3eb; 参考题解 &#x1f60b; 将左子树插入到右子树上 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* …

C/C++动态内存分配 malloc、new、vector(简单讲述)

路虽远&#xff0c;行则将至 事虽难&#xff0c;做则必成 今天来主要讲C中动态内存分配 其中会穿插一些C的内容以及两者的比较 如果对C语言中的动态内存分配还不够理解的同学 可以看看我之前的博客:C语言动态分配 在讲解C的动态内存分配之前 我们先讲一下C内存模型 &#xff1…

CSS免费在线字体格式转换器 CSS @font-face 生成器

今天竟意外发现的一款免费的“网页字体生成器”&#xff0c;功能强大又好用~ 工具地址&#xff1a;https://transfonter.org/ 根据你设置生成后的文件预览&#xff1a; 支持TTF、OTF、WOFF、WOFF2 或 SVG字体格式转换生成&#xff0c;每个文件最大15MB。转换完成以后还会生成一…

宏集PC Runtime软件助推食品行业生产线数字化革新

一、前言 近年来&#xff0c;中国食品行业发展迅速且灵活多变&#xff0c;在当前经济下行的情形下&#xff0c;食品行业正面临着日益激烈的竞争&#xff0c;导致企业利润下降。 为了保持企业市场竞争力&#xff0c;国内某top10食品企业采用宏集SCADA解决方案—PC Runtime软件…

数学公式编译器MathType下载与安装

下载网址&#xff1a;下载 MathType - WIRIS Store 1.点击【下载MathType for Windows】 2、点击中文版 3.找到所下载的目录&#xff1a; 右击-->以管理员身份运行 4、新建word文档 点击文件->账户->关于word 5.点击【文件】、【选项】&#xff0c;❶点击【加载项】…

有趣的数学 为什么素数在密码学中很重要?

这里我们将探讨为什么素数在密码学中很重要。我们将根据特定的密码系统&#xff08; RSA 算法&#xff09;来进行深入了解。 一、素数的特殊性 每个数字都可以分解为它的素数。一般来说&#xff0c;找到一个数的因数是非常困难的。要找到一个自然数的所有素因数&#xff0c;必…