一种拼音分词器的JAVA实现
原理很简单,就是模式匹配。根据中文全拼的特点,即声母和韵母配对,首先列举出所有的声母,再分别列举出所有声母对应的韵母 集,分词的过程就是遍历匹配的过程。
- public class SpellTool {
- static String result = "";// 最后要显示的结果
- private static ArrayList<ArrayList<String>> ym = new ArrayList<ArrayList<String>>();// 单字集合
- private static ArrayList<String> sm = new ArrayList<String>();// 声母集合
- private static ArrayList<String> yy = new ArrayList<String>();// 单字集合
- private static ArrayList<String> ym_b = new ArrayList<String>();// 声母b的韵母集合
- private static ArrayList<String> ym_c = new ArrayList<String>();// 声母c的韵母集合
- private static ArrayList<String> ym_d = new ArrayList<String>();// 声母d的韵母集合
- private static ArrayList<String> ym_f = new ArrayList<String>();// 声母f的韵母集合
- private static ArrayList<String> ym_g = new ArrayList<String>();// 声母g的韵母集合
- private static ArrayList<String> ym_h = new ArrayList<String>();// 声母h的韵母集合
- private static ArrayList<String> ym_j = new ArrayList<String>();// 声母j的韵母集合
- private static ArrayList<String> ym_k = new ArrayList<String>();// 声母k的韵母集合
- private static ArrayList<String> ym_l = new ArrayList<String>();// 声母l的韵母集合
- private static ArrayList<String> ym_m = new ArrayList<String>();// 声母m的韵母集合
- private static ArrayList<String> ym_n = new ArrayList<String>();// 声母n的韵母集合
- private static ArrayList<String> ym_p = new ArrayList<String>();// 声母p的韵母集合
- private static ArrayList<String> ym_q = new ArrayList<String>();// 声母q的韵母集合
- private static ArrayList<String> ym_r = new ArrayList<String>();// 声母r的韵母集合
- private static ArrayList<String> ym_s = new ArrayList<String>();// 声母s的韵母集合
- private static ArrayList<String> ym_t = new ArrayList<String>();// 声母t的韵母集合
- private static ArrayList<String> ym_w = new ArrayList<String>();// 声母w的韵母集合
- private static ArrayList<String> ym_x = new ArrayList<String>();// 声母x的韵母集合
- private static ArrayList<String> ym_y = new ArrayList<String>();// 声母y的韵母集合
- private static ArrayList<String> ym_z = new ArrayList<String>();// 声母z的韵母集合
- private static ArrayList<String> ym_sh = new ArrayList<String>();// 声母sh的韵母集合
- private static ArrayList<String> ym_zh = new ArrayList<String>();// 声母zh的韵母集合
- private static ArrayList<String> ym_ch = new ArrayList<String>();// 声母ch的韵母集合
- static {
- sm.add("b");//
- sm.add("c");
- sm.add("d");
- sm.add("f");
- sm.add("g");
- sm.add("h");
- sm.add("j");
- sm.add("k");
- sm.add("l");
- sm.add("m");
- sm.add("n");
- sm.add("p");
- sm.add("q");
- sm.add("r");
- sm.add("s");
- sm.add("t");
- sm.add("w");
- sm.add("x");
- sm.add("y");
- sm.add("z");
- sm.add("sh");
- sm.add("zh");
- sm.add("ch");
- yy.add("a");//
- yy.add("ai");
- yy.add("an");
- yy.add("ang");
- yy.add("ao");
- yy.add("e");
- yy.add("en");
- yy.add("eng");
- yy.add("er");
- yy.add("o");
- yy.add("ou");
- yy.add("ong");
- ym_b.add("a");//
- ym_b.add("ai");
- ym_b.add("an");
- ym_b.add("ang");
- ym_b.add("ao");
- ym_b.add("ei");
- ym_b.add("en");
- ym_b.add("eng");
- ym_b.add("i");
- ym_b.add("ian");
- ym_b.add("iao");
- ym_b.add("ie");
- ym_b.add("in");
- ym_b.add("ing");
- ym_b.add("o");
- ym_b.add("u");
- ym_c.add("a");// c
- ym_c.add("ai");
- ym_c.add("an");
- ym_c.add("ang");
- ym_c.add("ao");
- ym_c.add("e");
- ym_c.add("en");
- ym_c.add("eng");
- ym_c.add("i");
- ym_c.add("ong");
- ym_c.add("ou");
- ym_c.add("u");
- ym_c.add("uan");
- ym_c.add("ui");
- ym_c.add("un");
- ym_c.add("uo");
- ym_d.add("a");// d
- ym_d.add("ai");
- ym_d.add("an");
- ym_d.add("ang");
- ym_d.add("ao");
- ym_d.add("e");
- ym_d.add("ei");
- ym_d.add("en");
- ym_d.add("eng");
- ym_d.add("i");
- ym_d.add("ia");
- ym_d.add("ian");
- ym_d.add("iao");
- ym_d.add("ie");
- ym_d.add("ing");
- ym_d.add("iu");
- ym_d.add("ong");
- ym_d.add("ou");
- ym_d.add("u");
- ym_d.add("uan");
- ym_d.add("ui");
- ym_d.add("un");
- ym_d.add("uo");
- ym_f.add("a");// f
- ym_f.add("an");
- ym_f.add("ang");
- ym_f.add("ei");
- ym_f.add("en");
- ym_f.add("eng");
- ym_f.add("iao");
- ym_f.add("o");
- ym_f.add("ou");
- ym_f.add("u");
- ym_g.add("a");// g
- ym_g.add("ai");
- ym_g.add("an");
- ym_g.add("ang");
- ym_g.add("ao");
- ym_g.add("e");
- ym_g.add("ei");
- ym_g.add("en");
- ym_g.add("eng");
- ym_g.add("ong");
- ym_g.add("ou");
- ym_g.add("u");
- ym_g.add("uai");
- ym_g.add("uan");
- ym_g.add("uang");
- ym_g.add("ui");
- ym_g.add("un");
- ym_g.add("uo");
- ym_h.add("a");// h
- ym_h.add("ai");
- ym_h.add("an");
- ym_h.add("ang");
- ym_h.add("ao");
- ym_h.add("e");
- ym_h.add("ei");
- ym_h.add("en");
- ym_h.add("eng");
- ym_h.add("ong");
- ym_h.add("ou");
- ym_h.add("u");
- ym_h.add("ua");
- ym_h.add("uai");
- ym_h.add("uan");
- ym_h.add("uang");
- ym_h.add("ui");
- ym_h.add("un");
- ym_h.add("uo");
- ym_j.add("i");// j
- ym_j.add("ia");
- ym_j.add("ian");
- ym_j.add("iang");
- ym_j.add("iao");
- ym_j.add("ie");
- ym_j.add("in");
- ym_j.add("ing");
- ym_j.add("iong");
- ym_j.add("iu");
- ym_j.add("u");
- ym_j.add("uan");
- ym_j.add("ue");
- ym_j.add("un");
- ym_k.add("a");//
- ym_k.add("ai");
- ym_k.add("an");
- ym_k.add("ang");
- ym_k.add("ao");
- ym_k.add("e");
- ym_k.add("en");
- ym_k.add("eng");
- ym_k.add("ong");
- ym_k.add("ou");
- ym_k.add("u");
- ym_k.add("ui");
- ym_k.add("un");
- ym_k.add("uo");
- ym_l.add("a");// l
- ym_l.add("ai");
- ym_l.add("an");
- ym_l.add("ang");
- ym_l.add("ao");
- ym_l.add("e");
- ym_l.add("ei");
- ym_l.add("eng");
- ym_l.add("i");
- ym_l.add("ia");
- ym_l.add("ian");
- ym_l.add("iao");
- ym_l.add("ie");
- ym_l.add("in");
- ym_l.add("ing");
- ym_l.add("iu");
- ym_l.add("o");
- ym_l.add("ong");
- ym_l.add("ou");
- ym_l.add("u");
- ym_l.add("uan");
- ym_l.add("un");
- ym_l.add("uo");
- ym_l.add("v");
- ym_l.add("ve");
- ym_m.add("a");// m
- ym_m.add("ai");
- ym_m.add("an");
- ym_m.add("ang");
- ym_m.add("ao");
- ym_m.add("e");
- ym_m.add("ei");
- ym_m.add("en");
- ym_m.add("eng");
- ym_m.add("i");
- ym_m.add("ian");
- ym_m.add("iao");
- ym_m.add("ie");
- ym_m.add("in");
- ym_m.add("ing");
- ym_m.add("iu");
- ym_m.add("o");
- ym_m.add("ou");
- ym_m.add("u");
- ym_n.add("a");// n
- ym_n.add("ai");
- ym_n.add("an");
- ym_n.add("ang");
- ym_n.add("ao");
- ym_n.add("e");
- ym_n.add("ei");
- ym_n.add("en");
- ym_n.add("eng");
- ym_n.add("i");
- ym_n.add("ian");
- ym_n.add("iang");
- ym_n.add("iao");
- ym_n.add("ie");
- ym_n.add("in");
- ym_n.add("ing");
- ym_n.add("iu");
- ym_n.add("ong");
- ym_n.add("ou");
- ym_n.add("u");
- ym_n.add("uan");
- ym_n.add("un");
- ym_n.add("uo");
- ym_n.add("v");
- ym_n.add("ve");
- ym_p.add("a");// p
- ym_p.add("ai");
- ym_p.add("an");
- ym_p.add("ang");
- ym_p.add("ao");
- ym_p.add("e");
- ym_p.add("ei");
- ym_p.add("en");
- ym_p.add("eng");
- ym_p.add("i");
- ym_p.add("ian");
- ym_p.add("iao");
- ym_p.add("ie");
- ym_p.add("in");
- ym_p.add("ing");
- ym_p.add("o");
- ym_p.add("ou");
- ym_p.add("u");
- ym_q.add("i");// q
- ym_q.add("ia");
- ym_q.add("ian");
- ym_q.add("iang");
- ym_q.add("iao");
- ym_q.add("ie");
- ym_q.add("in");
- ym_q.add("ing");
- ym_q.add("iong");
- ym_q.add("iu");
- ym_q.add("u");
- ym_q.add("uan");
- ym_q.add("ue");
- ym_q.add("un");
- ym_r.add("an");// r
- ym_r.add("ang");
- ym_r.add("ao");
- ym_r.add("e");
- ym_r.add("en");
- ym_r.add("eng");
- ym_r.add("i");
- ym_r.add("ong");
- ym_r.add("ou");
- ym_r.add("u");
- ym_r.add("ua");
- ym_r.add("uan");
- ym_r.add("ui");
- ym_r.add("un");
- ym_r.add("uo");
- ym_s.add("a");// s
- ym_s.add("ai");
- ym_s.add("an");
- ym_s.add("ang");
- ym_s.add("ao");
- ym_s.add("e");
- ym_s.add("en");
- ym_s.add("eng");
- ym_s.add("i");
- ym_s.add("ong");
- ym_s.add("ou");
- ym_s.add("u");
- ym_s.add("uan");
- ym_s.add("ui");
- ym_s.add("un");
- ym_s.add("uo");
- ym_t.add("a");// t
- ym_t.add("ai");
- ym_t.add("an");
- ym_t.add("ang");
- ym_t.add("ao");
- ym_t.add("e");
- ym_t.add("ei");
- ym_t.add("eng");
- ym_t.add("i");
- ym_t.add("ian");
- ym_t.add("iao");
- ym_t.add("ie");
- ym_t.add("ing");
- ym_t.add("ong");
- ym_t.add("ou");
- ym_t.add("u");
- ym_t.add("uan");
- ym_t.add("ui");
- ym_t.add("un");
- ym_t.add("uo");
- ym_w.add("a");// w
- ym_w.add("ai");
- ym_w.add("an");
- ym_w.add("ang");
- ym_w.add("ei");
- ym_w.add("en");
- ym_w.add("eng");
- ym_w.add("o");
- ym_w.add("u");
- ym_x.add("i");// x
- ym_x.add("ia");
- ym_x.add("ian");
- ym_x.add("iang");
- ym_x.add("iao");
- ym_x.add("ie");
- ym_x.add("in");
- ym_x.add("ing");
- ym_x.add("iong");
- ym_x.add("iu");
- ym_x.add("u");
- ym_x.add("uan");
- ym_x.add("ue");
- ym_x.add("un");
- ym_y.add("a");// y
- ym_y.add("an");
- ym_y.add("ang");
- ym_y.add("ao");
- ym_y.add("e");
- ym_y.add("i");
- ym_y.add("in");
- ym_y.add("ing");
- ym_y.add("o");
- ym_y.add("ong");
- ym_y.add("ou");
- ym_y.add("u");
- ym_y.add("uan");
- ym_y.add("ue");
- ym_y.add("un");
- ym_z.add("a");//
- ym_z.add("ai");
- ym_z.add("an");
- ym_z.add("ang");
- ym_z.add("ao");
- ym_z.add("e");
- ym_z.add("ei");
- ym_z.add("en");
- ym_z.add("eng");
- ym_z.add("i");
- ym_z.add("ong");
- ym_z.add("ou");
- ym_z.add("u");
- ym_z.add("uan");
- ym_z.add("ui");
- ym_z.add("un");
- ym_z.add("uo");
- ym_ch.add("a");// ch
- ym_ch.add("ai");
- ym_ch.add("an");
- ym_ch.add("ang");
- ym_ch.add("ao");
- ym_ch.add("e");
- ym_ch.add("en");
- ym_ch.add("eng");
- ym_ch.add("i");
- ym_ch.add("ong");
- ym_ch.add("ou");
- ym_ch.add("u");
- ym_ch.add("ua");
- ym_ch.add("uai");
- ym_ch.add("uan");
- ym_ch.add("uang");
- ym_ch.add("ui");
- ym_ch.add("un");
- ym_ch.add("uo");
- ym_sh.add("a");// sh
- ym_sh.add("ai");
- ym_sh.add("an");
- ym_sh.add("ang");
- ym_sh.add("ao");
- ym_sh.add("e");
- ym_sh.add("ei");
- ym_sh.add("en");
- ym_sh.add("eng");
- ym_sh.add("i");
- ym_sh.add("ou");
- ym_sh.add("u");
- ym_sh.add("ua");
- ym_sh.add("uai");
- ym_sh.add("uan");
- ym_sh.add("uang");
- ym_sh.add("ui");
- ym_sh.add("un");
- ym_sh.add("uo");
- ym_zh.add("a");// zh
- ym_zh.add("ai");
- ym_zh.add("an");
- ym_zh.add("ang");
- ym_zh.add("ao");
- ym_zh.add("e");
- ym_zh.add("ei");
- ym_zh.add("en");
- ym_zh.add("eng");
- ym_zh.add("i");
- ym_zh.add("ong");
- ym_zh.add("ou");
- ym_zh.add("u");
- ym_zh.add("ua");
- ym_zh.add("uai");
- ym_zh.add("uan");
- ym_zh.add("uang");
- ym_zh.add("ui");
- ym_zh.add("un");
- ym_zh.add("uo");
- ym.add(yy);
- ym.add(ym_b);
- ym.add(ym_c);
- ym.add(ym_d);
- ym.add(ym_f);
- ym.add(ym_g);
- ym.add(ym_h);
- ym.add(ym_j);
- ym.add(ym_k);
- ym.add(ym_l);
- ym.add(ym_m);
- ym.add(ym_n);
- ym.add(ym_p);
- ym.add(ym_q);
- ym.add(ym_r);
- ym.add(ym_s);
- ym.add(ym_t);
- ym.add(ym_w);
- ym.add(ym_x);
- ym.add(ym_y);
- ym.add(ym_z);
- ym.add(ym_ch);
- ym.add(ym_sh);
- ym.add(ym_zh);
- }
- public static String findsm(String py) {
- char[] py2 = py.toCharArray();// 将读入字符转为char数组
- int temp = 0;
- int index = 0;//
- // 遍历声母集合,匹对
- for (int i = 0; i < sm.size(); i++) {
- for (int j = 1; j <= py2.length; j++) {
- String py3 = String.copyValueOf(py2, 0, j);// 截取从0开始到j结束的字符串
- if (py3.equals(sm.get(i))) {
- temp = sm.get(i).length();// 对应的声母的长度
- index = i + 1;
- break;
- }
- }
- }
- if (temp != 0) {
- result = result + String.copyValueOf(py2, 0, temp);// 将匹对出来的声母赋给result
- py = py.substring(temp);
- }
- // 匹对完声母后如果字符串还么结束继续匹对韵母
- if (py.length() != 0) {
- return findym(py, index);
- } else {
- return py;
- }
- }
- public static String findym(String py, int index) {
- int temp = 0;
- char[] py2 = py.toCharArray();
- for (int i = 0; i < ym.get(index).size(); i++) {
- for (int j = 1; j <= py2.length; j++) {
- String py3 = String.copyValueOf(py2, 0, j);
- if (py3.equals(ym.get(index).get(i))) {
- temp = ym.get(index).get(i).length();
- break;
- }
- }
- }
- if (temp != 0) {
- result = result + String.copyValueOf(py2, 0, temp) + " ";
- py = py.substring(temp);
- }
- return py;
- }
- /**
- * 拼音全拼分词工具
- *
- * @param pell
- * @return 以空格区分的分词后的字符串
- */
- public static String trimSpell(String spell) {
- String s = spell;
- for (int i = 0; i < spell.length() * 2; i++) {
- if (s.length() == 0) {
- break;
- }
- s = findym(s, 0);
- s = findsm(s);
- }
- return result;
- }
- public static void main(String[] args) {
- //long start = System.currentTimeMillis();
- String spell = "woaibeijintiananmen";
- String result = SpellTool.trimSpell(spell);
- //long end = System.currentTimeMillis();
- //System.out.println("用时:" + (end - start) + "毫秒");
- System.out.println(result);
- }
- }
测试:
输入:woaibeijintiananmen
输出:wo ai bei jin tian an men
=============================
输入:sousuozhongdefenciqiyouhenduozhong
输出:sou suo zhong de fen ci qi you hen duo zhong
一种拼音分词器的JAVA实现相关推荐
- CentOS安装Elasticsearch_IK分词器拼音分词器_部署kibana_部署es集群
CentOS安装Elasticsearch_IK分词器_部署kibana_部署es集群 一.部署单点es ①:创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联.这里先 ...
- Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)
Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...
- Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)
文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...
- ik与拼音分词器,拓展热词/停止词库
说明:本篇文章讲述elasticsearch分词器插件的安装,热词库停止词库的拓展,文章后面提到elasticsearch ,都是以es简称. 以下分词器的安装以ik分词器和pinyin分词器为例说明 ...
- 服务器安装配置elasticsearch,kibana,IK分词器和拼音分词器,集群搭建教程
docker安装配置elasticsearch,kibana和IK分词器 elasticsearch文章系列 前置安装docker 创建docker网络 安装Elasticsearch 运行elast ...
- ElasticSerach6.0.1测试拼音分词器,IK分词器,并且次测试语法
第一步:安装ElasticSearch 6.0.1 下载ElasticSerach,下载IK分词器 由于IK和ElasticSerach已经是编译好的,不需要编译,直接在安装解压修改配置文件即可 详情 ...
- 使用docker安装拼音分词器
要实现根据字母做补全,就必须对文档按照拼音分词. 在GitHub上恰好有elasticsearch的拼音分词插件. 地址:https://github.com/medcl/elasticsearch- ...
- 淘东电商项目(47) -商品搜索服务功能的实现(集成拼音分词器)
引言 本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop 在上一篇博客<淘东电商项目(46) -商品搜 ...
- ElasticSerach7.6.0拼音分词器安装和使用
第一步:安装ElasticSearch 7.6.0 由于IK和ElasticSerach已经是编译好的,不需要编译,直接在安装解压修改配置文件即可 详情请见另一篇安装博客:https://www.cn ...
最新文章
- c++ socket框架
- mysql带LIKE 关键字的查询
- git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
- WebRtc音视频实时通信--基本术语
- js中的墙头草---this
- java防止undo空间撑爆_秒杀系统设计补坑篇(seata回顾)
- xcode w情ndows版,xcode Windows版安装使用介绍
- Mybatis高级应用 整合Ehcache
- 基于JAVA+SpringMVC+Mybatis+MYSQL的酒店客房管理系统
- 机器视觉:USB 3.0知识答疑
- UITableView介绍 之 复杂cell的高度计算
- 关于在IE浏览器下按钮或者链接点击时出现outline的解决方法
- 在线教育开源 java_新款SpringBoot在线教育平台开源了
- 图解项目研发流程与制度实例
- 有没有什么好用的pdf编辑软件?3款App轻松编辑所有PDF文件
- 二维码制作软件生成二维码时的参数设置
- win10计算机方差,标准差计算工具
- 53页PPT | 湖仓一体大数据平台解决方案
- Vue引入并使用Element-UI组件库的两种方式
- SpringBoot+Vue项目实现高校学生健康打卡系统