Stanford POS Tagger:如何在输出中保留换行符?

时间:2012-08-27 10:57:35

标签: java text nlp stanford-nlp pos-tagger

我的input.txt文件包含以下示例文本:

你必须让我们 来看我。

现在,如果我使用默认命令调用Stanford POS标记:

java -classpath stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/wsj-0-18-bidirectional-distsim.tagger -textFile input.txt > output.txt

我在output.txt文件中得到以下内容:

you_PRP have_VBP to_TO let_VB 's_POS come_VB and_CC see_VB me_PRP ._.

上述输出的问题是我丢失了输入文件中使用的原始换行符分隔符。

现在,如果我使用以下命令在输出文件中保留换行符分隔符,我必须将-tokenize选项设置为false:

java -classpath stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/wsj-0-18-bidirectional-distsim.tagger -sentenceDelimiter newline -tokenize false -textFile input.txt > output.txt 

这段代码的问题在于它完全弄乱了输出:

you_PRP have_VBP to_TO let's_NNS  
come_VB and_CC see_VB me._NN

在这里,让我和我。标记不当。

我的问题是如何在不弄乱标记化的情况下保留输出文件中的换行符分隔符?

2 个答案:

答案 0 :(得分:1)

答案应该是使用命令:

java -classpath stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/wsj-0-18-bidirectional-distsim.tagger -sentenceDelimiter newline -textFile input.txt > output.txt 

但是有一个错误,它在版本3.1.3(可能还有所有早期版本)中都不起作用(忽略了换行符)。它适用于版本3.1.4 +。

与此同时,如果文本量很小,您可以尝试使用Stanford Parser(其中相应的标志名称不同,因此它是-sentences newline)。

答案 1 :(得分:0)

您可以做的一件事是使用xml输入而不是纯文本。在这种情况下,您的输入将是:

<xml version="1.0" encoding="UTF-8">
<text>
    <line>you have to let's</line>
    <line>come and see me.</line>
</text>

此处每行都包含在标记中。您现在可以发出以下命令:

java -classpath stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model models/wsj-0-18-bidirectional-distsim.tagger -xmlInput line -textFile sample.xml > ouput.xml

请注意,参数'-xmlInput'指定用于POS标记的标记。在我们的示例中,此标记为。运行上述命令时,输出将为:

<?xml version="1.0" encoding="UTF-8"?>
<text>
    <line>
        you_PRP have_VBP to_TO let_VB &apos;s_POS 
    </line>
    <line>
        come_VB and_CC see_VB me_PRP ._. 
    </line>
</text>

因此,您可以通过阅读标记中包含的内容来分隔您的行。