时间:2015-04-09 来源:

Lucene实现自定义中文同义词分词器 【编程语言】

---------------------------------------------------------- lucene的分词_中文分词介绍 ---------------------------------------------------------- Paoding:庖丁解牛分词器.已经没有更新了 mmseg:使用搜狗的词库 1.导入包(有两个包:1.带dic的web前端制作,2.不带dic的) 如果使用不带dic的,web前端制作得自己指定词库位置 2.创建MMSegAnalyzer(指明词库所在的位置)

---------------------------------------------------- lucene的分词_实现自定义同义词分词器_实现分词器(良好设计方案) ---------------------------------------------------- 思路:针对接口编程才是王道 1.创建管理同义词的接口 /* * 用于存储同义词的接口 */ public interface MySameContxt { //获取同义词String[] public String[] getSameWords(String name); } 2.实现接口div前端切图, String[]> maps = new HashMap<String, new String[] { "俺", new String[] { "鱼米之乡", "湘" }); } public String[] getSameWords(String name) { return maps.get(name); } } 3.自定义的分词器的过滤器中TokenFilter中添加同义词属性 // 获取专门管理同义词的库 private MySameContxt sameContxt;

全代码 /* * 自定义同义词分词过滤器 */ public class MySameTokenFilter extends TokenFilter { // 存储分词数据 private CharTermAttribute cta = null; // 存储语汇单元的位置信息 private PositionIncrementAttribute pia = null; // 添加是否有同义词的判断变量属性,jpg或psd转html保存当前元素的状态信息 private AttributeSource.State current; // 栈存储 private Stack<String> sames = null; // 获取专门管理同义词的库 private MySameContxt sameContxt; protected MySameTokenFilter(TokenStream input, MySameContxt sameContxt) { super(input); cta = this.addAttribute(CharTermAttribute.class); pia = this.addAttribute(PositionIncrementAttribute.class); sames = new Stack<String>(); this.sameContxt = sameContxt; } @Override public boolean incrementToken() throws IOException { // 保存上一个语汇的同义词 while (sames.size() > 0) { // 出栈,web前端制作并获取同义词 String str = sames.pop(); // 还原上一个语汇的状态 restoreState(current); // 在上一个语汇上保存元素 cta.setEmpty(); cta.append(str); // 设置同义词位置为0 pia.setPositionIncrement(0); return true; } // 跳到下个cta if (!this.input.incrementToken()) // 没有元素返回false return false; if (getSameWords(cta.toString())) { // 如果有同义词承接网页制作,改变词汇的current状态信息,承接网页制作把当前状态保存(捕获当前状态) current = captureState(); } return true; } /* * * 获取同义词 */ private Boolean getSameWords(String name) { // 通过接口sameContxt获取同义词的所有String[] String[] sws = sameContxt.getSameWords(name); if (sws != null) { // 添加进栈中 for (String str : sws) { sames.push(str); } return true; } return false; } } 4.实现TokenStream /* * 实现自定义中文同义词分词器(mmseg词库) */ public class MySameAnalyzer extends Analyzer { // 添加同义词词库 private MySameContxt sameContxt; public MySameAnalyzer(MySameContxt msc) { this.sameContxt = msc; } @Override public TokenStream tokenStream(String fieldName, read), new IndexWriterConfig( Version.LUCENE_35, txt, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); // 创建搜索 IndexReader reader = IndexReader.open(dir); IndexSearcher search = new IndexSearcher(reader); TopDocs tds = search.search(new TermQuery(new Term("content", 10); for (ScoreDoc sdc : tds.scoreDocs) { Document docc = search.doc(sdc.doc); System.out.println(docc.get("content")); } // new AnalyzerUtils().displayToken(txt, Reader read) { Dictionary dic = Dictionary .getInstance("F:\\BaiduYunDownload\\Cache\\lucune\\chinesedic"); return new MySameTokenFilter(new MMSegTokenizer(new MaxWordSeg(dic), read)); } } --------------------------------------------------------- lucene的分词_实现自定义同义词分词器_实现分词器 --------------------------------------------------------- Reader  ---->MMSegTokenizer(进行分词)---->(添加同义词)MySameTokenFilter(自定义分词器)---->获取同义词(在相同的位置存储同义词) --->发现同义词--->保存当前状态--->跳到下一个元素--->根据同义词列表来存储元素--->还原状态--->在同一位置保存元素

/* * 自定义同义词分词过滤器 */ public class MySameTokenFilter extends TokenFilter { // 存储分词数据 private CharTermAttribute cta = null; // 存储语汇单元的位置信息 private PositionIncrementAttribute pia = null; // 添加是否有同义词的判断变量属性,html切图制作保存当前元素的状态信息 private AttributeSource.State current; // 栈存储 private Stack<String> sames = null; protected MySameTokenFilter(TokenStream input) { super(input); cta = this.addAttribute(CharTermAttribute.class); pia = this.addAttribute(PositionIncrementAttribute.class); sames = new Stack<String>(); } @Override public boolean incrementToken() throws IOException { // 保存上一个语汇的同义词 while (sames.size() > 0) { // 出栈网页外包接活,并获取同义词 String str = sames.pop(); // 还原上一个语汇的状态 restoreState(current); // 在上一个语汇上保存元素 cta.setEmpty(); cta.append(str); // 设置同义词位置为0 pia.setPositionIncrement(0); return true; } // 跳到下个cta if (!this.input.incrementToken()) // 没有元素返回false return false; if (getSameWords(cta.toString())) { // 如果有同义词,网页外包接活改变词汇的current状态信息web前端制作, String[]> maps = new HashMap<String, new String[] { "俺", new String[] { "鱼米之乡", "湘" }); String[] sws = maps.get(name); if (sws != null) { // 添加进栈中 for (String str : sws) { sames.push(str); } return true; } return false; } }

----------------------------------------------------------

点击次数:6813
作者:
web前端行业资讯
Web new NewsList
Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日苹果经典电脑Lisa源代码修复完成将于2018年开源 ,,2017年12月28日腾讯浏览指数发布年终榜单2017年人们都关注哪些AI话题? ,,2017年12月28日除了发现开普勒90,NASA还靠AI做了什么? ,,2017年12月28日柯洁宣布:明年4月,将再次与围棋AI交锋 ,,2017年12月28日百度无人车美国首秀CES将发布Apollo2.0 ,,2017年12月28日这四种技术发展趋势将在2018年改变世界 ,,2017年12月28日2017:谷歌DeepMind团队的年度回顾 ,,2017年12月28日封杀这个公式,AI智商将为零 ,,2017年12月28日微软AI高管:要让所有人、所有机构都用上人工智能 ,,2017年12月28日为什么Linux桌面年一直未到来 ,,2017年12月28日AppleLisa操作系统将开源 ,,2017年12月28日2018年9大技术趋势预测 ,,2017年12月28日谷歌研究院发布NIMA:能评价图像有多美,还能让图像变得更美 ,,2017年12月28日苹果为2019年iPhone开发大容量电池新技术 ,,2017年12月28日谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日继“Angel”开源后,腾讯又开放TDinsight机器学习平台 ,,2017年12月21日360进军手机产业-用户提供高配置零利润智能手机 ,,2016年06月23日Redis_字典 【编程语言】2015年07月20日实用代码4 【数据库】2014年11月24日YII数据处理DAO【编程语言】2014年11月04日Oracle查看所有的Job 【系统运维】2015年01月07日互联网+的首要任务是拆围墙【互联网】2015年06月24日asp.net(C#)解析Json的类代码2014年01月29日asp中静态页面实现方法2014年01月29日第0004道练习题_Python统计文本里单词出现次数 【编程语言】2015年08月14日DICOM:TransferSyntax传输语义之奇葩GEPrivateTS 【Web前端】2015年08月04日TinyOS学习-Ubuntu12.04LTS安装TinyOS2.1.1后maketelosb报错之解决方案 【编程语言】2015年01月21日CP之改进 【编程语言】2015年04月27日WCF开发实战(一)---创建服务器类 【综合】2014年11月24日Android集成支付宝 【移动开发】2015年04月13日【LeetCode】112.PathSum 【综合】2015年01月04日android应用性能提升之adapter 【编程语言】2015年07月22日css静态滤镜+A:Hover效果2014年01月29日ECSUbuntu14.04搭建gitlab记录 【综合】2015年01月29日asp.net自定义控件实现无刷新上传图片,立即显示缩略图,保存图片缩略图2014年01月29日HuamanGeneFunctions 【编程语言】2014年12月17日Oracle自动备份脚本 【互联网】2015年03月09日Java网络编程笔记3 【移动开发】2014年11月04日关于iPhone66Plus分辨率及图片分辨率的问题(一)【移动开发】2015年08月31日AndroidStudio-修改LogCat的颜色*美爆了* 【编程语言】2015年05月25日NYOJ---题目32组合数【编程语言】2015年05月05日Android带清楚按钮的EditText 【数据库】2015年02月11日NEFUOJ500二分+最大流【移动开发】2015年03月16日安装配置PhoneGap开发环境(二)——使用Cordova代替PhoneGap创建项目 【移动开发】2015年06月24日Jquery中"$(document).ready(function(){})"函数的使用详解2014年01月29日ASP.NET怎么操作DataTable实例应用2014年01月29日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)