天天看点

Stanford POS tagger FAQ

原网页http://nlp.stanford.edu/software/pos-tagger-faq.shtml

1.Stanford Tagger使用的标签集是什么?

2.如何使用API?

3.为什么我运行会发生异常

Exception in thread "main" java.lang.NoClassDefFoundError:edu/stanford/nlp/tagger/maxent/MaxentTagger?

4.How can I lemmatize (reduce to a base, dictionary form) words that have been tagged with the POS tagger?

5.How do I tag pre-tokenized and/or one-sentence per line text?

6.如何实现POS标记器的单个jar文件部署?

7.我可以将标记器作为server运行吗?

8.为什么我一般用完内存?

9.有什么不同的输出格式?

10.你的标记慢吗?

11.如何训练标记器?

12.我应该使用什么模型?

13.“english”和“wsj”有什么区别?

14.标记器使用的distsim cluster是什么?

15.How do I tag one pre-tokenized sentence per line?

16.How do I tag un-tokenized text as one sentence per line?

17.为什么当我尝试优化与search = owlqn时程序崩溃? owlqn在任何地方可用吗?

18.如何将结果输出到文件?

19.如何修复Stanford POS Tagger运行时的NoSuchMethodError或NoSuchFieldError,不能找到后缀为tagger.dict,tagger.tags或tagger.ex的文件?

1.Stanford Tagger使用的标签集是什么?

您可以使用任何标记集训练Stanford POS Tagger的模型。 对于我们发布的模型,标签集取决于语言,模型建立于underlying treebanks 。 也就是说,标签集完全或主要由treebank producers决定,而不是我们。 这里是相关链接:

英语: the Penn Treebank site

. 有一份其文档的在线副本; 特别是,参见TAGGUID1.PDF(POS标记指南)。 还有其他更简单的列表,如AMALGAM项目页面。

中文:the Penn Chinese Treebank

请阅读每个语料库的文档,了解他们的标签集。 您通常也可以通过Web搜索来查找其他文档资源。

2.如何使用API?

x下载包中包含了一个简短的示例程序,它将演示如何加载工具并开始处理文本。 当使用此演示程序时,请确保在类路径中包括所有恰当的jar文件。

3.为什么我运行会发生异常

Exception in thread "main" java.lang.NoClassDefFoundError:edu/stanford/nlp/tagger/maxent/MaxentTagger?

这意味着您的Java CLASSPATH未正确设置,因此找不到标记(在stanford-tagger.jar中)。 请参见README.txt文件中的示例,了解如何使用-cp或-classpath选项设置类路径。 有关Java类路径的一般讨论,请参阅http://en.wikipedia.org/wiki/Classpath_(Java)。

4.How can I lemmatize (reduce to a base, dictionary form) words that have been tagged with the POS tagger?

我怎么能lemmatize(减少到一个基数,字典形式)已经用POS标记器标记的单词?

对于英语(仅仅英语),您可以使用包含的Morphology类。 你可以使用标志-outputFormatOptions lemmatize来做到这一点。 例如:

$ java -cp "*" edu.stanford.nlp.tagger.maxent.MaxentTagger -model edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger -textFile samsawme.txt -outputFormat inlineXML -outputFormatOptions lemmatize 
<?xml version="1.0" encoding="UTF-8"?> 
<pos> 
<sentence id="0"> 
<word wid="0" pos="NNP" lemma="Sam">Sam</word> 
<word wid="1" pos="VBD" lemma="see">saw</word> 
<word wid="2" pos="PRP" lemma="I">me</word> 
<word wid="3" pos="." lemma=".">.</word> 
</sentence> 
</pos>
           

5.How do I tag pre-tokenized and/or one-sentence per line text?

你可以对已经分词的,每行一个已经预标记文本进行标记,使用标签:

你可以对已经分词的文本进行标记

你可以对文本中每行一个句子进行标记:

6.如何实现POS标记器的单个jar文件部署?

您可以将一个或多个标记器模型放入到jar文件中,并从中提供用于加载模型的选项。 这里有详细的说明:

1)在下载的tagger解压后的主目录中启动

2)对jar文件制作一个副本,我们将在jar文件中放入一个tagger模型

3)将模型放在包含jar文件的路径的上

mkdir -p edu/stanford/nlp/models/pos-tagger/english-left3words 
cp models/english-left3words-distsim.tagger edu/stanford/nlp/models/pos-tagger/english-left3words
           

4)将一个或多个模型放入到jar文件 - 我们通常在edu / stanford / nlp / models /下执行

jar -uf stanford-postagger-withModel.jar edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger
           

5)现在可以通过直接从类路径加载jar文件来指定加载此模型

java -mx300m -cp stanford-postagger-withModel.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -model edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger -textFile sample-input.txt
           

6)或者,在代码中,您可以类似像这样加载tagger,如下所示:

MaxentTagger tagger = new MaxentTagger("edu/stanford/nlp/models/pos-tagger/english-left3words/english-left3words-distsim.tagger");
           

7.我可以将标记器作为server运行吗?

是! (这是在2.0版本中添加的。)我们提供MaxentTaggerServer作为基于socket服务使用POS tagger的简单示例。 通过一些工作,我们确信您可以将此示例适用于REST,SOAP,AJAX或任何系统。 如果没有,付给我们一些钱,我们会为你解决此问题。

如果你这样做,你可能也对单一jar部署感兴趣。 在我们的例子中,我们对于以前的问题作出了一些回答(但这两个特性是独立的)。 所示的命令适用于Unix / Linux / Mac OS X系统。 对于Windows,您反转斜杠等。您通过指定模型和端口在某台主机上启动服务器:

同样的类包含一个演示客户端,您将需要适应自己的需求。 你可以这样调用它:

$ java -cp stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTaggerServer -client -host nlp.stanford.edu -port  
Input some text and press RETURN to POS tag it, or just RETURN to finish.
I hope this'll show the server working.
I_PRP hope_VBP this_DT 'll_MD show_VB the_DT server_NN working_VBG ._.
           

如果你在同一台机器上运行服务器和客户端,那么你可以忽略-host参数。 您可以根据需要为服务器调用MaxentTaggerServer提供其他MaxentTagger选项,如-outputFormat tsv。

8.为什么我一般用完内存?

如果运行tagger而不改变向Java提供的内存量,则可能会耗尽内存。 当程序以OutOfMemoryError结束时,这将是明显的。

从命令行运行,您需要提供一个标志,如-mx1g。 数字1g只是一个例子; 如果你没有那么多的内存可用,则使用较少内存,以便您的计算机不开始分页。 为了运行tagger,-mx500m应该是足够的; 为了训练复杂的标签,你可能需要更多的内存。

从Eclipse中运行时,请按照这些说明增加从Eclipse内部运行的程序的内存。 增加给Eclipse本身的内存量不会有帮助。

还要注意,方法tagger.tokenizeText(reader)将对读取器中的所有文本进行tokenize(分词),并将所有文本放在内存中。 这对于合理大小的文件是正确的。 然而,如果你有巨大的文件,这可以消耗很大的内存量。 您将需要采用备用策略,您一次只能对部分文本进行标记(例如,一次可能是一个段落)。

18.如何将结果输出到文件?

使用shell 重定向符 > filename

ps:有部分还没有翻译,以后需要用到的时候再翻译吧。

继续阅读