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/