我的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
在这里,让我和我。标记不当。
我的问题是如何在不弄乱标记化的情况下保留输出文件中的换行符分隔符?
答案 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 's_POS
</line>
<line>
come_VB and_CC see_VB me_PRP ._.
</line>
</text>
因此,您可以通过阅读行标记中包含的内容来分隔您的行。