2016-05-02 4 views
2

Treetagger может сделать POS-тегов, а также текст-CHUNKING, что означает извлечение вербальные и номинальные положения, так как в этом немецком примере:Чанкинг с Python-Treetaggerwrapper

$ 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> 
. $. . 

Я пытаюсь выяснить, как это сделать с Treetaggerwrapper в Python (так как это быстрее, чем прямое вызов Treetagger), но я не могу понять, как это делается. Документация относится к комков, как предварительная обработка, поэтому я попытался использовать это:

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

Но выход это просто список слов без добавления информации. Я начинаю думать, что то, что Wrapper называет Chunking, отличается от того, что теггер вызывает Chunking, но, может быть, я просто что-то упустил? Любая помощь будет оценена по достоинству.

ответ

2

Оригинальный плакат прямо в его предположениях. treetaggerwrapper (начиная с версии 2.2.4) определяет chunking как просто «предварительную обработку текста» и не полностью переносит возможности TreeTagger в этом смысле. От treetaggerwrapper.py:

  • Управление предварительной обработки текста (разделения на порции) вместо внешних скриптов Perl, как в установке базовой TreeTagger, таким образом, избежать запуска 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",

и выдать дополнительный вызов к TreeTagger с этим другим parfile, следующим за tagger-chunker-german op . Тогда вам, вероятно, еще придется копировать дополнительную логику от cmd/filter-chunker-output-german.perl.

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 вы используете.

Чанкинг

фрагментация мечения мульти-маркеров последовательностей, например Желтая собака:

  • Слово ->POS-Tag
  • The -> DT (статья)
  • желтый -> JJ (прилагательное)
  • собака -> NN (существительное)

Все три слова вместе являются фрагментом и будут помечены как NP (именная фраза).

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, а также другая библиотека «treetagger-python» не имеют функции chunk.