第三方中文分词器|学习笔记

简介: 快速学习第三方中文分词器

开发者学堂课程【Lucene 知识精讲与实战(上) 第三方中文分词器】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/700/detail/12343


第三方中文分词器


内容介绍:

一、第三方中文分词器

二、中文分词器 IK-analyzer

 

一、第三方中文分词器

1.为什么要讲解第三方分词器?

从以上 Lucene 的原生分词器来看,Lucene 原生提供的分词器都有一个特点:对英文分词效果很好但是对中文分词的效果不明显。

原因是中文的语义博大精深,同一句话,不一样的切分词、断词、断句理解出来的意思是不一样的。因此需要第三方分词器,而这些分词器绝大多数都是中国人开发。

2.第三方中文分词器简介

(1)paoding:庖丁分词器。支持中文的语义分析,是中国人团队自己研发出来的,现在这个团队已经不再提交新代码。由于 Lucene 变化很大,比如 API 等变化是很大的,版本在不断更新,现在已经更新到8.0以上的版本了,现在常用的版本是7.3.3,paoding 分词器无法和 Lucene 进行对接,也因此,paoding 分词器已经过时。

庖丁解牛最新版在 https:/code google.com/p/paoding. 中最多支持 Lucene3.0 ,且最新提交的代码在 2008-06-03,在 svn 中最新也是2010年提交,已经过时,不予考虑。

(2)mmseg4i:对中文的分词效果良好,但是相比较其他分词器,它无法扩展,有很多不足(比如公司的公司名在默认的词典中很难查到,需要手动在词典中添加)。

最新版已从 https:/code.google.com/p/mmseg4i/ 移至 https:/github.com/chenlb/mmseg4isolr ,支持 Lucene4.10 ,且在 github 中最新提交代码是2014年6月,从09年~14年一共有:18个版本,也就是一年几乎有3个大小版本,有较大的活跃度,用了 mmseg 算法。

(3)IK-analyzer:它有两个词典,一个是扩展词典,方便用户进行扩展;一个是停用词典(也可以叫做停止词典),程序员可以在这两个词典里添加词汇,比如对于扩展词典,切分词时的一些重要名词,公司名,一些股票代码都可以添加上去;对于停用词典,程序员可以把一些不重要的不想被搜索的词汇添加到停用词典中,这样在切分词时停用词典的词汇不会搜索出来。

最新版在 https:/code.google.com/p/k-analyzer . 上,支持 Lucene4.10 ,从2006年12月推出1.0版开始,IKAnalyzeri 已经推出了4个大版本。最初,它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.O版本开始,IK发展为面向ava的公用分词组件,独立于 Lucenel 项目,同时提供了对 Luc6的默认优化实现。在2012版本中,IK 实现了简单的分词歧义排除算法,标志着 IK 从单纯的词典分词向模拟语义分词衍化。但是也就是2012年12月后没有在更新。

(4)ansj_seg:最新版本在 https:/github.com/NLPchina/ansj seg tagst 仅有1.1版本,从2012年到2014年更新了大小6次,但是作者本人在2014年10月10日说明:“可能我以后没有精力来维护 ansj_seg 了”,现在由 "nip_china” 管理。2014年11月有更新。并未说明是否支持 Lucene ,是一个由CRF(条件随机场)算法所做的分词算法。

5imdict-chinese-analyzer:最新版在

htps:/code,google.com/p/imdict-chinese-analyzer/ ,最新更新也在2009年5月,下载源码,不支持 Lucene4.10。是利用 HMM (隐马尔科夫链)算法。

(6)Jcseg:最新版本在 git.oschina.net/lionsoul/jcseg ,支持 Lucene4.10 ,作者有较高的活跃度。利用 mmseg 算法。

每种分词器使用的分词算法不一样,而且其中分词效果最好,扩展最容易的是 IK-analyzer 分词器,下面讲解的也是 IK 分词器。


二、中文分词器 IK-analyzer

1.使用中文分词器 IK-analyzer

下面讲解 IK-analyzer 的使用

(1)首先在项目中添加它的依赖,即把以下代码复制粘贴过去:

<dependency>

<groupId>org.wltea.ik-analyzer</groupId>

<artifactId>ik-analyzer</artifactId>

<version>8.1.0</version>

</dependency>

如图:

image.png

在这里,在创建项目 pom.xml 时已经添加。

(2)使用 IK-analyzer

IK-analyzer 有两个词典:

①扩展词典:里面放专有名词,或者自己造的词汇(认为需要强制将某一些字分成一个词)

凡是出现在扩展词典的词,就会被强制分成一个词

②停用词典:凡是出现在停用词典中的词,都会被过滤

(3)打开资料,如图:

image.png

在 Lucene 资料中的资源中有工具 jar 包。jar 包里面有中文分词,在里面有中文分词器。

如图:

image.png

在配置文件中从上到下是:扩展词典、核心配置文件、停用词典。

(4)如图:

image.png

把它们全部复制然后粘贴到项目中的 resource 里。

(5)粘贴后,IK-analyzer.cfg.xml 是它的配置文件,它引入了 ext.dic 和 stopword.dic 文件也就是扩展词典和停用词典

(6)把扩展词典和停用词典分别打开,如图:

image.png

停用词典中记录了:a、an、and 等英文词汇和人民、啊、哎等中文词汇,凡是出现在停用词典 中的词汇,在切分词时候都会被过滤,不会被记录在索引库中。需要注意的是,每一个字或者词都占一行并且前后不能包含空格。

image.png

扩展词典里面放的是一些专有名词或者认为是一个词的词汇,如图在切分词时候遇华为就会把华为分成一个词,手机也分成一个词。

比如说一个公司名是传智博客,在切分词时候就会分成:传、智、博客。但是把这个词放在扩展词典中,就是传智博客一个词。再比如说,对于黑马程序员切分词,黑马是一个词,程序员是一个词,但是放在扩展词典就是黑马程序员一个词。

这样的方式为扩展提供了极大的便利。

2.测试

请看以下代码:

/**

*使用第三方分词器(IK 分词)

*特点:支持中文语义分析,提供停用词典,提供扩展词典供程序员扩展使用

*@throws Exception

*/

@Test

public void TestwhitespaceAnalyzer throws Exception{

//1.创建分词器,分析文档,对文档进行分词

Analyzer analyzer new WhitespaceAnalyzer ();

//2.创建 Directory 对象,声明索引库的位置

Directory directory = FSDirectory.open(Paths.get("E:\\dir"));

//3、创建 IndexwriteConfig 对象,写入索引需要的配置

IndexwriterConfig config = new IndexwriterConfig(analyzer);

//4.创建 Indexwriter 写入对象

Indexwriter indexwriter = new Indexwriter(directory,config);

/5.写入到索引库,通过 Indexwriter 添加文档对象 document

Document doc = new Document

doc.add(new TextField("name","vivo X23 8GB+128GB 幻夜蓝,水滴屏全面屏,游戏手机,移动联通 电信全网通4G手机",Field.Store.YEs));

indexwriter.addDocument (doc);

//6.释放资源

indexwriter.close();

}

把以上测试代码复制粘贴到测试类中,如图:

image.png

先创建分词器,这个分词器叫做 IK-analyzer,后面指定索引库位置,创建数据流初始化对象,创建流。这里的词汇是:vivo  x23  8GB+128GB  幻夜蓝等。

(2)运行

运行代码,查看效果。

如图:

image.png

运行代码,查看效果。可以看到,打印出来的信息说明扩展词典和停用词典可以加载,

(3)运行成功后,打开 look 小工具

(4)重新打开索引库,看切分词后的效果。

如图:

image.png

可以看到,分词效果良好,如图可知:通电是一个词,蓝是一个词,移动、电信等也是一个词。这里认为应该过滤的词放在了停用词典中,也可以把认为应该分成一个字一个词的词汇强制分在扩展词典中。

以上就是第三方分词器的使用。对于扩展中文词库等,可以自行了解。

相关文章
|
2月前
|
存储 人工智能 测试技术
探索LlamaIndex:如何用Django打造高效知识库检索
探索LlamaIndex:如何用Django打造高效知识库检索
45 3
|
5月前
|
XML Java 语音技术
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
188 0
|
11月前
|
机器学习/深度学习 自然语言处理 API
文档翻译有哪些开源的工具
文档翻译有哪些开源的工具
|
11月前
|
自然语言处理 搜索推荐 关系型数据库
淘东电商项目(47) -商品搜索服务功能的实现(集成拼音分词器)
淘东电商项目(47) -商品搜索服务功能的实现(集成拼音分词器)
81 0
|
数据采集 搜索推荐 Python
扩展词库秘籍:Python利用百度搜索引擎实现以词搜词
在这篇文章中,我将教你如何使用百度搜索引擎来实现以词搜词的目的。无论是为了拓展词汇量、进行主题扩展,还是进行学习和研究,这个技巧都会让你更加高效地获取相关信息。利用百度搜索的工作原理和搜索算法,以便更好地理解搜索结果的生成过程。接下来,我会分享一个简单而有效的方法,让你能够通过一个关键词或短语来搜索到与之相关的词汇。
扩展词库秘籍:Python利用百度搜索引擎实现以词搜词
|
自然语言处理 开发者
中文分词概述|学习笔记
快速学习中文分词概述。
|
自然语言处理 开发者
中文分词概述 | 学习笔记
快速学习中文分词概述
开源一个文本分析项目
Github https://github.com/sea-boat/TextAnalyzer TextAnalyzer a text analizer that can analyze text.
1521 0
|
自然语言处理 搜索推荐 算法
中文分词工具(LAC) 试用笔记
中文词法分析LAC 支持Python、C++、JAVA、Android 用接口调用,其他语言的话就需要开发者自己自行封装了,笔者这次决定使用Python进行实验,在文中也会把相关代码给贴出来,给大家作为一个参考
579 0
中文分词工具(LAC) 试用笔记
|
数据采集 SQL 自然语言处理
HarmonyOS开发入门笔记 在线词典
HarmonyOS开发入门笔记 在线词典
HarmonyOS开发入门笔记 在线词典