
- 结 构
- 现在分词doing,过去分词done
- 外文名
- participle
- 语 法
- 非谓语动词形式
- 中文名
- 分词
- 特 征
- 具有动词及形容词二者特征
- 表 示
- 进行,完成,被动
-
分词
2018-09-07 20:41:14对于西方拼音语言来说,从词之间由明确的分界符,而很多亚洲语言(如汉语、日语、韩语、泰语)词之间没有明确的分界符,因此需要先对句子进行分词,才能做进一步的自然语言处理(也适用于英文词组的分割、或者手写...对于西方拼音语言来说,从词之间由明确的分界符,而很多亚洲语言(如汉语、日语、韩语、泰语)词之间没有明确的分界符,因此需要先对句子进行分词,才能做进一步的自然语言处理(也适用于英文词组的分割、或者手写识别,平板电脑、智能手机手写时单词间的空格可能不清楚)。
分词的输入是一串词,分词的输出是用分界符分割的一串词。
分词的不一致性问题:
- 越界型错误:“北京大学生” -> “北京大学”、“生”
- 覆盖型错误:“北京大学” -> “北”、“京”、“大”、“学”
- 颗粒度的不一致性
分词的颗粒问题:
- 在分词的同时,找到复合词的嵌套结构。如“北京”、“大学”、“北京大学”
- 机器翻译:一般来讲,颗粒度大翻译效果好。如“北京大学”
- 语音识别,网页搜索:一般来讲,颗粒度小效果好。如“北京”、“大学”
中文分词是一个已解决问题,只要采用统计语言模型,效果差不到哪去。一般不同应用该有不同的分词系统,需要针对不同的应用设计实现专门的分词系统。 构造分词器时,更好的做法是让一个分词器同时支持不同层次的词的切分,由不同的应用自行决定切分的颗粒度。通常中文分词工作的重点是继续做数据挖掘,不断完善复合词的词典(新词发现)。
基于字符串匹配的分词方法(“查字典”)
此方法按照不同的扫描方式,逐个查找词库进行分词。根据扫描方式可细分为:正向最大匹配,反向最大匹配,双向最大匹配,最小切分(即最短路径);总之就是各种不同的启发规则。
全切分方法
它首先切分出与词库匹配的所有可能的词,再运用统计语言模型决定最优的切分结果。最好的一种分词方法应该保证分完词后这个句子出现的概率最大。
问题:穷举所有可能的分词方法并计算每种可能性的句子的概率,计算量相当大。
技巧:看成一个动态规划(Dynamic Programming)问题,利用维特比(Viterbi)算法快速地找到最佳分词。
维特比(Viterbi)算法
维特比算法是一个特殊但是应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。维特比算法是针对一个特殊的图—— 篱笆网络(Lattice) 的有向图最短路径问题而提出的。凡是使用隐含马尔可夫模型描述的问题都要用它来解码,如语音识别、机器翻译、拼音转汉字(中文输入法)、分词。
例如输入法,输入的可见序列为 ,而产生它们的隐含序列是
是状态之间的转移概率, 是每个状态的产生概率。
维特比算法:
- 从点 开始,对于第一个状态 的各个节点,计算距离
,只有一步所以都是最短距离。 - 对于第二个状态 的所有节点,计算 到它们的最短距离,计算复杂度
- 如上从第二个状态走到第三个状态,直到最后,就得到了网络的最短路径。每一步计算的复杂度都与相邻两个状态 和 各自的节点数目 的乘积成正比,假定节点最多的状态由个节点,长度为,算法复杂度为
由字构词的分词方法
可以理解为字的分类问题,也就是自然语言处理中的sequence labeling问题,通常做法里利用HMM,MAXENT,MEMM,CRF等预测文本串每个字的tag,比如B,E,I,S,这四个tag分别表示:beginning, inside, ending, single,也就是一个词的开始,中间,结束,以及单个字的词。
一般而言,方法一和方法二在工业界用得比较多,方法三因为采用复杂的模型,虽准确率相对高,但耗时较大.
一个文本串除了分词,还需要做词性标注,命名实体识别,新词发现等。
《数学之美》 4 26
-
ElasticSearch7.0.0安装IK分词器
2020-03-30 16:42:53为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。就尝试安装下IK分词。 2.去github下载对应...1.原因:
为什么要在elasticsearch中要使用ik这样的中文分词呢,那是因为es提供的分词是英文分词,对于中文的分词就做的非常不好了,因此我们需要一个中文分词器来用于搜索和使用。就尝试安装下IK分词。
2.去github下载对应的分词插件(对应ES的版本下载)
https://github.com/medcl/elasticsearch-analysis-ik/releases
3.本地安装
elasticsearch-plugin install file:///home/hadoop/elasticsearch-analysis-ik-7.0.0.zip (一定要加上file://前缀)
安装完毕后,发现在ES的安装目录下的plugins目录下多了一个analysis-ik目录(内容是ik的zip包解压后根目录下的所有文件,一共是5个jar文件和1个properties配置文件),另外ES的安装目录下的config目录下多了一个analysis-ik目录(内容是ik的zip包解压后根目录下的config目录下所有文件,用于放置ik的自定义词库)。
4.远程安装
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.0.0/elasticsearch-analysis-ik-7.0.0.zip
5.安装完成,重启ES
会看到加载了ik分词了。
-
Java中文分词组件 - word分词
2019-02-10 16:17:50word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过...目录
word分词是一个Java实现的分布式的中文分词组件,提供了多种基于词典的分词算法,并利用ngram模型来消除歧义。能准确识别英文、数字,以及日期、时间等数量词,能识别人名、地名、组织机构名等未登录词。能通过自定义配置文件来改变组件行为,能自定义用户词库、自动检测词库变化、支持大规模分布式环境,能灵活指定多种分词算法,能使用refine功能灵活控制分词结果,还能使用词性标注、同义标注、反义标注、拼音标注等功能。同时还无缝和Lucene、Solr、ElasticSearch、Luke集成。
注意:word1.3需要JDK1.8
API在线文档:
编译好的jar包下载(包含依赖):
链接: https://pan.baidu.com/s/1mnGQqx_5Yqv_KxS9HJCTcA 提取码: essu
Maven依赖:
在pom.xml中指定dependency,可用版本有1.0、1.1、1.2、1.3:
<dependencies> <dependency> <groupId>org.apdplat</groupId> <artifactId>word</artifactId> <version>1.3</version> </dependency> </dependencies>
分词使用方法:
1、快速体验
运行项目根目录下的脚本demo-word.bat可以快速体验分词效果 用法: command [text] [input] [output] 命令command的可选值为:demo、text、file demo text 杨尚川是APDPlat应用级产品开发平台的作者 file d:/text.txt d:/word.txt exit
2、对文本进行分词
移除停用词:List<Word> words = WordSegmenter.seg("杨尚川是APDPlat应用级产品开发平台的作者"); 保留停用词:List<Word> words = WordSegmenter.segWithStopWords("杨尚川是APDPlat应用级产品开发平台的作者"); System.out.println(words); 输出: 移除停用词:[杨尚川, apdplat, 应用级, 产品, 开发平台, 作者] 保留停用词:[杨尚川, 是, apdplat, 应用级, 产品, 开发平台, 的, 作者]
3、对文件进行分词
String input = "d:/text.txt"; String output = "d:/word.txt"; 移除停用词:WordSegmenter.seg(new File(input), new File(output)); 保留停用词:WordSegmenter.segWithStopWords(new File(input), new File(output));
4、自定义配置文件
默认配置文件为类路径下的word.conf,打包在word-x.x.jar中 自定义配置文件为类路径下的word.local.conf,需要用户自己提供 如果自定义配置和默认配置相同,自定义配置会覆盖默认配置 配置文件编码为UTF-8
5、自定义用户词库
自定义用户词库为一个或多个文件夹或文件,可以使用绝对路径或相对路径 用户词库由多个词典文件组成,文件编码为UTF-8 词典文件的格式为文本文件,一行代表一个词 可以通过系统属性或配置文件的方式来指定路径,多个路径之间用逗号分隔开 类路径下的词典文件,需要在相对路径前加入前缀classpath: 指定方式有三种: 指定方式一,编程指定(高优先级): WordConfTools.set("dic.path", "classpath:dic.txt,d:/custom_dic"); DictionaryFactory.reload();//更改词典路径之后,重新加载词典 指定方式二,Java虚拟机启动参数(中优先级): java -Ddic.path=classpath:dic.txt,d:/custom_dic 指定方式三,配置文件指定(低优先级): 使用类路径下的文件word.local.conf来指定配置信息 dic.path=classpath:dic.txt,d:/custom_dic 如未指定,则默认使用类路径下的dic.txt词典文件
6、自定义停用词词库
使用方式和自定义用户词库类似,配置项为: stopwords.path=classpath:stopwords.txt,d:/custom_stopwords_dic
7、自动检测词库变化
可以自动检测自定义用户词库和自定义停用词词库的变化 包含类路径下的文件和文件夹、非类路径下的绝对路径和相对路径 如: classpath:dic.txt,classpath:custom_dic_dir, d:/dic_more.txt,d:/DIC_DIR,D:/DIC2_DIR,my_dic_dir,my_dic_file.txt classpath:stopwords.txt,classpath:custom_stopwords_dic_dir, d:/stopwords_more.txt,d:/STOPWORDS_DIR,d:/STOPWORDS2_DIR,stopwords_dir,remove.txt
8、显式指定分词算法
对文本进行分词时,可显式指定特定的分词算法,如: WordSegmenter.seg("APDPlat应用级产品开发平台", SegmentationAlgorithm.BidirectionalMaximumMatching); SegmentationAlgorithm的可选类型为: 正向最大匹配算法:MaximumMatching 逆向最大匹配算法:ReverseMaximumMatching 正向最小匹配算法:MinimumMatching 逆向最小匹配算法:ReverseMinimumMatching 双向最大匹配算法:BidirectionalMaximumMatching 双向最小匹配算法:BidirectionalMinimumMatching 双向最大最小匹配算法:BidirectionalMaximumMinimumMatching 全切分算法:FullSegmentation 最少分词算法:MinimalWordCount 最大Ngram分值算法:MaxNgramScore
9、分词效果评估
运行项目根目录下的脚本evaluation.bat可以对分词效果进行评估 评估采用的测试文本有253 3709行,共2837 4490个字符 评估结果位于target/evaluation目录下: corpus-text.txt为分好词的人工标注文本,词之间以空格分隔 test-text.txt为测试文本,是把corpus-text.txt以标点符号分隔为多行的结果 standard-text.txt为测试文本对应的人工标注文本,作为分词是否正确的标准 result-text-***.txt,***为各种分词算法名称,这是word分词结果 perfect-result-***.txt,***为各种分词算法名称,这是分词结果和人工标注标准完全一致的文本 wrong-result-***.txt,***为各种分词算法名称,这是分词结果和人工标注标准不一致的文本
10、分布式中文分词器
1、在自定义配置文件word.conf或word.local.conf中指定所有的配置项*.path使用HTTP资源,同时指定配置项redis.* 2、配置并启动提供HTTP资源的web服务器,将项目:https://github.com/ysc/word_web部署到tomcat 3、配置并启动redis服务器
11、词性标注(1.3才有这个功能)
将分词结果作为输入参数,调用PartOfSpeechTagging类的process方法,词性保存在Word类的partOfSpeech字段中 如下所示: List<Word> words = WordSegmenter.segWithStopWords("我爱中国"); System.out.println("未标注词性:"+words); //词性标注 PartOfSpeechTagging.process(words); System.out.println("标注词性:"+words); 输出内容: 未标注词性:[我, 爱, 中国] 标注词性:[我/r, 爱/v, 中国/ns]
12、refine
我们看一个切分例子: List<Word> words = WordSegmenter.segWithStopWords("我国工人阶级和广大劳动群众要更加紧密地团结在党中央周围"); System.out.println(words); 结果如下: [我国, 工人阶级, 和, 广大, 劳动群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围] 假如我们想要的切分结果是: [我国, 工人, 阶级, 和, 广大, 劳动, 群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围] 也就是要把“工人阶级”细分为“工人 阶级”,把“劳动群众”细分为“劳动 群众”,那么我们该怎么办呢? 我们可以通过在word.refine.path配置项指定的文件classpath:word_refine.txt中增加以下内容: 工人阶级=工人 阶级 劳动群众=劳动 群众 然后,我们对分词结果进行refine: words = WordRefiner.refine(words); System.out.println(words); 这样,就能达到我们想要的效果: [我国, 工人, 阶级, 和, 广大, 劳动, 群众, 要, 更加, 紧密, 地, 团结, 在, 党中央, 周围] 我们再看一个切分例子: List<Word> words = WordSegmenter.segWithStopWords("在实现“两个一百年”奋斗目标的伟大征程上再创新的业绩"); System.out.println(words); 结果如下: [在, 实现, 两个, 一百年, 奋斗目标, 的, 伟大, 征程, 上, 再创, 新的, 业绩] 假如我们想要的切分结果是: [在, 实现, 两个一百年, 奋斗目标, 的, 伟大征程, 上, 再创, 新的, 业绩] 也就是要把“两个 一百年”合并为“两个一百年”,把“伟大, 征程”合并为“伟大征程”,那么我们该怎么办呢? 我们可以通过在word.refine.path配置项指定的文件classpath:word_refine.txt中增加以下内容: 两个 一百年=两个一百年 伟大 征程=伟大征程 然后,我们对分词结果进行refine: words = WordRefiner.refine(words); System.out.println(words); 这样,就能达到我们想要的效果: [在, 实现, 两个一百年, 奋斗目标, 的, 伟大征程, 上, 再创, 新的, 业绩]
13、同义标注
List<Word> words = WordSegmenter.segWithStopWords("楚离陌千方百计为无情找回记忆"); System.out.println(words); 结果如下: [楚离陌, 千方百计, 为, 无情, 找回, 记忆] 做同义标注: SynonymTagging.process(words); System.out.println(words); 结果如下: [楚离陌, 千方百计[久有存心, 化尽心血, 想方设法, 费尽心机], 为, 无情, 找回, 记忆[影象]] 如果启用间接同义词: SynonymTagging.process(words, false); System.out.println(words); 结果如下: [楚离陌, 千方百计[久有存心, 化尽心血, 想方设法, 费尽心机], 为, 无情, 找回, 记忆[影像, 影象]] List<Word> words = WordSegmenter.segWithStopWords("手劲大的老人往往更长寿"); System.out.println(words); 结果如下: [手劲, 大, 的, 老人, 往往, 更, 长寿] 做同义标注: SynonymTagging.process(words); System.out.println(words); 结果如下: [手劲, 大, 的, 老人[白叟], 往往[常常, 每每, 经常], 更, 长寿[长命, 龟龄]] 如果启用间接同义词: SynonymTagging.process(words, false); System.out.println(words); 结果如下: [手劲, 大, 的, 老人[白叟], 往往[一样平常, 一般, 凡是, 寻常, 常常, 常日, 平凡, 平居, 平常, 平日, 平时, 往常, 日常, 日常平凡, 时常, 普通, 每每, 泛泛, 素日, 经常, 通俗, 通常], 更, 长寿[长命, 龟龄]] 以词“千方百计”为例: 可以通过Word的getSynonym()方法获取同义词如: System.out.println(word.getSynonym()); 结果如下: [久有存心, 化尽心血, 想方设法, 费尽心机] 注意:如果没有同义词,则getSynonym()返回空集合:Collections.emptyList() 间接同义词和直接同义词的区别如下: 假设: A和B是同义词,A和C是同义词,B和D是同义词,C和E是同义词 则: 对于A来说,A B C是直接同义词 对于B来说,A B D是直接同义词 对于C来说,A C E是直接同义词 对于A B C来说,A B C D E是间接同义词
14、反义标注
List<Word> words = WordSegmenter.segWithStopWords("5月初有哪些电影值得观看"); System.out.println(words); 结果如下: [5, 月初, 有, 哪些, 电影, 值得, 观看] 做反义标注: AntonymTagging.process(words); System.out.println(words); 结果如下: [5, 月初[月底, 月末, 月终], 有, 哪些, 电影, 值得, 观看] List<Word> words = WordSegmenter.segWithStopWords("由于工作不到位、服务不完善导致顾客在用餐时发生不愉快的事情,餐厅方面应该向顾客作出真诚的道歉,而不是敷衍了事。"); System.out.println(words); 结果如下: [由于, 工作, 不到位, 服务, 不完善, 导致, 顾客, 在, 用餐, 时, 发生, 不愉快, 的, 事情, 餐厅, 方面, 应该, 向, 顾客, 作出, 真诚, 的, 道歉, 而不是, 敷衍了事] 做反义标注: AntonymTagging.process(words); System.out.println(words); 结果如下: [由于, 工作, 不到位, 服务, 不完善, 导致, 顾客, 在, 用餐, 时, 发生, 不愉快, 的, 事情, 餐厅, 方面, 应该, 向, 顾客, 作出, 真诚[糊弄, 虚伪, 虚假, 险诈], 的, 道歉, 而不是, 敷衍了事[一丝不苟, 兢兢业业, 尽心竭力, 竭尽全力, 精益求精, 诚心诚意]] 以词“月初”为例: 可以通过Word的getAntonym()方法获取反义词如: System.out.println(word.getAntonym()); 结果如下: [月底, 月末, 月终] 注意:如果没有反义词,getAntonym()返回空集合:Collections.emptyList()
15、拼音标注
List<Word> words = WordSegmenter.segWithStopWords("《速度与激情7》的中国内地票房自4月12日上映以来,在短短两周内突破20亿人民币"); System.out.println(words); 结果如下: [速度, 与, 激情, 7, 的, 中国, 内地, 票房, 自, 4月, 12日, 上映, 以来, 在, 短短, 两周, 内, 突破, 20亿, 人民币] 执行拼音标注: PinyinTagging.process(words); System.out.println(words); 结果如下: [速度 sd sudu, 与 y yu, 激情 jq jiqing, 7, 的 d de, 中国 zg zhongguo, 内地 nd neidi, 票房 pf piaofang, 自 z zi, 4月, 12日, 上映 sy shangying, 以来 yl yilai, 在 z zai, 短短 dd duanduan, 两周 lz liangzhou, 内 n nei, 突破 tp tupo, 20亿, 人民币 rmb renminbi] 以词“速度”为例: 可以通过Word的getFullPinYin()方法获取完整拼音如:sudu 可以通过Word的getAcronymPinYin()方法获取首字母缩略拼音如:sd
16、Lucene插件:
1、构造一个word分析器ChineseWordAnalyzer Analyzer analyzer = new ChineseWordAnalyzer(); 如果需要使用特定的分词算法,可通过构造函数来指定: Analyzer analyzer = new ChineseWordAnalyzer(SegmentationAlgorithm.FullSegmentation); 如不指定,默认使用双向最大匹配算法:SegmentationAlgorithm.BidirectionalMaximumMatching 可用的分词算法参见枚举类:SegmentationAlgorithm 2、利用word分析器切分文本 TokenStream tokenStream = analyzer.tokenStream("text", "杨尚川是APDPlat应用级产品开发平台的作者"); //准备消费 tokenStream.reset(); //开始消费 while(tokenStream.incrementToken()){ //词 CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class); //词在文本中的起始位置 OffsetAttribute offsetAttribute = tokenStream.getAttribute(OffsetAttribute.class); //第几个词 PositionIncrementAttribute positionIncrementAttribute = tokenStream.getAttribute(PositionIncrementAttribute.class); //词性 PartOfSpeechAttribute partOfSpeechAttribute = tokenStream.getAttribute(PartOfSpeechAttribute.class); //首字母缩略拼音 AcronymPinyinAttribute acronymPinyinAttribute = tokenStream.getAttribute(AcronymPinyinAttribute.class); //完整拼音 FullPinyinAttribute fullPinyinAttribute = tokenStream.getAttribute(FullPinyinAttribute.class); //同义词 SynonymAttribute synonymAttribute = tokenStream.getAttribute(SynonymAttribute.class); //反义词 AntonymAttribute antonymAttribute = tokenStream.getAttribute(AntonymAttribute.class); LOGGER.info(charTermAttribute.toString()+" ("+offsetAttribute.startOffset()+" - "+offsetAttribute.endOffset()+") "+positionIncrementAttribute.getPositionIncrement()); LOGGER.info("PartOfSpeech:"+partOfSpeechAttribute.toString()); LOGGER.info("AcronymPinyin:"+acronymPinyinAttribute.toString()); LOGGER.info("FullPinyin:"+fullPinyinAttribute.toString()); LOGGER.info("Synonym:"+synonymAttribute.toString()); LOGGER.info("Antonym:"+antonymAttribute.toString()); } //消费完毕 tokenStream.close(); 3、利用word分析器建立Lucene索引 Directory directory = new RAMDirectory(); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter indexWriter = new IndexWriter(directory, config); 4、利用word分析器查询Lucene索引 QueryParser queryParser = new QueryParser("text", analyzer); Query query = queryParser.parse("text:杨尚川"); TopDocs docs = indexSearcher.search(query, Integer.MAX_VALUE);
17、Solr插件:
1、下载word-1.3.jar 下载地址:http://search.maven.org/remotecontent?filepath=org/apdplat/word/1.3/word-1.3.jar 2、创建目录solr-5.1.0/example/solr/lib,将word-1.3.jar复制到lib目录 3、配置schema指定分词器 将solr-5.1.0/example/solr/collection1/conf/schema.xml文件中所有的 <tokenizer class="solr.WhitespaceTokenizerFactory"/>和 <tokenizer class="solr.StandardTokenizerFactory"/>全部替换为 <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory"/> 并移除所有的filter标签 4、如果需要使用特定的分词算法: <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching"/> segAlgorithm可选值有: 正向最大匹配算法:MaximumMatching 逆向最大匹配算法:ReverseMaximumMatching 正向最小匹配算法:MinimumMatching 逆向最小匹配算法:ReverseMinimumMatching 双向最大匹配算法:BidirectionalMaximumMatching 双向最小匹配算法:BidirectionalMinimumMatching 双向最大最小匹配算法:BidirectionalMaximumMinimumMatching 全切分算法:FullSegmentation 最少分词算法:MinimalWordCount 最大Ngram分值算法:MaxNgramScore 如不指定,默认使用双向最大匹配算法:BidirectionalMaximumMatching 5、如果需要指定特定的配置文件: <tokenizer class="org.apdplat.word.solr.ChineseWordTokenizerFactory" segAlgorithm="ReverseMinimumMatching" conf="solr-5.1.0/example/solr/nutch/conf/word.local.conf"/> word.local.conf文件中可配置的内容见 word-1.3.jar 中的word.conf文件 如不指定,使用默认配置文件,位于 word-1.3.jar 中的word.conf文件
18、ElasticSearch插件:
1、打开命令行并切换到elasticsearch的bin目录 cd elasticsearch-1.5.1/bin 2、运行plugin脚本安装word分词插件: ./plugin -u http://apdplat.org/word/archive/v1.2.zip -i word 3、修改文件elasticsearch-1.5.1/config/elasticsearch.yml,新增如下配置: index.analysis.analyzer.default.type : "word" index.analysis.tokenizer.default.type : "word" 4、启动ElasticSearch测试效果,在Chrome浏览器中访问: http://localhost:9200/_analyze?analyzer=word&text=杨尚川是APDPlat应用级产品开发平台的作者 5、自定义配置 修改配置文件elasticsearch-1.5.1/plugins/word/word.local.conf 6、指定分词算法 修改文件elasticsearch-1.5.1/config/elasticsearch.yml,新增如下配置: index.analysis.analyzer.default.segAlgorithm : "ReverseMinimumMatching" index.analysis.tokenizer.default.segAlgorithm : "ReverseMinimumMatching" 这里segAlgorithm可指定的值有: 正向最大匹配算法:MaximumMatching 逆向最大匹配算法:ReverseMaximumMatching 正向最小匹配算法:MinimumMatching 逆向最小匹配算法:ReverseMinimumMatching 双向最大匹配算法:BidirectionalMaximumMatching 双向最小匹配算法:BidirectionalMinimumMatching 双向最大最小匹配算法:BidirectionalMaximumMinimumMatching 全切分算法:FullSegmentation 最少分词算法:MinimalWordCount 最大Ngram分值算法:MaxNgramScore 如不指定,默认使用双向最大匹配算法:BidirectionalMaximumMatching
19、Luke插件:
1、下载http://luke.googlecode.com/files/lukeall-4.0.0-ALPHA.jar(国内不能访问) 2、下载并解压Java中文分词组件word-1.0-bin.zip:http://pan.baidu.com/s/1dDziDFz 3、将解压后的 Java中文分词组件word-1.0-bin/word-1.0 文件夹里面的4个jar包解压到当前文件夹 用压缩解压工具如winrar打开lukeall-4.0.0-ALPHA.jar,将当前文件夹里面除了META-INF文件夹、.jar、 .bat、.html、word.local.conf文件外的其他所有文件拖到lukeall-4.0.0-ALPHA.jar里面 4、执行命令 java -jar lukeall-4.0.0-ALPHA.jar 启动luke,在Search选项卡的Analysis里面 就可以选择 org.apdplat.word.lucene.ChineseWordAnalyzer 分词器了 5、在Plugins选项卡的Available analyzers found on the current classpath里面也可以选择 org.apdplat.word.lucene.ChineseWordAnalyzer 分词器 注意:如果你要自己集成word分词器的其他版本,在项目根目录下运行mvn install编译项目,然后运行命令 mvn dependency:copy-dependencies复制依赖的jar包,接着在target/dependency/目录下就会有所有 的依赖jar包。其中target/dependency/slf4j-api-1.6.4.jar是word分词器使用的日志框架, target/dependency/logback-classic-0.9.28.jar和 target/dependency/logback-core-0.9.28.jar是word分词器推荐使用的日志实现,日志实现的配置文件 路径位于target/classes/logback.xml,target/word-1.3.jar是word分词器的主jar包,如果需要 自定义词典,则需要修改分词器配置文件target/classes/word.conf
已经集成好的Luke插件下载(适用于lucene4.0.0) :lukeall-4.0.0-ALPHA-with-word-1.0.jar
已经集成好的Luke插件下载(适用于lucene4.10.3):lukeall-4.10.3-with-word-1.2.jar
20、词向量:
从大规模语料中统计一个词的上下文相关词,并用这些上下文相关词组成的向量来表达这个词。 通过计算词向量的相似性,即可得到词的相似性。 相似性的假设是建立在如果两个词的上下文相关词越相似,那么这两个词就越相似这个前提下的。 通过运行项目根目录下的脚本demo-word-vector-corpus.bat来体验word项目自带语料库的效果 如果有自己的文本内容,可以使用脚本demo-word-vector-file.bat来对文本分词、建立词向量、计算相似性
分词算法效果评估:
1、word分词 最大Ngram分值算法: 分词速度:397.73047 字符/毫秒 行数完美率:59.93% 行数错误率:40.06% 总的行数:2533709 完美行数:1518525 错误行数:1015184 字数完美率:51.56% 字数错误率:48.43% 总的字数:28374490 完美字数:14632098 错误字数:13742392 2、word分词 全切分算法: 分词速度:67.032585 字符/毫秒 行数完美率:57.2% 行数错误率:42.79% 总的行数:2533709 完美行数:1449288 错误行数:1084421 字数完美率:47.95% 字数错误率:52.04% 总的字数:28374490 完美字数:13605742 错误字数:14768748 3、word分词 双向最大最小匹配算法: 分词速度:367.99805 字符/毫秒 行数完美率:53.06% 行数错误率:46.93% 总的行数:2533709 完美行数:1344624 错误行数:1189085 字数完美率:43.07% 字数错误率:56.92% 总的字数:28374490 完美字数:12221610 错误字数:16152880 4、word分词 最少分词算法: 分词速度:364.40622 字符/毫秒 行数完美率:47.75% 行数错误率:52.24% 总的行数:2533709 完美行数:1209976 错误行数:1323733 字数完美率:37.59% 字数错误率:62.4% 总的字数:28374490 完美字数:10666443 错误字数:17708047 5、word分词 双向最小匹配算法: 分词速度:657.13635 字符/毫秒 行数完美率:46.34% 行数错误率:53.65% 总的行数:2533709 完美行数:1174276 错误行数:1359433 字数完美率:36.07% 字数错误率:63.92% 总的字数:28374490 完美字数:10236574 错误字数:18137916 6、word分词 双向最大匹配算法: 分词速度:539.0905 字符/毫秒 行数完美率:46.18% 行数错误率:53.81% 总的行数:2533709 完美行数:1170075 错误行数:1363634 字数完美率:35.65% 字数错误率:64.34% 总的字数:28374490 完美字数:10117122 错误字数:18257368 7、word分词 正向最大匹配算法: 分词速度:662.2127 字符/毫秒 行数完美率:41.88% 行数错误率:58.11% 总的行数:2533709 完美行数:1061189 错误行数:1472520 字数完美率:31.35% 字数错误率:68.64% 总的字数:28374490 完美字数:8896173 错误字数:19478317 8、word分词 逆向最大匹配算法: 分词速度:1082.0459 字符/毫秒 行数完美率:41.69% 行数错误率:58.3% 总的行数:2533709 完美行数:1056515 错误行数:1477194 字数完美率:30.98% 字数错误率:69.01% 总的字数:28374490 完美字数:8792532 错误字数:19581958 9、word分词 逆向最小匹配算法: 分词速度:1906.6315 字符/毫秒 行数完美率:41.42% 行数错误率:58.57% 总的行数:2533709 完美行数:1049673 错误行数:1484036 字数完美率:31.34% 字数错误率:68.65% 总的字数:28374490 完美字数:8893622 错误字数:19480868 10、word分词 正向最小匹配算法: 分词速度:1839.1554 字符/毫秒 行数完美率:36.7% 行数错误率:63.29% 总的行数:2533709 完美行数:930069 错误行数:1603640 字数完美率:26.72% 字数错误率:73.27% 总的字数:28374490 完美字数:7583741 错误字数:20790749
相关文章:
-
Elasticsearch之分词器查询分词效果
2019-07-31 17:20:54Elasticsearch之分词器中文的我们一般使用IK,如果没有指定分词器。默认使用的是standard分词。 IK分词能将中文分成词组: standard分词则会将每个中文分成一个单个的词: 其他分词器:ansj_index ...... 优劣:...0、引言
Elasticsearch之分词器中文的我们一般使用IK,如果没有指定分词器。默认使用的是standard分词。
IK分词能将中文分成词组:
standard分词则会将每个中文分成一个单个的词:
其他分词器:ansj_index ......
优劣:IK 分词能够根据词库创建有效的分词索引,搜索的效率和准确率很高。劣势:有小部分词如果不存在词库,则不会被分词,因此在查询的时候,可能目标文本存在此词,但是分词分不出这词,则查询结果将为空。
优劣:standard分词是根据每个汉字进行的分词,因此 优势就是,IK存在的问题,将不会出现在standard分词上面,但是劣势更加明显,第一:搜索引擎的文本样例基本都是千万级,亿级数据,每字均创建索引,索引区会很大。第二:查询结果如果是match则会出现非常大的干扰型数据,且相关性的排序会不理想。特别是完全匹配跟部分匹配的排序非常糟糕(可能可以通过查询优化)。
其他:都存在某部分优劣,本文档就不全部讲述了
1、使用分词器 6.0.0以下
如果你使用的是其他分词器的话,你将ansj_index 换成你的standard 或者ik_max_word 等 即可。
GET请求即可
http://localhost:9200/category/_analyze?analyzer=ansj_index&text=测试用例
结果如下:
{ "tokens": [ { "token": "测试用例", "start_offset": 0, "end_offset": 4, "type": "word", "position": 1 }, { "token": "测试", "start_offset": 0, "end_offset": 2, "type": "word", "position": 2 }, { "token": "试用", "start_offset": 1, "end_offset": 3, "type": "word", "position": 3 } ] }
2、查询分词器6.0.0及上
POST请求:下面是JSON数据
http://localhost:9200/_analyze/?pretty
{ "analyzer": "ik_max_word", "text": "测试用例" }
{ "tokens": [ { "token": "测试", "start_offset": 0, "end_offset": 2, "type": "CN_WORD", "position": 0 }, { "token": "试用", "start_offset": 1, "end_offset": 3, "type": "CN_WORD", "position": 1 }, { "token": "例", "start_offset": 3, "end_offset": 4, "type": "CN_CHAR", "position": 2 } ] }
上面是正常情况下面的使用方式。
3、6.0.0以上使用老的查询方式
http://www.zcsjw.com/es2/category/_analyze?analyzer=ansj_index&text=测试用例
报错: { "error": { "root_cause": [{ "type": "parse_exception", "reason": "request body or source parameter is required" }], "type": "parse_exception", "reason": "request body or source parameter is required" }, "status": 400 }
处理方式是你用6.0.0的方式即可。
部分信息参考来源:
-
如何使用中科院分词技术分词
2017-10-21 03:30:21如何使用中科院分词如何使用中科院分词如何使用中科院分词如何使用中科院分词 -
ansj分词史上最详细教程
2016-12-13 11:29:50最近的项目需要使用到分词技术。本着不重复造轮子的原则,使用了ansj_seg来进行分词。本文结合博主使用经过,教大家用最快的速度上手使用ansj分词。1.给ansj来个硬广 -
python jieba分词(结巴分词)、提取词,加载词,修改词频,定义词库
2017-08-02 17:13:10“结巴”中文分词:做最好的 Python 中文分词组件,分词模块jieba,它是python比较好用的分词模块, 支持中文简体,繁体分词,还支持自定义词库。 jieba的分词,提取关键词,自定义词语。 结巴分词的原理 这里写... -
jieba中文分词组件
2019-05-21 18:16:27分词 添加自定义词典 载入词典 调整词典 关键词提取 基于 TF-IDF 算法的关键词抽取 基于 TextRank 算法的关键词抽取 词性标注 并行分词 Tokenize:返回词语在原文的起止位置 默认模式 搜索模式 ... -
jieba分词详解
2019-02-24 18:55:10语音识别中有一项任务就是训练语言模型,而对于中文的语言模型,需要事先进行分词。而语音识别中的语言模型还有个特殊的要求,就是语言模型中的所有词都必须在发音词典中(也就是说每个词都要有对应的发音)。因此这就... -
基于python中jieba包的中文分词中详细使用(一)
2018-05-06 12:43:21基于python中jieba包的中文分词中详细使用(一) 01.前言 02.jieba的介绍 02.1 What 02.2特点 02.3安装与使用 02.4涉及到的算法 03.主要功能 03.01分词 03.02添加自定义词典 03.02调整词典 04.结束语 ... -
3.ElasticSearch分词器,包括默认分词器、英文分词器、中文分词器
2020-08-28 00:03:45以上用例是使用 analyzer 指定英文分词器查看分词结果,如果field是索引里的字段,会使用字段指定的分词器进行分词。 接下来进入测试。 默认分词器 默认使用stander分词器 在不标明的时候都是使用默认的stander... -
中文分词原理及分词工具介绍
2018-07-31 11:00:37本文首先介绍下中文分词的基本原理,然后介绍下国内比较流行的中文分词工具,如jieba、SnowNLP、THULAC、NLPIR,上述分词工具都已经在github上开源,后续也会附上github链接,以供参考。 1.中文分词原理介绍 1.1 ... -
盘古分词 - 多元分词算法
2019-04-11 15:26:07中文分词按照分词粒度来分,分成 一元分词,二元分词,多元分词和精确分词等类型。一元分词就是最简单的分词,将所有的中文字符按照单字形式输出。二元分词按双字形式输出。多元分词则是将一句话中可能的单词组合... -
jieba 分词如何控制分词粒度
2019-03-26 20:00:47jieba分词如何实现分词的粒度 分词粒度的概念 我最喜欢的篮球明星是勒布朗·詹姆斯,一般我们直接称呼他为詹姆斯 以该句话为例,最好的分词结果是 “勒布朗·詹姆斯” 和 “詹姆斯”都能分离出来。这就涉及到了... -
数据处理之文本分词、MMSEG分词工具、斯坦福NLTK分词工具
2020-07-03 22:36:44文本分词概述 二. 中文分词算法分类 三. MMSEG分词工具 四. 斯坦福NLTK分词工具 1 CRF方法实例 一. 文本分词概述 文本分词是将字符串文本划分为有意义的单位的过程,如词语、句子或主题。由计算机实现... -
ElasticSearch中文分词,看这一篇就够了
2020-06-03 16:09:11本文我们围绕Elasticsearch的分词器,从内置分词器的局限性出发,引出了中文分词器,然后详细介绍了ik分词器的编译,安装配置和使用。 -
Elasticsearch 英文分词 & 中文分词
2020-10-17 07:53:56对于倒排索引来说,很重要的一件事情就是需要对文本进行分词,经过分词可以获取情感、词性、质性、词频等等的数据。 Elasticsearch 分词工作原理 在 Elasticsearch 中进行行分词的需要经过分析器的3个模块,字符... -
Elasticsearch7 分词器(内置分词器和自定义分词器)
2019-08-05 18:01:30文章目录Elasticsearch7 分词器(内置分词器和自定义分词器)analysis概览char_filter... -
中文分词的基本原理以及jieba分词的用法
2017-01-21 13:15:40结巴分词是国内程序员用Python开发的一个中文分词模块,可能是最好的Python中文分词组件? 中文分词的原理 – 1、中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是... -
ElasticSearch7笔记:Analysis分词、Analyzer分词器,安装分词插件
2020-09-02 16:06:19Analysis就是分词的过程,将文档内容转换为一系列单词(term),当然这里除了分割还有分析的过程,如统一转换小写、统一使用单数、统一人称、相近词等等。 Analyzer是分词器,Analysis需要分词器来完成分词操作。分词... -
jieba分词
2018-08-23 17:21:39对于NLP(自然语言处理)来说,分词是一步重要的工作,市面上也有各种分词库,11款开放中文分词系统比较。 1.基于词典:基于字典、词库匹配的分词方法;(字符串匹配、机械分词法) 2.基于统计:基于词频度统计的... -
python︱六款中文分词模块尝试:jieba、THULAC、SnowNLP、pynlpir、CoreNLP、pyLTP
2017-08-10 17:42:39四款python中中文分词的尝试。尝试的有:jieba、SnowNLP(MIT)、pynlpir(大数据搜索挖掘实验室(北京市海量语言信息处理与云计算应用工程技术研究中心))、thulac(清华大学自然语言处理与社会人文计算实验室) ... -
盘古分词
2017-09-28 10:13:01盘古分词盘古分词是一个开源中文分词组件。其界面如图所示 特点 多元分词中文分词按照分词粒度来分,可以分成一元分词,二元分词,精确分词等类型。一元分词就是最简单的分词,将所有的中文字符按照单字形式输出。... -
HanLP中文分词——字典分词
2020-05-02 11:32:39对汉语言进行处理,首先的步骤是将汉语进行分词。汉语进行分词的一个比较 low 但有用的方法是字典拆分。 字典拆分使用启发式算法——双向文本匹配算法,结合字典,对汉语语句和段落进行拆分的方法。 from sklearn.... -
中文分词及拼音分词
2019-02-27 15:57:37相关软件下载 elasticsearch-analysis-ik-6.4.2.zip ...ik分词插件安装 #在elasticsearch的plugins/目录下创建ik文件夹 cd elasticsearch/plugins/ mkdir ik #解压文件 cd ik unzip /es/tools/elast... -
python 中文分词(规则分词实现,HMM+Viterbi实现统计分词,jieba分词应用)
2018-11-05 11:46:00顾名思义,直接靠规则来进行分词,这种方法是一种机械的分词方法,主要手段就是通过将语句的每个字符串与词表进行匹配,找到就分,找不到就不分。 词表: 天气 真好 今天 伤心 冬瓜汤 句子: 今天天气真好... -
基于结巴分词的论文文章分词
2019-08-05 21:06:57开源的中文分词包有很多,这次选用的分词算法库是结巴分词,它是非常流行的中文分词包,有多个语言的版本,这次采用了java版的。从结巴分词的github的主页上下载代码后,根据例子,填写少量代码就可以实现任意文本的...
-
QT 学生通讯录
-
C/C++编程全家桶(Daozy极限编程)
-
前端性能优化
-
正则表达式匹配非字母或者数字
-
备战2021软考网络规划设计师顺利通关培训套餐
-
Day10-2021.1.18-剑指offer的八道二叉树题目的整理。涉及递归调用+广度优先遍历。
-
Android上机实验
-
【数据分析-随到随学】量化交易策略模型
-
CentOS7之部署.Net Core
-
"万年历" C语言 新手
-
【数据分析-随到随学】Python数据获取
-
windows下的socket tcp压力测试工具(附突破连接限制的方法和工具).zip
-
使用PHP实现WEB网站登陆后台编写
-
将两条宽带通过两个路由器组成一个局域网的方法.zip
-
阿里巴巴Java开发手册(详尽版).rar
-
Liunx上MySQL 第一次创建,修改mysql中的用户密码。
-
9000题库-上.iso
-
Java.Web整合开发王者归来.zip
-
【2021】UI自动化测试Selenium3
-
ucosii+STM32 BLDC电机控制器设计.zip