[NLP]OpenNLP语句检测器的使用
目录
Sentence Detector
模型训练
语句检测
Sentence Detector
语句检测器,OpenNLP语句检测器可以检测标点字符是否标记了句子的结尾。在这个意义上,句子被定义为两个标点符号之间最长的空白字符序列。第一句和最后一句是对这条规则的例外。第一个非空白字符被假定为句子的开头,最后一个非空白字符被假定为句子的结尾。
通常句子检测是在文本被分词之前完成的,但是也可以先执行分词,让句子检测器处理已经分词的文本。OpenNLP语句检测器无法根据句子内容识别句子边界。如文章中的标题被误认为是第一句话的第一部分。OpenNLP中的大多数组件都期望输入被分割成句子。
Sentence Detector的输入是一段文字,输出为每个句子一行。
模型训练
import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.nio.charset.StandardCharsets;import opennlp.tools.sentdetect.SentenceDetectorFactory;import opennlp.tools.sentdetect.SentenceDetectorME;import opennlp.tools.sentdetect.SentenceModel;import opennlp.tools.sentdetect.SentenceSample;import opennlp.tools.sentdetect.SentenceSampleStream;import opennlp.tools.util.InputStreamFactory;import opennlp.tools.util.MarkableFileInputStreamFactory;import opennlp.tools.util.ObjectStream;import opennlp.tools.util.PlainTextByLineStream;import opennlp.tools.util.TrainingParameters;public class SentenceDetectorTrain {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString rootDir = System.getProperty("user.dir") + File.separator;String fileResourcesDir = rootDir + "resources" + File.separator;String modelResourcesDir = rootDir + "opennlpmodel" + File.separator;//训练数据的路径String filePath = fileResourcesDir + "sentenceDetector.txt";//训练后模型的保存路径String modelPath = modelResourcesDir + "da-sent-my.bin";InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File(filePath));ObjectStream<String> lineStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);//按行读取数据ObjectStream<SentenceSample> sampleStream = new SentenceSampleStream(lineStream);SentenceDetectorFactory sentenceFactory=new SentenceDetectorFactory();SentenceModel model = SentenceDetectorME.train("en", sampleStream, sentenceFactory, TrainingParameters.defaultParams());OutputStream modelOut = new BufferedOutputStream(new FileOutputStream(modelPath));model.serialize(modelOut);} }
语句检测
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import opennlp.tools.sentdetect.SentenceDetectorME;import opennlp.tools.sentdetect.SentenceModel;public class SentenceDetectorPredit {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString rootDir = System.getProperty("user.dir") + File.separator;String modelResourcesDir = rootDir + "opennlpmodel" + File.separator;String modelPath = modelResourcesDir + "da-sent.bin";InputStream modelIn = new FileInputStream(modelPath) ;//加载模型SentenceModel model = new SentenceModel(modelIn);//实例化模型SentenceDetectorME sentenceDetector = new SentenceDetectorME(model);//语句检测String sentences[] = sentenceDetector.sentDetect("First sentence. Second sentence. ");for(String str:sentences){System.out.println(str);}}}
[NLP]OpenNLP语句检测器的使用相关推荐
- [NLP]OpenNLP语言检测器的使用
目录 Language Detector 模型训练 语言类型预测 Language Detector 语言检测器,属于分类范畴.即OpenNLP语言检测器根据模型的能力用ISO-639-3(国际语种代 ...
- [NLP]OpenNLP块检测器(Chunker)的使用
Chunker 分块是将文章的内容分成句法相关的词组,如名词组.动词组,但不指定它们的内部结构,也不说明它们在主句中的作用. 训练数据的输入格式如下: Rockwell NNP B-NP Intern ...
- [NLP]OpenNLP词形还原器(Lemmatizer)的使用
Lemmatizer 词形还原,把用POS tagger标注格式的词还原为标注前的格式.如 输入: Rockwell_NNP International_NNP Corp._NNP 's_POS Tu ...
- [NLP]OpenNLP命名实体识别(NameFinder)的使用
目录 Name Finder 模型训练 命名识别 Name Finder 命名查找器可以检测文本中的命名实体和数字.为了能够检测到实体,命名查找器需要一个模型.模型依赖于它被训练的语言和实体类型.Op ...
- [NLP]OpenNLP标记器的使用
目录 Tokenizer 模型训练 句子分词 Tokenizer OpenNLP标记器将输入字符序列分段为标记.标记通常是单词.标点符号.数字等.标记化是一个两阶段的过程:首先,确定句子边界,然后识别 ...
- [NLP]OpenNLP Maven工程的依赖
目录 OpenNLP Tools依赖 OpenNLP UIMA Annotators 依赖 OpenNLP Morfologik AddOn依赖 OpenNLP Brat Annotator依赖 Op ...
- Apache OpenNLP
Apache OpenNLP库是一种基于机器学习的工具包,用于处理自然语言文本. 它支持最常见的NLP任务,如标记化,句子分割,词性标记,命名实体提取,分块,解析和参考解析. 通常需要这些任务来构建更 ...
- 小米自然语言处理工程师招聘条件与自己的对应整理
昨天就发布了,看的人挺多,自己看了一下发现直接放整理有点莫名其妙,先把招聘条件整体图片放上来吧,会持续更新. 计算机或数学相关专业,硕士及以上学历 熟悉自然语言处理领域基础理论和常用方 ...
- Python 利用数据分布直方图来确定合适的阈值
背景 在数据分析中总会碰见 阈(yu)值 这个问题,有人可能就是拍脑袋,根据自己的经验随便确定一个值,而且效果还不错.但既然是在分析数据,那就要确定一个合适的值来作为阈值,这样比较有说服力,更 mak ...
最新文章
- 自动写作、RNN基本原理以及LSTM的基本原理
- 《从问题到程序:用Python学编程和计算》——第2章 计算和编程初步 2.1 数值表达式和算术...
- 2021.4.7 美团买菜后端开发实习生(二面)(含总结)(已oc)
- 【Android 插件化】Hook 插件化框架 ( 通过反射获取 “宿主“ 应用中的 Element[] dexElements )
- 【MORE协议】基于MORE的改进协议设计的MATLAB仿真
- CTF Re-Python z3库的使用
- 计算机二级vb考试查分,全国计算机二级考试VB程序设计复习试题
- C++使用位操作将数字乘以7的算法实现(附完整源码)
- 携程基于Quasar协程的NIO实践
- python3.6字典有序_为什么Python3.6字典变得有序了?
- Vagrant 构建 LNMP 一致环境
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 E. Half-consecutive Numbers
- 10. 大型网站核心架构要素
- 37. customer payment(1)
- R语言使用mean函数计算dataframe指定数据列的均值
- linux格式化硬盘fat32,linux格式化硬盘教程 linux格式化硬盘教程是什么
- 设计模式之里氏宗青出于蓝而胜于蓝
- springboot冷链物流信息调度系统毕业设计源码210951
- 写毕业论文更新目录时,如何让格式不会变?
- 搜狗拼音输入法2015 v7.2f 官方版