Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在OpenNLP中培训标记器?_Java_Nlp_Tokenize_Stringtokenizer_Opennlp - Fatal编程技术网

Java 如何在OpenNLP中培训标记器?

Java 如何在OpenNLP中培训标记器?,java,nlp,tokenize,stringtokenizer,opennlp,Java,Nlp,Tokenize,Stringtokenizer,Opennlp,我目前正在使用OpenNLP中的空白标记器,它在找到空白的地方标记句子。 如果我有一句话,比如: My hobbies are reading books, magazines, Roller skating and playing football. 现在,如果我想从那句话中得到爱好,我想标记这个句子,不是基于空格,而是基于逗号的标记 我怎样才能做到这一点 编辑1: 主要的问题是在训练了一个NER模型之后,我将它应用到代币上。因此,它不会认识到“溜冰”,因为在记号中,它们是“滚轴”和“溜冰”

我目前正在使用OpenNLP中的空白标记器,它在找到空白的地方标记句子。 如果我有一句话,比如:

My hobbies are reading books, magazines, Roller skating and playing football.
现在,如果我想从那句话中得到爱好,我想标记这个句子,不是基于空格,而是基于逗号的标记

我怎样才能做到这一点

编辑1:
主要的问题是在训练了一个NER模型之后,我将它应用到代币上。因此,它不会认识到“溜冰”,因为在记号中,它们是“滚轴”和“溜冰”,而NER模型现在不能识别这个爱好。

< P>我没有一个具体的答案(没有一个我不认为),但是一些问题和要点你可能需要考虑。< /P> 标记器是否需要知道那些是逗号分隔的爱好?如果是这样的话,你会遇到一个更大的问题,那就是标记化。如果没有,您仍然会遇到如何处理逗号分隔部分的端点的问题。顺便说一句,在这种情况下逗号的用法是错误的,因为轮滑之后应该有一个逗号。我觉得您实际上需要构建一个“命名实体识别模型”,而不是一个标记器,但希望我在这里的评论能让您更进一步(可能不会有结果)

比如说,, 如果你用逗号标记你的句子,你会得到以下标记:

My hobbies are reading books
magazines
Roller skating and playing football.
这并没有把轮滑和踢足球分开,而且它也不知道任意一句话中逗号之间是什么

因此,简单的答案是OpenNLP并没有真正实现“基于上下文的标记化”,您必须以自己的方式来实现该逻辑

这里有一些想法

  • 使用句子切块器创建标记。。。这将是基于名词短语,动词短语等,这可能是有用的

  • 使用NER模型提取“嗜好”实体,这可能会很嘈杂,但会给您一些概率标记

  • 使用regex查找所需内容,并仅基于regex命中创建令牌

作为一个例子,下面是一个句子组块者得出的结论

NP: My hobbies
VP: are reading
NP: books
NP: magazines
NP: Roller skating and playing football
你可以假设动词短语(VP)是动作方面,名词短语(NP)是“东西”…我不确定为什么chunker不把玩看作动词,但NLP就是这样做的…你可以在NPs中寻找“和”,然后在这方面进行分割,但我保证你会找到一段文字,让它很糟糕

记住,在火车时刻使用的任何标记化方法都必须在分类时刻使用

希望这会有帮助,但我感觉不会有多大帮助

UPDATE IN RESPONSE TO THE OP EDIT
NER(NameFinder)将在单个令牌数组中查找多个令牌实体;所以别担心。从nameFinder.find()方法返回的Span对象是句子标记的开头和结尾。有多个部件名称是很常见的。现在,如果您认为NER模型没有返回多部分名称,那就不同了,您可能需要对更多数据进行培训,不要将其归咎于标记化