ansj_seg 学习,自定义词典加载

原文地址http://blog.csdn.net/bitcarmanlee/article/details/53607776

最近需要使用分词搜索,在网上查找了许多,看了很多分词工具的对比,感觉这个还是非常不错的,相比较与ik更适合我们使用。

在网上查找了许多配置都不能用,大多数都是因为jar包版本不匹配,在这里我使用了两个jar包

ansj_seg 5.0.4 http://mvnrepository.com/artifact/org.ansj/ansj_seg/5.1.4

nlp-lang 1.7.3 http://mvnrepository.com/artifact/org.nlpcn/nlp-lang/1.7.3    注意这个包必须要最新的!!!!

1.给ansj来个硬广

项目的github地址:https://github.com/NLPchina/ansj_seg

git文档地址(最新)https://github.com/NLPchina/ansj_seg/wiki

项目的文档地址(有点旧):http://nlpchina.github.io/ansj_seg/ 

2.配置maven

在maven项目的pom中配置ansj的dependency:

<!-- https://mvnrepository.com/artifact/org.nlpcn/nlp-lang -->
<dependency>
    <groupId>org.nlpcn</groupId>
    <artifactId>nlp-lang</artifactId>
    <version>1.7.3</version>
</dependency><!-- https://mvnrepository.com/artifact/org.ansj/ansj_seg -->
<dependency>
    <groupId>org.ansj</groupId>
    <artifactId>ansj_seg</artifactId>
    <version>5.1.3</version>
</dependency>

3.使用实例

先不说那么多的理论,直接上可以run起来的代码。毕竟在工作过程中,解决问题是第一位的。只有解决完问题以后,我们才有功夫来慢慢研究其中的门道。 
对于分词来说,最重要的任务无非就是拿到切分以后的结果(词)。直接看代码:

import org.ansj.domain.Result;
import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;

import java.util.*;

public class AnsjTest {

    public static void test() {
        //只关注这些词性的词
        Set<String> expectedNature = new HashSet<String>() {{
            add("n");add("v");add("vd");add("vn");add("vf");
            add("vx");add("vi");add("vl");add("vg");
            add("nt");add("nz");add("nw");add("nl");
            add("ng");add("userDefine");add("wh");
        }};
        String str = "欢迎使用ansj_seg,(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!" ;
        Result result = ToAnalysis.parse(str); //分词结果的一个封装,主要是一个List<Term>的terms
        System.out.println(result.getTerms());

        List<Term> terms = result.getTerms(); //拿到terms
        System.out.println(terms.size());

        for(int i=0; i<terms.size(); i++) {
            String word = terms.get(i).getName(); //拿到词
            String natureStr = terms.get(i).getNatureStr(); //拿到词性
            if(expectedNature.contains(natureStr)) {
                System.out.println(word + ":" + natureStr);
            }
        }
    }

    public static void main(String[] args) {
        test();
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

将代码run起来:

欢迎/v, 使用/v, ansj/en, _, seg/en, ,, (, ansj/en, 中文/nz, 分词/n, ), 在/p, 这里/r, 如果/c, 你/r, 遇到/v, 什么/r, 问题/n, 都/d, 可以/v, 联系/v, 我/r, ./m, 我/r, 一定/d, 尽/v, 我/r, 所/u, 能/v, ./m, 帮助/v, 大家/r, ./m, ansj/en, _, seg/en, 更/d, 快/a, ,, 更/d, 准/a, ,, 更/d, 自由/a, !]
45
欢迎:v
使用:v
中文:nz
分词:n
遇到:v
问题:n
可以:v
联系:v
尽:v
能:v
帮助:v
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

上面的代码就拿到了我们想要的分词结果!

4.自定义词典

自定义词典在anjs_seg中运用起来十分简单,在作者文档中也有写到,我自己总结出来三种常用的,适用于5.1.x版本
项目下建立library文件夹,将自己的自定义词典放入文件夹中,自定义词典的格式要特别注意,上官方文档看作者的格式,他空了几格你也一定要空多少,不能多也不能少,否则加载进去也没用
 
1 配置文件中加载
这种方式是最正规的,在工程目录下建立library.properties文件,运行时会自动查找到配置文件中的内容
dic=library/car.dic

#set real name
isRealName=true

#isNameRecognition default true
isNameRecognition=true

#isNumRecognition default true
isNumRecognition=true

#digital quantifier merge default true
isQuantifierRecognition=true
isSkipUserDefine=true

5.1.x 版本的 配置 自定义词典 命名全部为dic不管你有一个还是两个

2内存中自定义加载
及时加载
Forest forest = Library.makeForest("library/car.dic");
MyStaticValue.putLibrary(DicLibrary.DEFAULT,"library/car.dic",forest);
需要实例化Forest对象 ,使用MyStaticValue的方法会加载进去
还有一个懒加载的方法,用到的时候再加载,同样的方法MyStaticValue.putLibrary(key,path)不传入Forest对象


配置完成后,最终查询时使用DicAnalysis.parse方法查询会优先从用户字典中查询


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ansj_seg是一个开源的中文分词工具包,可以帮助开发者在自然语言处理中进行中文文本的分词处理。下面是ansj_seg jar包的下载方法: 1. 打开ansj_seg的官方网站,可以通过搜索引擎查询“ansj_seg官网”找到相关链接。 2. 在官网上找到“下载”或类似的选项,点击进入下载页面。 3. 在下载页面上,通常会有多个版本的jar包可供选择。根据自己的需求,可以选择相应的版本进行下载。一般会提供Maven仓库链接、直接下载jar包以及源码的下载选项。 4. 选择jar包下载选项,点击下载链接。下载速度取决于网络状况和服务器性能,可能需要一段时间。 5. 下载完成后,将下载的jar包文件保存到本地计算机的合适位置,以便后续使用。 6. 在开发环境中,将该jar包添加到项目的构建路径中。具体添加方法可以根据使用的开发工具进行设置,如eclipse、IntelliJ IDEA等。 7. 完成jar包的添加后,即可在代码中引用并使用ansj_seg提供的分词功能。 需要注意的是,由于ansj_seg是一个开源项目,所以也可以通过GitHub等开源代码托管平台获取源码,并自行编译生成jar包。但对于大多数用户而言,从官网直接下载jar包更为方便。 ### 回答2: ansj_seg是一款基于Java语言开发的中文分词工具,可以将一段中文文本切分成词语的粒度。要下载ansj_seg的jar包,可以按照以下步骤进行: 第一步是打开GitHub网站(https://github.com/NLPchina/ansj_seg)。 第二步是在该网页上找到并点击“Clone or download”按钮。 第三步是选择“Download ZIP”选项。这将下载一个压缩文件(.zip)。 第四步是解压缩文件,得到一个文件夹。 第五步是在该文件夹中找到名为“ansj_seg-5.x.x.jar”的jar包文件。 至此,你已经成功下载了ansj_seg的jar包。你可以将它添加到你的Java项目中,以便于使用该工具进行中文分词。记得在你的项目中引入该jar包,并根据ansj_seg的文档,使用相应的方法来进行分词操作。 ### 回答3: ansj_seg是一个中文分词工具,它可以将一段中文文本切分成一个个可识别的词汇。对于需要进行文本处理或者文本挖掘的任务,分词是一个非常重要的步骤。ansj_seg jar包是将ansj_seg工具打包成jar文件,方便用户下载和使用。 要下载ansj_seg jar包,首先需要在网络上搜索相关资源。可以尝试在搜索引擎中输入“ansj_seg jar包下载”来查找下载链接。通常,搜索结果会有Github等代码托管平台的链接,用户可以在这些平台找到ansj_seg项目,并下载其中的jar包文件。 在下载完jar包后,用户可以将其添加到自己的项目中。具体的添加方法可以根据使用的开发工具而有所不同,一般来说,可以将下载的jar包文件放置在项目的classpath下,然后在项目设置或配置文件中引用该jar包即可。 使用ansj_seg工具进行中文分词时,可以将待分词的文本作为输入,通过调用ansj_seg提供的接口函数,得到分词结果。ansj_seg支持多种分词模式,并且可以根据用户需求进行配置和扩展。分词结果可以用于文本处理、信息检索、自然语言处理等领域的任务。 总之,ansj_seg jar包的下载可以从网络上获取相应的资源文件,下载后将其加入到项目中,即可使用ansj_seg中文分词工具进行相关的文本处理任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值