将元数据添加到 Stanford coreNLP 输入中

Adding metadata into Stanford coreNLP input

我有大量的句子语料库(约 1.1M)要通过 Stanford Core NLP 进行解析,但在输出中我得到的句子比输入中的句子多,可能是系统将给定分割之外的一些句子分割成行。

为了控制发生的事情,我想在输入中包含“标签”。这些标签在输出中应该是可识别的并且不应该影响解析。

类似

<0001>
I saw a man with a telescope .
</0001>

#0001#
I saw a man with a telescope .
#/0001#

我试过很多格式,在所有情况下,“标签”都被解析为文本的一部分。

有什么方法可以告诉解析器“不要解析这个,只在输出中保持原样”?

===几个小时后===

由于我没有得到答案,这里有一个例子:我想处理句子“Manon espérait secrètement y revoir un garçon qui l'avait marquée autrefois”。携带标签 151_0_4。我想把标签写在单独一行的两行等号之间,后面跟一个句点,以确保标签在最坏的情况下会作为一个单独的句子处理:

=====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.boundaryTokenRegexssplit.boundaryMultiTokenRegex 属性指示它们不应成为其他句子的一部分。但是,您的选择是要么删除它们(参见 ssplit.tokenPatternsToDiscard),要么将它们处理为奇怪的句子,然后您需要清理这些句子。