gpt4 book ai didi

java - Opennlp 1.5 用于 SentenceDetector?

转载 作者:行者123 更新时间:2023-12-02 04:27:15 25 4
gpt4 key购买 nike

现在我有以下代码:

SentenceModel sd_model = null;
try {
sd_model = new SentenceModel(new FileInputStream(
"opennlp/models/english/sentdetect/en-sent.bin"));
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SentenceDetectorME mSD = new SentenceDetectorME(sd_model);
String param = "This is a good senttence.I'm very happy. Who can tell me the truth.And go to school.";
String[] sents = mSD.sentDetect(param);
for(String sent : sents){
System.out.println(sent);
}

但是我得到了以下结果:

This is a good senttence.I'm very happy.
Who can tell me the truth.And go to school.

当然,这不是我们想要的。我该如何解决这个问题?谢谢。

最佳答案

我认为 OpenNLP 提供的句子检测模型不太适合您的任务,因为它已经过在句子结尾标点后面跟随空格的数据进行训练,因为这在英语拼写中是相当标准的。英语句子检测器通常旨在区分句子结尾的标点符号和缩写、引号等中句子中间使用的标点符号。在所有情况下,普通的句子检测器都会期望句子之间存在某种空白.

如果您想使用 OpenNLP,我认为最简单的解决方案是预处理数据以添加一个空格,在其中检测 [a-z][.?!][A-Z] 等模式。 (这种模式显然是不够的,但只是为了提供一个想法。)没有多少缩写具有 Nnnn.Nnnn 或 Nnnn?Nnnn 等格式,所以我打赌您可以在不使用比正则表达式更奇特的东西的情况下获得良好的结果,但这取决于您的数据是什么样的。或者,您可以使用某种带有自定义模型的标记生成器来查找这些案例。

您也可以训练自己的句子检测模型,该模型不需要句子之间有空格,但对于 OpenNLP 来说这似乎会很棘手。他们提供的训练程序期望训练数据每行一个句子,因此无法避免在句子之间插入空格。

关于java - Opennlp 1.5 用于 SentenceDetector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com