ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenNLP中关于语言检测的语料训练

2020-01-07 15:56:19  阅读:379  来源: 互联网

标签:训练 TrainingParameters 检测 OpenNLP params new 语料


因为项目的原因,需要使用到NLP的相关技术。当时是先使用过nltk,但是因为nltk主要是外国的语种支持的比较丰富,而且又是python要与项目集成也不太方便,后来找到OpenNLP,发现它相对来说,对于亚洲的语言有一些支持。因此使用上了,最近有空,就想细致的学习下OpenNLP的训练相关的东西,因为在项目里遇到了中文与日文中的汉字交叉的情况,且如果检测对象过短,对于检测结果也容易出现偏差的情况。好了,废话不多说,直接主题。
我们先从文档入手,在官网上的文档是很规范的,先找到Language Detector这个title,然后往下看到training,我们根据文档提示,发现其实我们的语料按照如下规范就可以了:
OpenNLP中关于语言检测的语料训练

注意几点
1.文本文件中的一行就是一条语料,第一列是语种对应的ISO-639-3码,第二列是tab缩进,第三列就是语料文本
2.对于长文本,不要人为的去加换行
3.训练语料必须要有多个不同的语料信息,否则在训练时会报错

有了以上的语料文件,就可以通过几行简单的代码就能将其训练成我们需要的语言检测了

InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File("corpus.txt"));

ObjectStream<String> lineStream =  new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);
ObjectStream<LanguageSample> sampleStream = new LanguageDetectorSampleStream(lineStream);

TrainingParameters params = ModelUtil.createDefaultTrainingParameters();
params.put(TrainingParameters.ALGORITHM_PARAM,  PerceptronTrainer.PERCEPTRON_VALUE);
params.put(TrainingParameters.CUTOFF_PARAM, 0);

LanguageDetectorFactory factory = new LanguageDetectorFactory();

LanguageDetectorModel model = LanguageDetectorME.train(sampleStream, params, factory);
model.serialize(new File("langdetect.bin"));
}

最后运行一下,就能在你的本地生成一个langdetect.bin的语料文件了,以后就在程序里用上就好了。

标签:训练,TrainingParameters,检测,OpenNLP,params,new,语料
来源: https://blog.51cto.com/biyusheng/2464894

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有