【问题标题】:Adding metadata into Stanford coreNLP input将元数据添加到斯坦福 coreNLP 输入
【发布时间】:2021-05-05 08:33:40
【问题描述】:

我有大量的句子语料库 (~ 1.1M) 可以通过斯坦福核心 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 的标签 &lt;x151_0_4&gt; 或使用哈希字符的标签也会发生同样的情况...

【问题讨论】:

    标签: stanford-nlp


    【解决方案1】:

    如果您当前的数据严格来说是每行一个句子,那么到目前为止最简单的做法就是保持原样并提供-ssplit.eolonly=true 选项。

    不幸的是,没有一个选项可以在不尝试解析或处理它们的情况下通过某些类型的元数据或分隔符。但是,您可以通过ssplit.boundaryTokenRegexssplit.boundaryMultiTokenRegex 属性指示它们不应成为其他句子的一部分。但是,您的选择是要么删除它们(参见ssplit.tokenPatternsToDiscard),要么将它们处理为奇怪的句子,然后你需要清理它们。

    【讨论】:

    • 它没有用。我输入了一个包含 15,065 行文本(都以句点、感叹号或问号结尾)的文件,在输出中我得到了 15,100 个已解析的句子。我使用了-ssplit.eolonly=true 选项。
    • 事实上它与-ssplit.newlineIsSentenceBreak always一起工作
    • 很好,有一个解决方案!但是eolonly=true 也应该可以工作。如果你想给我发电子邮件,或者放在 GitHub 上,一个生成的句子多于文本行的摘录,我们可以尝试修复它....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多