之前有一点研究,现在奉上比较完整的代码,可根据项目需要,自行扩展
package com.xiva.test.lucene; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.apache.lucene.analysis.cn.smart.Utility; public class ExtendWordDict { private short[] wordIndexTable; private char[] charIndexTable; private char[][][] wordItem_charArrayTable; private int[][] wordItem_frequencyTable; public static final int PRIME_INDEX_LENGTH = 12071; private void loadFromObjectInputStream(InputStream serialObjectInputStream) throws IOException, ClassNotFoundException { ObjectInputStream input = new ObjectInputStream(serialObjectInputStream); wordIndexTable = (short[]) input.readObject(); charIndexTable = (char[]) input.readObject(); wordItem_charArrayTable = (char[][][]) input.readObject(); wordItem_frequencyTable = (int[][]) input.readObject(); } private long hash1(char c) { final long p = 1099511628211L; long hash = 0xcbf29ce484222325L; hash = (hash ^ (c & 0x00FF)) * p; hash = (hash ^ (c >> 8)) * p; hash += hash << 13; hash ^= hash >> 7; hash += hash << 3; hash ^= hash >> 17; hash += hash << 5; return hash; } private int hash2(char c) { int hash = 5381; /* hash 33 + c */ hash = ((hash << 5) + hash) + c & 0x00FF; hash = ((hash << 5) + hash) + c >> 8; return hash; } private short getWordItemTableIndex(char c) { int hash1 = (int) (hash1(c) % PRIME_INDEX_LENGTH); int hash2 = hash2(c) % PRIME_INDEX_LENGTH; if (hash1 < 0) hash1 = PRIME_INDEX_LENGTH + hash1; if (hash2 < 0) hash2 = PRIME_INDEX_LENGTH + hash2; int index = hash1; int i = 1; while (charIndexTable[index] != 0 && charIndexTable[index] != c && i < PRIME_INDEX_LENGTH) { index = (hash1 + i * hash2) % PRIME_INDEX_LENGTH; i++; } if (i < PRIME_INDEX_LENGTH && charIndexTable[index] == c) { return (short) index; } else return -1; } private void sortEachItems() { char[] tmpArray; int tmpFreq; for (int i = 0; i < wordItem_charArrayTable.length; i++) { if (wordItem_charArrayTable[i] != null && wordItem_charArrayTable[i].length > 1) { for (int j = 0; j < wordItem_charArrayTable[i].length - 1; j++) { for (int j2 = j + 1; j2 < wordItem_charArrayTable[i].length; j2++) { if (Utility.compareArray(wordItem_charArrayTable[i][j], 0, wordItem_charArrayTable[i][j2], 0) > 0) { tmpArray = wordItem_charArrayTable[i][j]; tmpFreq = wordItem_frequencyTable[i][j]; wordItem_charArrayTable[i][j] = wordItem_charArrayTable[i][j2]; wordItem_frequencyTable[i][j] = wordItem_frequencyTable[i][j2]; wordItem_charArrayTable[i][j2] = tmpArray; wordItem_frequencyTable[i][j2] = tmpFreq; } } } } } } private void addExtendWords() { char[] extendChar = "李四".toCharArray(); short extendIdx = this.getWordItemTableIndex(extendChar[0]); char[][] items = wordItem_charArrayTable[wordIndexTable[extendIdx]]; if (items != null && items.length > 0) { System.out.println("start items" + items.length); char[][] extendItems = new char[items.length + 1][]; int[] extendfreqs = new int[items.length + 1]; extendfreqs[items.length] = 100; extendItems[items.length] = "四".toCharArray(); System.arraycopy(items, 0, extendItems, 0, items.length); wordItem_charArrayTable[wordIndexTable[extendIdx]] = extendItems; int[] freqs = wordItem_frequencyTable[wordIndexTable[extendIdx]]; wordItem_frequencyTable[wordIndexTable[extendIdx]] = extendfreqs; for (int freq : freqs) { System.out.println(freq); } this.sortEachItems(); System.out.println("End"); } } private void saveToObj(File serialObj) { try { ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(serialObj)); output.writeObject(wordIndexTable); output.writeObject(charIndexTable); output.writeObject(wordItem_charArrayTable); output.writeObject(wordItem_frequencyTable); output.close(); // log.info("serialize core dict."); } catch (Exception e) { System.out.println(e.toString()); // log.warn(e.getMessage()); } System.out.println("save End"); } public void load() throws IOException, ClassNotFoundException { InputStream input = this.getClass().getResourceAsStream("coredict.mem"); loadFromObjectInputStream(input); } public static void main(String[] args) { File file = new File("coredict.mem"); ExtendWordDict wordDict = new ExtendWordDict(); try { // 加载字典 wordDict.load(); } catch (Exception e) { e.printStackTrace(); } //添加扩展词,可使用循环从文件读取需要扩展的词 wordDict.addExtendWords(); //将扩展词保存到文件 wordDict.saveToObj(file); } }
最后将新生成的coredict.mem文件,替换掉Jar包中的文件。
后续扩展:修改源码,添加一个扩展的txt文件。
除了扩展词,还有同义词需要研究。当然,禁止词SmartChineseAnalyzer已支持。
相关推荐
此外,IK还提供了丰富的插件接口,可以进行二次开发,实现更复杂的需求,比如停用词过滤、同义词扩展等。 总的来说,Solr6.x结合IK中文分词工具,为中文信息检索提供了强大的支持。通过合理的配置和定制,我们可以...
《ik-analyzer-solr7-7.x:深入理解IK分词器在Solr中的应用》 IK分词器(Intelligent Chinese Analyzer)是Java语言开发的一款针对中文处理的开源分词工具,广泛应用于搜索引擎、信息检索等领域。而Solr,则是...
Solr是中国最流行的开源搜索引擎平台Apache Lucene的一个扩展,它提供了全文检索、高亮显示、分布式搜索、热备份等一系列高级功能。在这个特定的情境中,我们关注的是Solr6.x版本中的中文分词支持,以及与ikanalyzer...
常见的拼音分词器有SmartChineseAnalyzer(适用于ES5.x及以下版本)、IK Analyzer(有拼音扩展)、Pinyin4j等。在配置文件中设置相应的Analyzer,即可启用拼音分词功能。 5. **使用示例** ```json PUT /my_index ...
chromedriver-win64-136.0.7059.0.zip
python学习一些项目和资源
python学习资源
python学习资源
python学习教程
python学习教程
【毕业设计】java-springboot+vue会议管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
内有各个系统的版本全了
分数阶模型辨识,分数阶模型辨识
大数据基于python的电影天堂数据可视化(源码+配套文档) 系统功能: 登录 、首页 、电影数据管理 、我的信息 关键技术:Python、Django、Mysql、Hadoop、Scrapy、Vue、B/S 技术支持:已测试可正常运行,调试问题可联系客服有偿解决。 更多项目:3000+优质源码,支持【定制】、修改、部署、讲解和文档。
【毕业设计】java-springboot+vue疾病防控综合系统的设计与实现源码(完整前后端+mysql+说明文档+LunW).zip
【毕业设计】java-springboot-vue家具销售电商平台实现源码(完整前后端+mysql+说明文档+LunW).zip
134dfffffffffffffffffffffffffffffff
代码说明: 设置结束时间:通过new Date().getTime()获取当前时间戳,并加上10分钟的毫秒数(10 * 60 * 1000),得到倒计时的结束时间。 更新倒计时:updateCountdown函数计算当前时间与结束时间的差值,并将其转换为分钟和秒数。 显示倒计时:通过console.log输出剩余时间,格式为“剩余时间:X分Y秒”。 停止倒计时:当剩余时间小于或等于0时,清除定时器并输出“时间到!”。 定时器:使用setInterval每秒调用一次updateCountdown函数,实现倒计时的动态更新。 扩展说明: 应用场景:倒计时功能常用于限时抢购、考试计时、活动倒计时等场景。 优化建议:可以将倒计时显示在网页的某个元素中,而不是控制台。例如,使用document.getElementById获取DOM元素并更新其内容。 兼容性:该代码在现代浏览器中均可运行,如果需要兼容旧版浏览器,可以使用var代替const和let。 扩展功能:可以添加声音提示、动画效果等,提升用户体验。
该项目是一个大学生校园兼职平台。该平台使用Java语言开发后台业务逻辑,运用了SpringMVC+Spring+MyBatis框架进行搭建,前台使用jQuery、layUI框架,数据库服务器采用MySQL5.6+对数据进行持久化。其主要功能有:兼职招聘、论坛交流、在线聊天、个人中心、信箱留言、登录注册等功能。
图解AUTOSAR-CP-CommunicationStackTypes逻辑图打包