Domanda

Sto usando NLTK per estrarre nomi da una stringa di testo a partire dal seguente comando:

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

Funziona bene in inglese. Esiste un modo semplice per farlo funzionare anche per il tedesco?

(Non ho esperienza con la programmazione in linguaggio naturale, ma sono riuscito a usare la libreria python nltk che è eccezionale finora.)

È stato utile?

Soluzione

Il software in linguaggio naturale fa la sua magia sfruttando i corpora e le statistiche che forniscono. Dovrai informare nltk di alcuni corpus tedeschi per aiutarlo a tokenizzare correttamente il tedesco. Credo che il corpus EUROPARL potrebbe aiutarti ad andare avanti.

Vedi nltk.corpus.europarl_raw e questa risposta per esempio la configurazione.

Inoltre, considera di taggare questa domanda con " nlp " ;.

Altri suggerimenti

La Libreria di pattern include una funzione per l'analisi delle frasi tedesche e il il risultato include i tag di parte del discorso. Quanto segue viene copiato dalla loro documentazione:

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 preferisci il set di tag SSTS puoi impostare il parametro opzionale tagset = " STTS " .

L'etichettatura parziale (POS) è molto specifica per un particolare linguaggio [naturale]. NLTK include molti tagger diversi, che utilizzano tecniche distinte per inferire il tag di un determinato token in un determinato token. La maggior parte (ma non tutti) di questi tagger usa una sorta di modello statistico come dispositivo principale o unico per "fare il trucco". Tali tagger richiedono alcuni "dati di allenamento" su cui costruire questa rappresentazione statistica della lingua e i dati di addestramento arrivano sotto forma di corpora.

NTLK "distribuzione" esso stesso include molti di questi corpora, nonché un insieme di "lettori di corpora". che forniscono un'API per leggere diversi tipi di corpora. Non conosco lo stato delle cose in NTLK, e se questo include un corpus tedesco. Puoi comunque individuare gratuitamente alcuni corpora che dovrai quindi convertire in un formato che soddisfi il corretto lettore di corpora NTLK, e quindi puoi usarlo per addestrare un tagger POS per la lingua tedesca.

Puoi persino creare il tuo corpus, ma è un lavoro davvero scrupoloso; se lavori in un universo, devi trovare il modo di corrompere e costringere gli studenti a farlo per te ;-)

Forse puoi usare il tagger POS di Stanford. Di seguito è una ricetta che ho scritto. Ci sono ricette Python per la PNL tedesca che ho compilato e puoi accedervi su 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

Ho scritto un post sul blog su come convertire il TIGER Corpus annotato in tedesco per usarlo con la NLTK. Dai un'occhiata qui.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top