Pergunta

Eu estou usando NLTK para extrair substantivos de um texto-string começando com o seguinte comando:

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

Ele funciona muito bem em Inglês. Existe uma maneira fácil de fazê-lo funcionar Alemão também?

(Eu não tenho nenhuma experiência com programação em linguagem natural, mas eu consegui usar a biblioteca python nltk que é muito bem até agora.)

Foi útil?

Solução

software de linguagem natural faz a sua magia por alavancar corpora e as estatísticas que eles fornecem. Você precisa dizer a nltk sobre alguns corpus alemão para ajuda-lo tokenizar alemão corretamente. Eu acredito que a europarl corpus podem ajudar você ir.

nltk.corpus.europarl_raw esta resposta por exemplo configuração.

Além disso, considere marcar esta pergunta com "PNL".

Outras dicas

O biblioteca padrão inclui uma função para analisar frases alemãs ea resultado inclui as tags partes-do-discurso. O seguinte é copiado de sua documentação:

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')

Se você preferir a tag SSTS definir você pode definir o tagset="STTS" parâmetro opcional.

Parte-Speech (POS) marcação é muito específico para um determinado idioma [natural]. NLTK inclui muitos pichadores diferentes, que utilizam técnicas distintas para inferir a marca de um determinado sinal de um sinal dado. A maioria (mas não todos) desses pichadores usar um modelo estatístico de tipos como o dispositivo principal ou única para "fazer o truque". Tais pichadores exigem alguns "dados de treinamento" sobre a qual construir essa representação estatística da linguagem, e os dados de treinamento vem sob a forma de corpora.

A "distribuição" NTLK si inclui muitos destes corpora, bem como um conjunto de "leitores corpora" que fornecem uma API para ler diferentes tipos de corpora. Eu não sei o estado de coisas em NTLK adequada, e se isso inclui qualquer corpus alemão. No entanto, pode localizar libertar algum corpora livre que você precisa então convertido para um formato que satisfaz o leitor NTLK corpora adequada, e então você pode usar isso para treinar um tagger POS para o idioma alemão.

Você pode até criar seu próprio corpus, mas isso é um inferno de um trabalho árduo; Se você trabalha em um univeristy, você tem que encontrar formas de suborno e de outra forma coagir os estudantes a fazer isso para você ;-)

Possivelmente você pode usar o tagger Stanford POS. Abaixo está uma receita que eu escrevi. Há receitas python para alemão PNL que eu compilei e você pode acessá-los em 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

Eu escrevi um blog post sobre como converter o alemão anotado TIGER Corpus, a fim de usá-lo com o NLTK. Tenha um olhar para ele aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top