搜索引擎之分词器学习
分词器实现代码:
package com.zd.tokenizer;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Tokenizer {
private Map<Character, Object> dictionary;
public Tokenizer(String dictionaryFilePath) throws IOException {//红黑树的实现dictionary = new TreeMap<>();//从文件加载字典到TreeMapthis.loadDictionary(dictionaryFilePath);
}private void loadDictionary(String dictionaryFilePath) throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(dictionaryFilePath)));String line = null;while ((line = reader.readLine()) != null) {line = line.trim();if (line.length() == 0) {continue;}char c;Map<Character, Object> child = this.dictionary;//组成以这个字符开头的词的树for (int i = 0; i < line.length(); i++) {c = line.charAt(i);Map<Character, Object> ccMap = (Map<Character, Object>) child.get(c);if (ccMap == null) {ccMap = new HashMap<Character, Object>();child.put(c, ccMap);}child = ccMap;}child.put(' ', null);}
}public List<String> participie(String text) {if (text == null) {return null;}text = text.trim();if (text.length() == 0) {return null;}List<String> tokens = new ArrayList<>();char c;for (int i = 0; i < text.length(); ) {StringBuilder token = new StringBuilder();Map<Character, Object> child = this.dictionary;boolean matchToken = false;for (int j = i; j < text.length(); j++) {c = text.charAt(j);Map<Character, Object> ccMap = (Map<Character, Object>) child.get(c);if (ccMap == null) {if (child.containsKey(' ')) {matchToken = true;i = j;}break;} else {token.append(c);child = ccMap;}}//匹配到词if (matchToken) {tokens.add(token.toString());} else {if (child.containsKey(' ')) {//短的也是词,如张三丰,张三tokens.add(token.toString());break;} else {//没有匹配到词,则该字符作为一个词tokens.add("" + text.charAt(i));i++;}}}return tokens;
}public static void main(String[] args) throws IOException {Tokenizer tk = new Tokenizer(Tokenizer.class.getResource("/dictionary.txt").getPath());List<String> tokens = tk.participie("想过离开,以这种方式存在,是因为那些旁白那些姿态那些伤害");for (String s : tokens){System.out.println(s);}
}
}
搜索引擎之分词器学习相关推荐
- Lucene.Net3.0.3+盘古分词器学习使用
一.Lucene.Net介绍 Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索 ...
- 搜索引擎ES--IK分词器
目录 集成IK分词器 扩展词典使用 停用词典使用 同义词典使用 集成IK分词器 概要:IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.新版本的IKAnalyzer3.0 ...
- Lucene初学——3. 分词器学习
1.demo public class AnalyzerStudy {private static String str = "分词器测试 Lucene 案例 开发 by future fo ...
- springboot elasticsearch vue ik中文分词器 实现百度/京东全文搜索
背景:实现和百度搜索一样效果的,全文搜索引擎支持关键词高亮显示 文章目录 1. 企业级搜索引擎解决方案 2. 创建索引规则 3. 数据拉取 4. 搜索高亮 5. 自定义词库 6. 效果图 7. 开源源 ...
- 搜索引擎学习(四)中文分词器
一.简介 分词原理 Reader读取数据流 数据经过第一个分词器将大写转换小写 数据经过第二个分词器根据空格分割成一个一个的单词 数据经过第三个分词器把标点符号,介词等剔除 经过三次过滤,生成若干语汇 ...
- 数据库-Elasticsearch进阶学习笔记(分片、映射、分词器、即时搜索、全文搜索等)
目录 基础概念 定义 特点 索引(Index) 分片(Shards) 副本(Replicas) 分配(Allocation) 映射(Mapping) 动态映射 显式映射 常见数据类型 文档(docum ...
- 学习 ES 的笔记、全文检索、倒排索引、Lucene、ik中文分词器、Kibana使用Dev Tools
文章目录 感悟 新接触的单词 知识点一:ES是什么? 知识点二:ES基本概念 知识点三:1.1 什么是全文检索和Lucene? 知识点四:1.2 什么是倒排索引,Lucene实现全文检索的流程是怎样? ...
- Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)
Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...
- 搜索引擎——反向索引原理揭秘及手写ik分词器
原创不易,转载请标明地址,或者直接附上我的博客首页https://georgedage.blog.csdn.net/ 上篇博客我们说到,数据库为什么不适合搜索引擎的底层存储?,那么什么适合呢? ela ...
最新文章
- CALayer 知识:创建带阴影效果的圆角图片图层和创建自定义绘画内容图层
- 四旋翼建模与开源飞控算法(草稿,待整理)
- Linux下程序包管理工具RPM
- 一文看懂Python的控制结构:for、while、if…都有了
- iOS探索:Block解析浅谈
- ntp协议中 服务器失效怎么办,排除网络时间协议(NTP)故障
- gtest 学习之五 测试用例中定义类
- 微分方程的数值解法与程序实现 pdf_数值计算方法·第三部分
- Ubuntu修改键盘布局
- leetcode加一
- 如何设计三极管控制继电器电路
- python小程序嵌入excel_用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!...
- C#生成条形码图片的简单方法
- direct wifi 投屏_【教程】Microsoft Wi-Fi Direct Virtual关闭方法
- 识图在线识图_性感AI,在线赋能小程序
- 使用WMI provider创建进程
- 与门或门非门是计算机语言吗,VHDL实现与门,或门,非门。
- 【极海APM32替代笔记】低功耗模式下的RTC唤醒(非闹钟唤醒,而是采用RTC_WAKEUPTIMER)
- 如何选择靠谱的区块链技术服务商?佰忆科技有秘籍
- 模块VME-7807RC-410000 350-930078074-410000可编程控制器 VMEPFOFIVERS3.40990901 VMI/VME7697 VMIACC5595208
热门文章
- XMODEM设计与C代码实现(1.整体设计篇)
- 驱动保护:挂接SSDT内核钩子(1)
- 斐波那契数列时间复杂度Logn的算法
- 【Error】监听dblclick双击事件不起作用
- 【HMS Core】【FAQ】【Health Kit】运动健康服务常见错误码合集 403、401、1001、20023
- pyinstall install
- 行业认可 | 悬镜安全荣膺DevSecOps创新赛道领航者,获选年度创新力十强
- 网页播放技术的歌词同步
- IPSEC服务器配置
- 军犬舆情每日热点:抢票软件被中铁总局限制;中石化2018净利624亿