我有一个庞大的句子语料库(约1.1M(要通过Stanford Core NLP进行解析,但在输出中我得到的句子比输入中更多,系统可能会将给定分段之外的一些句子分段成行。
为了控制所发生的事情,我希望包括";标签";输入。这些标记在输出中应该是可识别的,并且不应该影响解析。
类似的东西
<0001>
I saw a man with a telescope .
</0001>
或
#0001#
I saw a man with a telescope .
#/0001#
我已经尝试了许多格式,在所有情况下;标签";已将其解析为文本的一部分。
是否有某种方法可以告诉解析器";不要解析它,只需在输出中保持原样即可;?
===几个小时后===
由于我没有得到答案,这里有一个例子:我想处理带有151_0_4
标签的句子"Manon espérait secrètement y revoir un garçon qui l’avait marquée autrefois"。我想象着在一行上的两行等号之间写一个标签,后面跟着一个句点,以确保标签在最坏的情况下会被处理为一个单独的句子:
=====151_0_4======.
Manon espérait secrètement y revoir un garçon qui l'avait marquée autrefois.
=====151_0_4======.
这产生了什么:
(ROOT (SENT (NP (SYM =)) (NP (SYM =) (PP (SYM =) (NP (SYM =) (PP (SYM =) (NP (NUM 151_0_4) (SYM =) (SYM =) (NP (SYM =) (PP (SYM =) (NP (SYM =) (SYM =))))))))) (PUNCT .)))
正如你所看到的,标签肯定被认为是句子的一部分,没有办法将它们与句子分开
类似XML的标记<x151_0_4>
或使用哈希字符的标记也发生了同样的情况。。。
如果您的当前数据严格地是每行一句话,那么到目前为止,最简单的方法就是保持原样,并提供选项-ssplit.eolonly=true
。
不幸的是,在不尝试解析或处理某些类型的元数据或分隔符的情况下,无法选择传递它们。但是,您可以通过ssplit.boundaryTokenRegex
或ssplit.boundaryMultiTokenRegex
属性指示它们不应成为其他句子的一部分。然而,你的选择是要么删除它们(见ssplit.tokenPatternsToDiscard
(,要么将它们处理为奇怪的句子,然后你需要清理它们。