Tokenizer

Split()拆分字符串与StringTokenizer拆分字符串

南楼画角 提交于 2019-12-22 10:55:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 不管用何种编程语言写代码,对字符串的处理都是必不可少的,其中对字符串的拆分在许多场合都频繁用到。 今天介绍Java中两种主流的拆分方法,一是lang包String类的split()方法,另一种则是util包下的StringTokenizer类。 String.split()拆分字符串 1.单参数拆分方法 public String[] split(String regex) 参数: regex-the delimiting regular expression,定界正则表达式 返回: String[],字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的,如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。 抛出: PatternSyntaxException - 如果正则表达式的语法无效 特点: 该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法,即是split(String regex,0)。因此,所得数组中不包括结尾空字符串。 拆分示例 拆分字符串”Harry James Potter”,以空格进行拆分 package demotest; public class SplitDemo { public static void main

ES学习记录10.3——ES分析器4(字符过滤器)

主宰稳场 提交于 2019-12-07 03:04:34
字符过滤器(Character filters)用于在将字符流传递给标记生成器Tokenizer之前对其进行预处理,它负责将最原始的文本作为字符流进行接受,可以对通过添加、移除或改变字符的方式改变流。比如一个字符过滤器可以用来转换印度-阿拉伯数字٠‎١٢٣٤٥٦٧٨‎٩变成等价的阿拉伯语数字0123456789,或者从流中删除<b>这样的HTML元素。ES有很多内置的字符过滤器,可以用于自定义的分析器中,主要有: HTML Strip Character Filter:html_strip字符过滤器可以将流中的类似于<b>这样的HTML标签元素移除,并对HTML中类似于&这样的实体进行解码; Mapping Character Filter:mapping字符过滤器(映射字符过滤器)使用指定的替换字符替换指定字符串的任何出现的内容; Pattern Replace Character Filter:pattern_replace字符过滤器将与正则表达式匹配的任何字符替换为指定的替换内容; 1. html标签字符过滤器(HTML Strip Char Filter)  html_strip字符过滤器从文本中删除HTML元素,并用其解码值替换HTML实体(如用&替换&,在HTML语言中&就是表示&),如: curl -X POST "localhost:9200/_analyze"

ElasticSearch:分析器

点点圈 提交于 2019-12-05 23:05:21
这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 ElasticSearch入门 第七篇:分析器 ElasticSearch入门 第八篇:存储 ElasticSearch入门 第九篇:实现正则表达式查询的思路 在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本、在原始文本中的开始和结束偏移量、以及数据类型等组成。ElasticSearch 把文档数据写到倒排索引(Inverted Index)的结构中,倒排索引建立词(Term)和文档之间的映射,索引中的数据是面向词,而不是面向文档的。分析器(Analyzer)的作用就是分析(Analyse),用于把传入Lucene的文档数据转化为倒排索引,把文本处理成可被搜索的词。分析器由一个分词器(Tokenizer)和零个或多个标记过滤器

【Solr】- 分析器 Analyzers

我们两清 提交于 2019-12-04 00:44:38
作用 :解析用户传递的搜索信息,抽取出关键字,然后进行过滤,最后去索引库检索,返回用户需要的信息,例如百度的关键字竞价机制 Solr分析器组成:分词器和过滤器 分词器:抽取关键字 过滤器:过滤关键字 Analyzers:分析器 作用:检查域的文本和生成token stream,分析器通过scheme.xml配置文件中的fieldType元素配置,传统的搜索时全文匹配,分析器可以通过分析用户输入的文本字符抽取term(关键字),进行查询然后汇总结果,这样搜索引擎更加智能化 简单案例:schema.xml配置 <fieldType name="nametext" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/> </fieldType> 分析:为solr.TextField的域类型指定分析器 复杂定义分析器: <fieldType name="nametext" class="solr.TextField"> <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StandardFilterFactory"/> <filter class=

搜索引擎(Lucene介绍、分词器详解)

不问归期 提交于 2019-12-03 10:53:45
Lucene介绍 Lucene简介 最受欢迎的java开源全文 搜索引擎开发工具包 。提供了完整的查询引擎和索引引擎,部分文本分词引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 是Apache的子项目,网址:http://lucene.apache.org/ Lucene用途 为软件开发人员提供一个简单易用的工具包,以方便在目标系统中实现全文检索功能,或者是以此为基础建立起完整的全文检索引擎。 Lucene适用场景 在应用中为数据库中的数据提供全文检索实现。 开发独立的搜索引擎服务、系统 Lucene的特性 1、稳定、索引性能高 每小时能够索引150GB以上的数据。 对内存的要求小——只需要1MB的堆内存 增量索引和批量索引一样快。 索引的大小约为索引文本大小的20%~30% 2、高效、准确、高性能的搜索算法 良好的搜索排序。 强大的查询方式支持:短语查询、通配符查询、临近查询、范围查询等。 支持字段搜索(如标题、作者、内容)。 可根据任意字段排序 支持多个索引查询结果合并 支持更新操作和查询操作同时进行 支持高亮、join、分组结果功能 速度快 可扩展排序模块,内置包含向量空间模型、BM25模型可选 可配置存储引擎 3、跨平台 纯java编写。

给全文搜索引擎Manticore (Sphinx) search 增加中文分词

纵饮孤独 提交于 2019-12-03 05:48:13
文章首发于我的技术博客:你可以在上面看到更多的 Python教程 和 python爬虫 Sphinx search 是一款非常棒的开源全文搜索引擎,它使用C++开发,索引和搜索的速度非常快,我使用sphinx的时间也有好多年了。最初使用的是coreseek,一个国人在sphinxsearch基础上添加了mmseg分词的搜索引擎,可惜后来不再更新,sphinxsearch的版本太低,bug也会出现;后来也使用最新的sphinxsearch,它可以支持几乎所有语言,通过其内置的ngram tokenizer对中文进行索引和搜索。 但是,像中文、日文、韩文这种文字使用ngram还是有很大弊端的: 当Ngram=1时,中文(日文、韩文)被分解成一个个的单字,就像把英文分解成一个个字母那样。这会导致每个单字的索引很长,搜索效率下降,同时搜索结果习惯性比较差。 当Ngram=2或更大时,会产生很多无意义的“组合”,比如“的你”、“为什”等,导致索引的 字典 、索引文件等非常大,同时也影响搜索速度。 基于以上弊端,为中日韩文本加入分词的tokenizer是很有必要的。 于是决定来做这件事。先去Sphinxsearch网站去看看,发现它已经发布了新的3.x版本,而且加入了很多很棒的特性,然而它从Sphinxsearch 3.x 开始,暂时 不再开源 . 不过

Spring Batch(5)——文件读写

Deadly 提交于 2019-11-30 07:25:02
在 Spring batch由上至下的结构 中 Job 、 Step 都是属于框架级别的的功能,大部分时候都是提供一些配置选项给开发人员使用,而 Item 中的 Reader 、 Processor 和 Writer 是属于业务级别的,它开放了一些业务切入的接口。 但是文件的读写过程中有很多通用一致的功能Spring Batch为这些相同的功能提供了一致性实现类。 扁平结构文件 扁平结构文件 (也称为矩阵结构文件,后文简称为文件)是最常见的一种文件类型。他通常以一行表示一条记录,字段数据之间用某种方式分割。与标准的格式数据(xml、json等)主要差别在于他没有结构性描述方案(SXD、JSON-SCHEME),进而没有结构性分割规范。因此在读写此类文件之前需要先设定好字段的分割方法。 文件的字段数据分割方式通常有两种: 使用分隔符 或 固定字段长度 。前者通常使用逗号( , )之类的符号对字段数据进行划分,后者的每一列字段数据长度是固定的。 框架为文件的读取提供了 FieldSet 用于将文件结构中的信息映射到一个对象。 FieldSet 的作用是将文件的数据与类的 field 进行绑定(field是Java中常见的概念,不清楚的可以了解Java反射)。 数据读取 Spring Batch为文件读取提供了 FlatFileItemReader 类

pyhanlp 中文词性标注与分词简介

谁说我不能喝 提交于 2019-11-30 03:11:06
pyhanlp 中文词性 标注 与分词简介 pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式 第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分词器,而现在默认的就是第一种维特比分词器 1. 维特比 (viterbi):效率和效果的最佳平衡。也是最短路分词,HanLP最短路求解采用Viterbi算法 2. 双数组trie树 (dat):极速词典分词,千万字符每秒(可能无法获取词性,此处取决于你的词典) 3. 条件随机场 (crf):分词、词性标注与命名实体识别精度都较高,适合要求较高的NLP任务 4. 感知机 (perceptron):分词、词性标注与命名实体识别,支持在线学习 5. N最短路 (nshort):命名实体识别稍微好一些,牺牲了速度 第二种方式是使用JClass直接获取java类,然后使用。这种方式除了获取上面的五种分词器以外还可以获得一些其他分词器,如NLP分词器,索引分词,快速词典分词等等 两种使用方式的对比 第一种是使用作者给的HanLP直接获取分词器,直接segment() 会获取 默认的标准分词器也就是维特比分词器,也**可以使用newSegment函数,传入上面的分词器英文名称来获取新的分词器,如使用HanLP.newSegment("crf")来获取CRF分词器。*

pyhanlp 停用词与用户自定义词典功能详解

对着背影说爱祢 提交于 2019-11-30 03:10:51
hanlp的词典模式 之前我们看了hanlp的词性标注,现在我们就要使用自定义词典与停用词功能了,首先关于HanLP的词性标注方式具体请看HanLP词性标注集。 其核心词典形式如下: 自定义词典 自定义词典有多种添加模式,首先是展示的一个小例子,展示了词汇的动态增加与强行插入,删除等。更复杂的内容请参考后边的第二段代码。 简单的例子 from pyhanlp import * text = "攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰" # 怎么可能噗哈哈! print(HanLP.segment(text)) CustomDictionary = JClass("com.hankcs.hanlp.dictionary.CustomDictionary") CustomDictionary.add("攻城狮") # 动态增加 CustomDictionary.insert("白富美", "nz 1024") # 强行插入 #CustomDictionary.remove("攻城狮"); # 删除词语(注释掉试试) CustomDictionary.add("单身狗", "nz 1024 n 1") # 展示该单词词典中的词频统计 展示分词 print(CustomDictionary.get("单身狗")) print(HanLP.segment(text)) # 增加用户词典