Treetagger可以进行POS标记以及文本分块,这意味着提取语言和名词从句,如下面的德语示例所示:

$ echo 'Das ist ein Test.' | cmd/tagger-chunker-german
    reading parameters ...
    tagging ...
     finished.
<NC>
Das PDS die
</NC>
<VC>
ist VAFIN   sein
</VC>
<NC>
ein ART eine
Test    NN  Test
</NC>
.   $.  .


我试图弄清楚如何用Python中的Treetaggerwrapper做到这一点(因为它比直接调用Treetagger更快),但我不知道它是如何完成的。该文档将分块称为预处理,因此我尝试使用以下方法:

tags = tagger.tag_text(u"Dieser Satz ist ein Satz.",prepronly=True)


但是输出只是单词列表,没有添加任何信息。我开始认为包装器称为“分块”的东西与实际标记器称为“分块”的东西有所不同,但是也许我只是缺少了什么?任何帮助,将不胜感激。

最佳答案

原始海报正确无误。 treetaggerwrapper(从版本2.2.4开始)将分块仅定义为“文本的预处理”,并且在这种意义上没有完全包装TreeTagger的功能。来自treetaggerwrapper.py


  
  在基本的TreeTagger安装中,代替外部Perl脚本来管理文本的预处理(分块),因此避免每次必须标记一段文本时都启动Perl。
  


但是检查tagger-chunker-german可以看到获取子句和标签是一串操作,实际上调用TreeTagger 3次:

$ echo 'Das ist ein Test.' | cmd/tree-tagger-german | perl -nae 'if ($#F==0){print} else {print "$F[0]-$F[1]\n"}' | bin/tree-tagger lib/german-chunker.par -token -sgml -eps 0.00000001 -hyphen-heuristics -quiet | cmd/filter-chunker-output-german.perl | bin/tree-tagger -quiet -token -lemma -sgml lib/german-utf8.par

treetaggerwrapper的标记命令(显示在tagcmdlist中)实际上是一次调用(在对文本进行自己的预处理之后):

bin/tree-tagger -token -lemma -sgml -quiet -no-unknown lib/german-utf8.par



将其扩展以进行分块的入口点是直线

"tagparfile": "german-utf8.par",

您将在其中定义类似

"chunkingparfile": "german-chunker.par",

并在tagger-chunker-german操作链之后使用此另一个parfile发出对TreeTagger的附加调用。然后,您可能仍需要从cmd/filter-chunker-output-german.perl复制一些额外的逻辑。

关于python - 使用Python-Treetaggerwrapper进行分块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36991037/

10-13 03:27