android 汉字转拼音带多音字识别功能,供大家参考,具体内容如下

问题来源
在做地名按首字母排序的时候出现了这样一个bug。长沙会被翻译拼音成zhangsha,重庆会被翻译拼音成zhong qing。于是排序出了问题。
汉字转拼音库和多音字识别库
1.多音字对应的词汇库
2.文字的二进制大小对应的拼音库
关键代码
1.我在这里首先将要转化的文字转化成对应的”gb2312”编码。汉字转化成二进制编码一般占两个字节,如果一个字节返回字符,如果是两个字节算一下偏移量。代码如下
/** * 汉字转成ASCII码 * * @param chs * @return */
private int getChsAscii(String chs) {
int asc = 0;
try {
byte[] bytes = chs.getBytes("gb2312");
if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
throw new RuntimeException("illegal resource string");
}
if (bytes.length == 1) {
asc = bytes[0];
}
if (bytes.length == 2) {
int hightByte = 256 + bytes[0];
int lowByte = 256 + bytes[1];
asc = (256 * hightByte + lowByte) - 256 * 256;
}
} catch (Exception e) {
System.out.println("ERROR:ChineseSpelling.class-getChsAscii(String chs)" + e);
}
return asc;
}
2.将单个汉字获取的拼音再和多音字库的hashMap进行比较,代码如下:
public String getSellingWithPolyphone(String chs){
if(polyphoneMap != null && polyphoneMap.isEmpty()){
polyphoneMap = initDictionary();
}
String key, value, resultPy = null;
buffer = new StringBuilder();
for (int i = 0; i < chs.length(); i++) {
key = chs.substring(i, i + 1);
if (key.getBytes().length >= 2) {
value = (String) convert(key);
if (value == null) {
value = "unknown";
}
} else {
value = key;
}
resultPy = value;
String left = null;
if(i>=1 && i+1 <= chs.length()){
left = chs.substring(i-1,i+1);
if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(left)){
resultPy = value;
}
}
// if(chs.contains("重庆")){
String right = null; //向右多取一个字,例如 [长]沙
if(i<=chs.length()-2){
right = chs.substring(i,i+2);
if(polyphoneMap.containsKey(right)){
resultPy = polyphoneMap.get(right);
}
}
// }
String middle = null; //左右各多取一个字,例如 龙[爪]槐
if(i>=1 && i+2<=chs.length()){
middle = chs.substring(i-1,i+2);
if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(middle)){
resultPy = value;
}
}
String left3 = null; //向左多取2个字,如 芈月[传],列车长
if(i>=2 && i+1<=chs.length()){
left3 = chs.substring(i-2,i+1);
if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(left3)){
resultPy = value;
}
}
String right3 = null; //向右多取2个字,如 [长]孙无忌
if(i<=chs.length()-3){
right3 = chs.substring(i,i+3);
if(polyphoneMap.containsKey(value) && polyphoneMap.get(value).contains(right3)){
resultPy = value;
}
}
buffer.append(resultPy);
}
return buffer.toString();
}
3.将asserts文件内容解析生成HashMap列表.
public HashMap<String, String> initDictionary(){
String fileName = "py4j.dic";
InputStreamReader inputReader = null;
BufferedReader bufferedReader = null;
HashMap<String, String> polyphoneMap = new HashMap<String, String>();
try{
inputReader = new InputStreamReader(MyApplication.mContext.getResources().getAssets().open(fileName),"UTF-8");
bufferedReader = new BufferedReader(inputReader);
String line = null;
while((line = bufferedReader.readLine()) != null){
String[] arr = line.split(PINYIN_SEPARATOR);
if(isNotEmpty(arr[1])){
String[] dyzs = arr[1].split(WORD_SEPARATOR);
for(String dyz: dyzs){
if(isNotEmpty(dyz)){
polyphoneMap.put(dyz.trim(),arr[0]);
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(inputReader != null){
try {
inputReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return polyphoneMap;
}
github源码下载:https://github.com/loveburce/ChinesePolyphone.git
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android汉字转拼音
# android多音字识别
# android汉字拼音互转
# Android实现中文按拼音排序方法
# Android实现ListView的A-Z字母排序和过滤搜索功能 实现汉字转成拼音
# android仿微信通讯录搜索示例(匹配拼音
# 字母
# 索引位置)
# Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能
# android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)
# android开发教程之实现toast工具类
# 19个Android常用工具类汇总
# android 一些工具类汇总
# Android7.0 工具类:DiffUtil详解
# 非常实用的Android图片工具类
# Android开发之拼音转换工具类PinyinUtils示例
# 重庆
# 一个字
# 个字
# 转化成
# 出了
# 长沙
# 这样一个
# 我在这里
# 具体内容
# 转成
# 无忌
# 大家多多
# 源码下载
# 出现了
# 首字母
# 偏移量
# public
# throw
# hashMap
# illegal
相关文章:
网站按钮制作软件,如何实现网页中按钮的自动点击?
建站之星与建站宝盒如何选择最佳方案?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
网站设计制作企业有哪些,抖音官网主页怎么设置?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
网站插件制作软件免费下载,网页视频怎么下到本地插件?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
宝塔建站无法访问?如何排查配置与端口问题?
制作营销网站公司,淘特是干什么用的?
贸易公司网站制作流程,出口贸易网站设计怎么做?
在线教育网站制作平台,山西立德教育官网?
C++中引用和指针有什么区别?(代码说明)
香港服务器部署网站为何提示未备案?
制作网站的软件免费下载,免费制作app哪个平台好?
如何用花生壳三步快速搭建专属网站?
建站之星2.7模板快速切换与批量管理功能操作指南
建站主机与服务器功能差异如何区分?
黑客入侵网站服务器的常见手法有哪些?
广东企业建站网站优化与SEO营销核心策略指南
如何在阿里云完成域名注册与建站?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何快速搭建二级域名独立网站?
SQL查询语句优化的实用方法总结
,在苏州找工作,上哪个网站比较好?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何通过云梦建站系统实现SEO快速优化?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
nginx修改上传文件大小限制的方法
XML的“混合内容”是什么 怎么用DTD或XSD定义
建站之星代理平台如何选择最佳方案?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
微信h5制作网站有哪些,免费微信H5页面制作工具?
已有域名如何免费搭建网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
如何选择可靠的免备案建站服务器?
如何选择高效稳定的ISP建站解决方案?
南京网站制作费用,南京远驱官方网站?
焦点电影公司作品,电影焦点结局是什么?
网站企业制作流程,用什么语言做企业网站比较好?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
哈尔滨网站建设策划,哈尔滨电工证查询网站?
高端建站三要素:定制模板、企业官网与响应式设计优化
建站之星如何配置系统实现高效建站?
小程序网站制作需要准备什么资料,如何制作小程序?
*请认真填写需求信息,我们会在24小时内与您取得联系。