知识库 : 如何在UDH Search中配置中文分词

Edit Document

 

 

 

 

 

 

 

 

 

如何在UDH Search中配置中文分词

 

 

 

作者 费英林


目录

1.               安装准备

1.1.               UDH1.0

1.2.               UDH Search

1.3.               Ik Analyzer

2.               定义分词库

2.1.               定义分词库文件名

2.2.               定义分词库文件

3.               分词库文件部署

3.1.               创建类目录

3.2.               部署库文件到类目录

3.3.               重启 Solr 服务

4.               IK 类文件部署

5.               索引创建

6.               验证

 

 

 

UDH Search 是基于 Cloudera Search 构建,与 Hadoop 平台高度集成,提供了用于索引创建、存储以及查询的工具和模型。由于 Apache Solr 对中文的分词及停词的处理效果很不好,我们需要借助第三方工具来实现这些功能。下文以 I k Analyzer (简称 IK )为例,阐述如何在 Hadoop 平台下的搜索引擎里添加中文分词。

本文重点阐述分词工具的配置与使用,关于 UDH Search 相关的内容请参考相关文档。

1.     安装准备

1.1.     UDH1.0

    参见 UDH1.0 安装手册。

1.2.     UDH Search

    参见‘ UDH Search 系统构建及其应用’。

1.3.     I k Analyzer

    下载链接: http://code.google.com/p/ik-analyzer/downloads/list

    版本: IK Analyzer 2012FF_hf1.zip

2.     定义分词库

    目前, IK 自带的分词库有 275714 个汉语词条。另外, IK 分词器也提供了对分词及停词词库的扩展支持。

2.1.     定义分词库文件名

    解压缩 IK Analyzer 2012FF_hf1.zip 到一临时目录,包含以下文件:

-rw-r--r-- 1 root root 1165908 10 26 2012 IKAnalyzer2012FF_u1.jar

-rw-r--r-- 1 root root     414 2 月  14 2012 IKAnalyzer.cfg.xml

-rw-r--r-- 1 root root   17778 1 月  17 2012 LICENSE.txt

-rw-r--r-- 1 root root     278 1 月  19 2012 NOTICE.txt

-rw-r--r-- 1 root root     161 4 月  15 2011 stopword.dic

 

    其中 IKAnalyzer.cfg.xml IK Analyzer 的配置文件,我们需要在这个文件里指定分词库的文件名:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>

              <comment>IK Analyzer 扩展配置 </comment>

              <entry key="ext_dict"> delimiters .dic;</entry>

              <entry key="ext_stopwords">stopword.dic;</entry>

</properties>

2.2.     定义分词库文件

    分词库文件格式是无 BOM UTF-8 编码的中文文本文件,文件扩展名不限。词库中每个中文词汇独立占一行,使用 \r\n DOS 方式换行。在配置文件中,用户可一次配置多个词库文件,文件名使用“ ; ”号分隔。

 

3.     分词库文件部署

    UDH Search 安装后会生成一个 Tomcat 应用,我们需要将分词(停词)库文件部署在 Tomcat 服务器上,保证 IK 运行的时候可以访问到这些文件。

3.1.     创建类目录

默认安装后,我们需要在 Tomcat 服务器上手工生成一个类目录:

mkdir /usr/lib/solr/webapps/solr/WEB-INF/classes/

3.2.     部署库文件到类目录

拷贝 IK 配置文件和词库文件到所有的 Solr 服务器:

cp IKAnalyzer.cfg.xml /usr/lib/solr/webapps/solr/WEB-INF/classes/

cp delimiters .dic.dic /usr/lib/solr/webapps/solr/WEB-INF/classes/

 

3.3.     重启 Solr 服务

库文件部署后必须重启服务器:

sudo service solr-server restart

4.     IK 类文件部署

由于索引的创建程序是运行在 Yarn 平台上的, MapReduce 框架需要在 Hadoop 的类路径里访问到 IK Jar 包。我们可以通过两种方式实现类加载。一种是将 Jar 包放到 /usr/lib/hadoop-yarn/lib/ 目录下,重启 Yarn 服务,这样 Hadoop 就可以从全局变量里访问到类路径。这种方式的优点是不需要在每次运行作业时都指定类路径,缺点是 Jar 包内容有变动时,我们需要重启 Yarn 服务,这对于生产环境来说是不合适的。在生产环境里,我们通常不会去重启 Yarn 这样的主服务。

 

另一种方式是在每一次作业运行时指定类路径,不需要重启服务,同时提供了更大的灵活性,可随时更改类文件。

 

出于一致性考虑,我们将 IK Jar 包复制到 Solr 的类路径下,但要记住,运行在 Hadoop 平台上的 Solr 是无法自动加载这个类库的:

cp IKAnalyzer2012FF_u1.jar /usr/lib/solr/webapps/solr/WEB-INF/ lib

5.     索引创建

以下以舆情分析中的 activity 数据为例,给出索引创建的具体命令:

 

# 清空历史数据

solrctl collection --deletedocs activity

 

# 执行 Hadoop 作业

                            在这个命令里,我们加入了 libjars 这个参数,指定了 IK 包的路径,实现动态加载:

HADOOP_CLASSPATH=/usr/lib/hbase/hbase-protocol.jar \

hadoop --config /etc/hadoop/conf jar /usr/lib/hbase-solr/tools/hbase-indexer-mr-*-job.jar \

--conf /etc/hbase/conf/hbase-site.xml \

--libjars /usr/lib/solr/webapps/solr/WEB-INF/lib/IKAnalyzer2012FF_u1.jar \

-D 'mapred.child.java.opts=-Xmx500m' --hbase-indexer-file $HOME/morphlines-activity.xml \

--zk-host 127.0.0.1/solr --collection activity --go-live \

--log4j /etc/hbase/conf.dist/log4j.properties

6.     验证

打开 Solr 界面,找到相应的 Shard 进行分析,可看到分词效果:

search.jpg

 

Attachments:

技术分享-几种数据采集技术的简介.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
UDH Web框架简介.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
技术分享-如何在UDH Search中配置中文分词.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)
技术分享-如何在UDH Search中配置中文分词.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)