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)
但是输出只是没有添加信息的单词列表。我开始认为Wrapper称之为Chunking的东西与实际的tagger所谓的Chunking不同,但也许我只是缺少一些东西?任何帮助将不胜感激。
答案 0 :(得分:2)
原始海报在他的假设中是正确的。 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
复制一些额外的逻辑。
答案 1 :(得分:1)
使用完整的代码示例会更容易,请提供一个用于进一步的问题,但我试一试。 TreeTaggerWrapper Documentation有一个很好的例子:
>>> import pprint # For proper print of sequences.
>>> import treetaggerwrapper
>>> #1) build a TreeTagger wrapper:
>>> tagger = treetaggerwrapper.TreeTagger(TAGLANG='en')
>>> #2) tag your text.
>>> tags = tagger.tag_text("This is a very short text to tag.")
>>> #3) use the tags list... (list of string output from TreeTagger).
>>> pprint.pprint(tags)
['This\tDT\tthis',
'is\tVBZ\tbe',
'a\tDT\ta',
'very\tRB\tvery',
'short\tJJ\tshort',
'text\tNN\ttext',
'to\tTO\tto',
'tag\tVV\ttag',
'.\tSENT\t.']
>>> # Note: in output strings, fields are separated with tab chars (\t).
请注意,这是Python 3的示例,因为文本前面没有 u 来将其声明为Unicode。这是因为Python 3将Unicode视为默认值,而Python 2.7需要在您的帖子中声明它。 这提出了您正在使用哪个Python版本的问题。
<强>分块强>
Chunking是多标记序列的标记,例如 黄狗:
所有三个单词在一起是一个块,将被标记为NP(名词短语)。
答案 2 :(得分:0)
我认为在treetaggerwrapper中他使用二进制文件来执行标记任务,因为我在treetaggerwrapper.py中找到了这个:
# ----- Set binary by platform.
if ON_WINDOWS:
self.tagbin = os.path.join(self.tagbindir, "tree-tagger.exe")
elif ON_MACOSX or ON_POSIX:
self.tagbin = os.path.join(self.tagbindir, "tree-tagger")
然后答案是显而易见的,treetagger库本身并没有为chunker提供二进制文件导致treetaggerwrapper和另一个库&#34; treetagger-python&#34;没有块功能。