POS-теги на немецком языке - PullRequest
23 голосов
/ 28 октября 2009

Я использую NLTK для извлечения существительных из текстовой строки, начиная со следующей команды:

tagged_text = nltk.pos_tag(nltk.Text(nltk.word_tokenize(some_string)))

Отлично работает на английском. Есть ли простой способ заставить его работать и на немецком?

(У меня нет опыта в программировании на естественном языке, но мне удалось использовать библиотеку python nltk, которая пока великолепна.)

Ответы [ 5 ]

21 голосов
/ 28 октября 2009

Программное обеспечение на естественном языке делает свое волшебство, используя корпорацию и статистику, которую они предоставляют. Вам нужно будет рассказать nltk о каком-то немецком корпусе, чтобы помочь ему правильно маркировать немецкий. Я верю, что EUROPARL корпус может помочь вам в этом.

См. nltk.corpus.europarl_raw и этот ответ для примера конфигурации.

Кроме того, попробуйте пометить этот вопрос с помощью «nlp».

11 голосов
/ 07 марта 2013

Библиотека Pattern включает функцию синтаксического анализа предложений на немецком языке, а результат включает теги части речи. Следующее скопировано из их документации:

from pattern.de import parse, split
s = parse('Die Katze liegt auf der Matte.')
s = split(s)
print s.sentences[0]

>>>   Sentence('Die/DT/B-NP/O Katze/NN/I-NP/O liegt/VB/B-VP/O'
     'auf/IN/B-PP/B-PNP der/DT/B-NP/I-PNP Matte/NN/I-NP/I-PNP ././O/O')

Если вы предпочитаете набор тегов SSTS, вы можете установить необязательный параметр tagset="STTS".

4 голосов
/ 28 декабря 2013

Возможно, вы можете использовать Stanford POS tagger. Ниже приведен рецепт, который я написал. Я скомпилировал рецепты Python для немецкого НЛП, и вы можете получить к ним доступ на http://htmlpreview.github.io/?https://github.com/alvations/DLTK/blob/master/docs/index.html

#-*- coding: utf8 -*-

import os, glob, codecs

def installStanfordTag():
    if not os.path.exists('stanford-postagger-full-2013-06-20'):
        os.system('wget http://nlp.stanford.edu/software/stanford-postagger-full-2013-06-20.zip')
        os.system('unzip stanford-postagger-full-2013-06-20.zip')
    return

def tag(infile):
    cmd = "./stanford-postagger.sh "+models[m]+" "+infile
    tagout = os.popen(cmd).readlines()
    return [i.strip() for i in tagout]

def taglinebyline(sents):
    tagged = []
    for ss in sents:
        os.popen("echo '''"+ss+"''' > stanfordtemp.txt")
        tagged.append(tag('stanfordtemp.txt')[0])
    return tagged

installStanfordTag()
stagdir = './stanford-postagger-full-2013-06-20/'
models = {'fast':'models/german-fast.tagger',
          'dewac':'models/german-dewac.tagger',
          'hgc':'models/german-hgc.tagger'}
os.chdir(stagdir)
print os.getcwd()


m = 'fast' # It's best to use the fast german tagger if your data is small.

sentences = ['Ich bin schwanger .','Ich bin wieder schwanger .','Ich verstehe nur Bahnhof .']

tagged_sents = taglinebyline(sentences) # Call the stanford tagger

for sent in tagged_sents:
    print sent
4 голосов
/ 29 октября 2009

Пометка части речи (POS) очень специфична для определенного [естественного] языка. NLTK включает в себя множество различных тегеров, которые используют различные методы для вывода тега данного токена в данном токене. Большинство (но не все) из этих тегеров используют статистическую модель в качестве основного или единственного устройства, чтобы «сделать свое дело». Такие тегеры требуют некоторых «обучающих данных», на которых строится это статистическое представление языка, и обучающие данные поступают в форме корпусов.

Сам дистрибутив NTLK включает в себя многие из этих корпусов, а также набор «читателей корпусов», которые предоставляют API для чтения различных типов корпусов. Я не знаю, как обстоят дела в самой НТЛК, и включает ли это какой-либо немецкий корпус. Однако вы можете бесплатно найти несколько бесплатных корпусов, которые затем вам нужно будет конвертировать в формат, который удовлетворяет требованиям соответствующего читателя NTLK, и затем вы можете использовать это для обучения POS-тегера для немецкого языка.

Вы даже можете создать свой собственный корпус, но это адская кропотливая работа; если вы работаете в университете, вы должны найти способы подкупа или иного принуждения студентов сделать это за вас ;-)

2 голосов
/ 21 января 2011

Я написал сообщение в блоге о том, как преобразовать аннотированный корпус TIGER в Германии, чтобы использовать его с NLTK. Посмотрите на это здесь.

...