`

HanLP代码与词典分离方案与流程

阅读更多

HanLP代码与词典分离方案与流程

之前在spark环境中一直用的是portable版本,词条数量不是很够,且有心想把jieba,swcs词典加进来,

其他像ik,ansi-seg等分词词典由于没有词性并没有加进来. 本次修改主要是采用jar包方包将词典目录

datahanlp.properties合成一个data.jar文件.

1. pom.xml 过滤资源文件的配置

      <plugin>

        <groupId>org.apache.maven.plugins</groupId>

        <artifactId>maven-jar-plugin</artifactId>

        <version>${maven-jar-plugin.version}</version>

        <configuration>

            <excludes>

                <exclude>**/*.properties</exclude>

            </excludes>

        </configuration>

       </plugin>

这里把properties文件从jar包文件中去掉,因而结果文件是没有properties文件的.

可根据需要来确定是否把properties加入jar包中.由于我打算把hanlp.properties与词典目录写在一起

这里是要过滤掉hanlp.properties文件

 

2. 修改hanlp.properties文件

root=

#将根目录置为空,或者注释掉root

CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; scws.txt; jieba.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf;

#增加更多的配置文件,这里增加了结巴分词,scws分词

#IOAdapter=com.hankcs.hanlp.corpus.io.FileIOAdapter

IOAdapter=com.hankcs.hanlp.corpus.io.JarIOAdapter

#修改IOAdapter,以便使用jar包形式加载词典

 

 

3. 修改HanLP.java

if ( root.length() != 0 && !root.endsWith("/")) root += "/";

root的长度为0时,不用在root字符串后面添加'/'

 

4. 增加处理词典jar包的代码文件: JarIOAdapter.java

 

package com.hankcs.hanlp.corpus.io;

 

import java.io.*;

 

/**

 * 基于普通文件系统的IO适配器

 *

 * @author hankcs

 */

public class JarIOAdapter implements IIOAdapter

{

    @Override

    public InputStream open(String path) throws FileNotFoundException

    {

        /*

        采用第一行的方式加载资料会在分布式环境报错

        改用第二行的方式

         */

        //return ClassLoader.getSystemClassLoader().getResourceAsStream(path);

        return JarIOAdapter.class.getClassLoader().getResourceAsStream(path);

    }

 

    @Override

    public OutputStream create(String path) throws FileNotFoundException

    {

        return new FileOutputStream(path);

    }

}

 

在跑DemoStopWord,发现

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoStopWord

报错,原因是接口不统一导致. 修改

DMAG.java如下:

   public MDAG(File dataFile) throws IOException

    {

        BufferedReader dataFileBufferedReader = new BufferedReader(new InputStreamReader(IOAdapter == null ?

                                                                                                 new FileInputStream(dataFile) :

                //IOAdapter.open(dataFile.getAbsolutePath())

                IOAdapter.open(dataFile.getPath())

                , "UTF-8"));

即可.

 

 

5. 如何将词典与配置文件打成一个jar

最好是把txt格式的文件做成bindat格式的文件,然后做成jar包,否则打包运行后无法再写成bindat格式文件.

简单的办法是跑一下示例,即可生成相应的bindat格式文件.

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoAtFirstSight

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoChineseNameRecognition

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoJapaneseNameRecognition

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoPinyin

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoPlaceRecognition

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoOrganizationRecognition

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoTokenizerConfig #命名实体识别,包括上面的人名,地名等

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoTraditionalChinese2SimplifiedChinese

java -cp .:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoStopWord

或者用以下shell脚本完成

 :>a;while read cl; do echo $cl; echo "=========="$cl"=======" >>a;java -cp .:test.jar:hanlp-1.3.2.jar $cl 1>> a 2>&1;done < <(jar tvf test.jar | awk '$(NF)~"Demo"{print $(NF)}' | sed 's/.class$//;s/\//./g')

 

我们把data目录与hanlp.properties文件放在一个目录,比如xxx目录

cd xxx

jar cvf data.jar .

即可生成data.jar

 

6. 如何运行

[dxp@Flyme-SearchTag-32-220 makeNewDict]$ ls

data.jar  hanlp-1.3.2.jar  README.md  test  test.jar

[dxp@Flyme-SearchTag-32-220 makeNewDict]$ java -cp data.jar:hanlp-1.3.2.jar:test.jar com.hankcs.demo.DemoAtFirstSight

 

7. spark中应用

IDE如(intellij idea)中maven项目

引入以下依赖:

        <dependency>

            <groupId>com.hankcs</groupId>

            <artifactId>hanlp</artifactId>

            <version>1.3.2</version>

            <scope>system</scope>

            <systemPath>${LocalPath}/hanlp-1.3.2.jar</systemPath>

        </dependency>

 

spark-submit提交任务时增加

--jar hanlp-1.3.2.jar,data.jar

转载自cicido的个人空间

分享到:
评论

相关推荐

    Python-无损转换OpenCC词典为HanLP格式

    无损转换OpenCC词典为HanLP格式

    HanLp数据字典(1.7.1)

    汉语言处理包中的data.zip数据,github上下载速度有点慢,这里提供下载。其他相关资源可从官网上下载jar包及配置文件。

    HanLP实现文本分词、提取关键词、聚类(工具资源+实例)

    HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法...

    电子词典(双份代码)

    培训时候编的电子词典项目,大概一千行代码左右,包括服务器端和客户端,注册登录查询等功能都有,正确测试运行; 注:两个人的代码,各有优劣,可以批判的眼光对照参考; 学习时候的作品,水平有限,C语言初学者...

    中文分词代码及词典(同博客代码)

    中文分词源代码,java语言。...代码通过读词典获取数据,进行中文分词。将词典读取的数据利用map去重,然后进行前缀扫面,详情见博客:https://blog.csdn.net/qq_40142391/article/details/82945556#commentsedit

    (安卓APP项目源代码)在线词典源码.zip

    (安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码....

    HanLP中文分词所需内容_2.zip

    主要包含HanLP中文分词需要的jar包,properties文件,data文件夹,以及一些测试代码。HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...

    Java中通过HanLP实现文本分词、提取关键词、聚类(工具资源+实例)

    HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法...

    Android期末大作业模仿有道词典项目源代码.zip

    Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道...

    HanLP:汉语语言处理-源码

    HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善,性能高效,架构清晰,语料时新,可自定义的特点。 HanLP提供下列功能: 中文...

    C#编程词典代码

    C#编程词典代码

    在线英英词典服务器代码(Linux平台)

    该代码是在Linux下编写的在线英英词典服务器端。采用TCP/IP协议,结合了sqlite3编写词典数据库。代码非常简单,易于初学者练习Linux网络编程。

    在线英英词典的完整代码,与博客配套

    在线英英词典的完整代码,包括加载数据库,服务器和客户端

    linux在线词典项目代码

    词典项目是以网络上的词典为原型,创建的在线词典缩减版,可以让用户进行服务器数据库储存字典信息,当客机作为用户可以连接服务器进行登录并查询自己想要查询的单词,...词典还分管理员与用户登录,两者有不同的权限。

    Android代码-英汉词典

    Eng-Chi-Dictionary Englist to Chinese dictionary Android app. This project is released under GNU GPL v2 You could find the review about this app here!

    C语言电子词典代码C语言电子词典代码.docx

    C语言电子词典代码C语言电子词典代码

    安卓英语词典APP源代码

    自己用android stdio写的安卓英语词典,把源码上传到这里供大家学习交流!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!...

    IOS源代码, 开源词典 DictionaryPlusPlus-master

    ios源代码 开源词典 DictionaryPlusPlus object-c

    vb.net小词典及代码

    小词典,适应课程vb.net,课程设计总结。

Global site tag (gtag.js) - Google Analytics