当前位置: 首页 > news >正文

ik分词器扩展

 1. 扩展IK原生词典类(关键改造点)

public class HotDict extends Dictionary {private static final CopyOnWriteArrayList<String> HOT_WORDS = new CopyOnWriteArrayList<>();// 动态加载新词到内存public static void reload(String filePath) {try {List<String> newWords = Files.readAllLines(Paths.get(filePath));HOT_WORDS.clear();HOT_WORDS.addAll(newWords);logger.info("热词库已更新,数量:{}", HOT_WORDS.size());} catch (IOException e) {logger.error("热词库加载失败", e);}}// 重写IK词库加载方法@Overridepublic void loadMainDict() {super.loadMainDict(); // 加载主词典HOT_WORDS.forEach(super::addWord); // 加载热词}
}

ik 分词器集成spring  

@Configuration
public class IKConfig {@Beanpublic Analyzer ikAnalyzer() {return new Analyzer() {@Overrideprotected TokenStreamComponents createComponents(String fieldName) {// 使用改造后的词典HotDict.loadMainDict(); return new TokenStreamComponents(new IKTokenizer());}};}
}

2. 调用分词API

@RestControllerpublic class TestController {@Autowired Analyzer analyzer;@GetMapping("/split")public List<String> split(@RequestParam String text) throws IOException {List<String> result = new ArrayList<>();TokenStream stream = analyzer.tokenStream("", text);stream.reset();while (stream.incrementToken()) {CharTermAttribute term = stream.getAttribute(CharTermAttribute.class);result.add(term.toString());}return result;}}

3. **验证初始效果*
   // 避免加载过程中出现空指针

  private static volatile List<String> activeWords = new ArrayList<>();private static List<String> standbyWords = new ArrayList<>();public static void reload() {standbyWords.clear();standbyWords.addAll(loadNewWords());List<String> temp = activeWords;activeWords = standbyWords;standbyWords = temp; // 原子切换

3. HTTP-API触发更新

  @PostMapping("/reload-dict")public String reloadDict(@RequestParam String token) {if (!validToken(token)) return "forbidden";HotDict.reload();return "success";}

4. **性能监控**
 

    // 记录加载耗时Long start = System.currentTimeMillis();HotDict.reload();Metrics.timer("dict_reload").record(System.currentTimeMillis() - start)


http://www.mrgr.cn/news/98885.html

相关文章:

  • 多线性读取数据实现QCustomPlot瀑布图
  • [密码学实战]Java实现AES加密解密终极指南:从基础到高阶实战
  • uniapp-商城-26-顶部模块折叠
  • 逻辑回归 (Logistic Regression)
  • vue3中defineEmits的使用说明
  • 【MySQL】MySQL数据库的基础操作、常用数据类型、表结构的操作
  • nginx-基础知识(一)
  • Haclon的学习网址
  • Java深入
  • Qt信号与槽
  • golang处理时间的包time一次性全面了解
  • uniapp-商城-26-vuex 使用流程
  • 强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架
  • Ubuntu源码制作openssh 9.9p2 deb二进制包修复安全漏洞 —— 筑梦之路
  • Rust 中的Relaxed 内存指令重排演示:X=0 Y=0 是怎么出现的?
  • 抽象的https原理简介
  • SQL刷题记录贴
  • 机器学习 | 细说Deep Q-Network(DQN)
  • 【Python爬虫基础篇】--1.基础概念
  • git撤销提交