`

MapReduce实现与自定义词典文件基于hanLP的中文分词详解

阅读更多

 

前言:

文本分类任务的第1步,就是对语料进行分词。在单机模式下,可以选择python jieba分词,使用起来较方便。但是如果希望在Hadoop集群上通过mapreduce程序来进行分词,则hanLP更加胜任。

一、使用介绍

hanLP是一个用java语言开发的分词工具, 官网是 http://hanlp.com/  hanLP创建者提供了两种使用方式,一种是portable简化版本,内置了数据包以及词典文件,可通过maven来管理依赖,只要在创建的 maven 工程中加入以下依赖,即可轻松使用(强烈建议大家优先采用这种方法)。



 

具体操作方法如图示,在pom.xml中,加入上述依赖信息,笔者使用的IDEA编辑器就会自动开始解析依赖关系,并导入左下角的hanlp jar包。



 

第二种方法需要自己下载data数据文件,并通过一个配置文件hanlp.properties来管理各种依赖信息,其中最重要的是要人为指定data目录的家目录。(不建议大家一上来就使用这种方法,因为真心繁琐!)

二、通过第一种方法,建立maven工程,编写mapreduce完整程序如下(亲测运行良好):

 



 

 

 

 

三、添加自定义词典文件 & 单机模式

有时候我们希望根据自己业务领域的一些专有词汇进行分词,而这些词汇可能并不包含在官方jar包自带的分词词典中,故而我们希望提供自己的词典文件。首先,我们定义一个测试的句子,并用系统默认的词典进行分词,可看到效果如下图所示:



 

假设在我们的专业领域中,“词分”,“自试” 都是专业术语,那么使用默认词典就无法将这些目标词分出来了。这时就要研究如何指定自定义的词典,并在代码中进行调用。这时有2种方法。

1. 在代码中,通过CustomDictionary.add();来添加自己的词汇,如下图所示, 可以看到这次分词的结果中,已经能将“词分”,“自试” 单独分出来了。



 

8

假如说我们想添加的词汇较多呢,通过上面的方法,一个一个 add, 未勉显得不够优雅,这时我们就希望通过一个词典文件的形式来添加自定义词汇。在官方网站上,提供了如下一种方法。该方法要求我们单独下载一个data目录,以及定义一个配置文件。下面我们就来看下如何操作。



 

9

首先,下载好上面的hanlp.jar后,在java工程师导入该包。同时在src目录下创建一个hanlp.properties配置文件,内容直接复制官网上的内容,但是注意修改两个地方。



 

 

其中myDictionary.txt是我们自己创建的一个词典文件,其内容为:



 

 

这时候,再运行方法1同样的代码,可看到如下结果中,也将词分自试c



 

12

注意,如果你不想显示/n /nr这样的记性,也可以将上述配置文件中最后一行

ShowTermNature=true

修改为

ShowTermNature=false

注意,这时候,运行成功的话,会在词典目录下生成一个词典缓存文件



 

13

四、自定义词典文件 & mapreduce提交

写到这里,想必细心的人已经想到了,当我们希望将编辑好的mapreduce程序打成jar包,提交到集群上运行时,上面这种通过配置文件指定data目录的方法还可行吗? 反正我是没有搞定。理论上,要么我们需要把data上传到集群上每个节点,要么把data直接打到jar包中。但是,这两种方法本人尝试都没有成功。最终,跟一位同事相互讨论后,借鉴了对方的方法。即我们猜想,portable版本自带了data数据,且不需要额外指定配置文件。而我们现在想做的就是添加了一些自定义词汇,那么,是否我们将其中的词典缓存文件替换掉,就行了呢?动手试下才知道嘛。这次不通过maven来管理依赖,直接下载portable版本的jar包,然后打开压缩文件,删除data\dictionary\custom目录下的CustomDictionary.txt.bin文件,然后将上一步运行成功的CustomDictionary.txt.bin粘贴进去! 将工程打成jar包,再通过命令行进入其所在目录,执行java -jar  包名, 发现可以执行成功。然后,为了测试是否对这个绝对路径有依赖,我们故意将该jar包剪切到 d:\ , 再执行一下,发现同样是成功的。



 

具体到提交到集群上运行,我们就不赘述了。这个方法虽然土一些,但至少是可用的。

文章转载自 a_step_further 的博客(有小幅改遍)

 

  • 大小: 15.2 KB
  • 大小: 128.8 KB
  • 大小: 126.1 KB
  • 大小: 95.9 KB
  • 大小: 162.6 KB
  • 大小: 34.6 KB
  • 大小: 118.8 KB
  • 大小: 109 KB
  • 大小: 65.8 KB
  • 大小: 166.6 KB
  • 大小: 6.4 KB
  • 大小: 29.6 KB
  • 大小: 42.5 KB
  • 大小: 15.8 KB
分享到:
评论

相关推荐

    基于MapReduce实现决策树算法

    基于MapReduce实现决策树算法的知识点 基于MapReduce实现决策树算法是一种使用MapReduce框架来实现决策树算法的方法。在这个方法中,主要使用Mapper和Reducer来实现决策树算法的计算。下面是基于MapReduce实现决策...

    中文分词mapreduce程序

    而`org`目录则可能是项目源代码的组织结构,按照包(package)的形式存放类文件,例如`org.example`可能表示一个名为“example”的自定义包,其中包含了与分词MapReduce相关的类。 总结来说,这个“中文分词...

    MapReduce2中自定义排序分组

    在进行测试时,`hadoop_test1` 文件可能是包含 MapReduce 应用程序的 JAR 包,用于运行自定义排序和分组的代码。你可以使用 Hadoop 命令行工具,如 `hadoop jar hadoop_test1 myJob -Dmapreduce.job.reduces=num_of_...

    Hadoop MapReduce实现tfidf源码

    本篇文章将详细讲解如何利用Hadoop MapReduce实现TF-IDF(Term Frequency-Inverse Document Frequency)算法,这是一种在信息检索和文本挖掘中用于评估一个词在文档中的重要性的统计方法。 首先,我们要理解TF-IDF...

    基于MapReduce的Apriori算法代码

    基于MapReduce的Apriori算法代码是一个使用Hadoop MapReduce框架实现的关联规则挖掘算法,称为Apriori算法。Apriori算法是一种经典的关联规则挖掘算法,用于发现事务数据库中频繁出现的项集。该算法的主要思想是生成...

    MapReduce实现join连接

    简单的在MapReduce中实现两个表的join连接简单的在MapReduce中实现两个表的join连接简单的在MapReduce中实现两个表的join连接

    MapReduce之自定义OutPutFormat.md

    MapReduce之自定义 OutPutFormat,通过一个案例,实现自定义的一个OutPutFormat,来更加的深刻的理解MR的过程

    mapreduce wc单词计数 自定义分区 自定义排序实现

    在这个特定的案例中,我们不仅实现了基本的WordCount功能,还扩展了MapReduce的能力,通过自定义分区和自定义排序来优化数据处理流程。 首先,基础的`WordCount`实现,通常包含以下四个步骤: 1. **Map阶段**:...

    MapReduce详解包括配置文件

    ### MapReduce详解包括配置文件 #### 一、MapReduce概览与原理 MapReduce作为Hadoop的核心组件之一,提供了一种高效、可靠的分布式计算框架。它最初由Doug Cutting基于Google发表的论文《MapReduce: Simplified ...

    基于MapReduce实现物品协同过滤算法(ItemCF).zip

    本项目“基于MapReduce实现物品协同过滤算法(ItemCF)”是针对推荐系统中的一种经典算法进行分布式实现,旨在提高推荐效率和精度。下面我们将深入探讨MapReduce、Hadoop以及物品协同过滤(Item-based Collaborative...

    KNN算法基于Hadoop平台的MapReduce实现

    该项目实现了KNN算法在Hadoop平台基于欧拉距离,加权欧拉距离,高斯函数的MapReduce实现。 特色或创意:实例上添加了基于欧拉距离,加权欧拉距离,高斯函数的实现。 使用的是著名的鸢尾花数据集。据集内包含 3 类...

    自定义MapReduce的InputFormat

    3. **实现`createRecordReader()`方法**:此方法返回一个实现了`org.apache.hadoop.mapreduce.RecordReader`接口的对象。RecordReader负责从split中读取并解析单个记录,将其转换为键值对的形式。 4. **自定义...

    Hadoop mapreduce 实现InvertedIndexer倒排索引

    Hadoop mapreduce 实现InvertedIndexer倒排索引,能用。

    大数据Mapreduce(1)编程实现文件合并和去重操作.docx

    大数据Mapreduce编程实现文件合并和去重操作 大数据处理技术中的MapReduce编程是处理大量数据的一种常用方法。本实验报告将介绍如何使用MapReduce编程实现文件合并和去重操作,并对输入文件进行排序和数据挖掘。 ...

    基于Java实现的简易MapReduce框架.zip

    《基于Java实现的简易MapReduce框架》 在大数据处理领域,Hadoop是一个不可或缺的重要工具,它为海量数据的存储和处理提供了分布式计算框架。而MapReduce是Hadoop的核心组件之一,用于处理和生成大规模数据集。这个...

    Hadoop mapreduce实现wordcount

    【标题】Hadoop MapReduce 实现 WordCount MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的...

    MapReduce Shuffle 过程图解 Xmind文件

    MapReduce Shuffle 过程图解 Xmind文件

    用MapReduce实现KMeans算法

    《使用MapReduce实现KMeans算法详解》 KMeans算法是一种广泛应用的无监督学习方法,用于数据聚类。在大数据处理的背景下,传统的单机实现往往无法应对海量数据,因此,结合分布式计算框架MapReduce实现KMeans算法就...

    中文地址分词及匹配项目

    这种算法可能包括基于词典的分词、基于统计的分词(如N-gram模型)以及规则驱动的分词等。混合方法旨在克服单一方法的局限,提升分词的准确性和覆盖率。 “Double Levenshtein算法”是Levenshtein距离的一种变体,...

    java实现基于knn算法和MapReduce实现电影网站用户性别预测项目源码+文档说明

    java实现基于knn算法和MapReduce实现电影网站用户性别预测项目源码+文档说明java实现基于knn算法和MapReduce实现电影网站用户性别预测项目源码+文档说明java实现基于knn算法和MapReduce实现电影网站用户性别预测项目...

Global site tag (gtag.js) - Google Analytics