java 支持分词的拼音转换高性能工具,速度是 pinyin4j 的两倍

本文主要是介绍java 支持分词的拼音转换高性能工具,速度是 pinyin4j 的两倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

pinyin

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

变更日志

创作目的

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

如何为 java 设计一款高性能的拼音转换工具 pinyin4j

特性

  • 性能是 pinyin4j 的两倍

  • 极简的 api 设计

  • 支持转换长文本

  • 支持多音字

  • 支持多种拼音标注方式

  • 支持中文分词

快速开始

准备

jdk 1.7+

maven 引入

<dependency><groupId>com.github.houbb</groupId><artifactId>pinyin</artifactId><version>0.0.4</version>
</dependency>

快速开始

参考 PinyinBsTest

返回中文的拼音

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

指定拼音标注形式

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

测试案例

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

后期 Road-Map

  • 支持中文繁简体

默认关闭该功能

  • 拼音转汉字

用户自定义相关

  • 用户自定义词组

  • 用户自定义分词

benchmark

测试代码见 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 提供的中文分词。

这篇关于java 支持分词的拼音转换高性能工具,速度是 pinyin4j 的两倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259278

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We