HanLP代码与词典分离方案与流程
之前在spark环境中一直用的是portable版本,词条数量不是很够,且有心想把jieba,swcs词典加进来,
其他像ik,ansi-seg等分词词典由于没有词性并没有加进来. 本次修改主要是采用jar包方包将词典目录
data与hanlp.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格式的文件做成bin或dat格式的文件,然后做成jar包,否则打包运行后无法再写成bin或dat格式文件.
简单的办法是跑一下示例,即可生成相应的bin或dat格式文件.
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的个人空间
相关推荐
在主程序中,你可以找到各种处理模块的实现代码,如词典加载、算法实现等。同时,资源文件夹可能包含各种模型文件,这些模型是通过大量训练数据学习得到的,可以进行快速而准确的文本分析。例如,命名实体识别模型...
而HanLP,全称为“HanLP - 高性能自然语言处理工具包”,是由哈工大知远公司开发的Java库,它在分词、词性标注、命名实体识别等方面表现出色,其词典格式可能与OpenCC不同。 要进行无损转换,我们需要了解两个系统...
接着进行一元切分,通过查找核心词典,将字符与词典进行最大匹配,生成一元词网,并进行原子切分来识别未登录词,即不在词典中的新词或专有名词。 **二元切分**是紧接着的一步,HanLP利用一元切分的结果查询二元...
7. **数据结构与算法**:HanLP的源代码中还涉及到了多种数据结构(如Trie树、图结构等)和算法(如动态规划、贪心算法、深度学习等),是学习和提升算法能力的好材料。 通过对HanLP源代码的深入学习,开发者不仅...
HanLP是由一系列模型与算法组成的工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点;提供词法分析(中文分词、词性标注、命名实体识别)、句法...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计...基于Spring Boot+hanLP、neo4j、spark-mllib电影知识图谱的简易问答系统源码+项目说明.zip
3. **hanlp-solr-plugin-1.0.3-sources.jar**: 这是HanLP与Apache Solr集成的插件源代码。Solr是一个流行的开源搜索平台,通过这个插件,开发者可以在Solr中直接使用HanLP的自然语言处理功能,如在索引构建或查询...
汉语言处理的基础是分词,HanLP采用混合分词策略,结合了基于词典的精确分词和基于统计的模糊匹配,能有效处理歧义和未登录词。词性标注则是对分词结果进行进一步的标注,为后续处理提供更丰富的信息。在命名实体...
培训时候编的电子词典项目,大概一千行代码左右,包括服务器端和客户端,注册登录查询等功能都有,正确测试运行; 注:两个人的代码,各有优劣,可以批判的眼光对照参考; 学习时候的作品,水平有限,C语言初学者...
中文分词源代码,java语言。...代码通过读词典获取数据,进行中文分词。将词典读取的数据利用map去重,然后进行前缀扫面,详情见博客:https://blog.csdn.net/qq_40142391/article/details/82945556#commentsedit
(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码.(安卓APP项目源代码)在线词典源码....
主要包含HanLP中文分词需要的jar包,properties文件,data文件夹,以及一些测试代码。HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构...
Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道词典项目源代码。。Android期末大作业模仿有道...
HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善,性能高效,架构清晰,语料时新,可自定义的特点。 HanLP提供下列功能: 中文...
基于HanLP自然语言处理包的elasticsearch分词器 功能 本分词器使用HanLP提供的维特比分词 屏蔽了本地配置用户词典 增加同义词索引功能 增加远程词典热更新(用户词典,停词典,同义词典) 使用 目前支持的es版本为...
【Qt词典软件源代码】是一个使用Qt框架开发的桌面应用程序,主要功能是提供便捷的词汇查询服务。Qt是一个跨平台的应用程序开发框架,由Qt Company维护,支持Windows、Linux、macOS等操作系统。该软件的源代码揭示了...
该代码是在Linux下编写的在线英英词典服务器端。采用TCP/IP协议,结合了sqlite3编写词典数据库。代码非常简单,易于初学者练习Linux网络编程。
4. 结果处理:处理HanLP返回的结果,将它们转换成可展示或进一步处理的形式,如转化为字符串、存储到数据库或与其他系统交互。 5. 考虑资源占用:由于Android设备的硬件资源相对有限,使用NLP服务时要注意内存和CPU...
为了更好地支持中文处理,Elasticsearch提供了各种分析器,其中,`elasticsearch-analysis-hanlp-7.1.1.zip`就是针对中文分词的一套解决方案,它与Elasticsearch 7.1.1版本紧密集成,为中文搜索提供强大的支持。...