2013-06-04 4 views
5

Quindi, mi chiedevo se qualcuno avesse idea di come combinare più termini per creare un singolo termine nei tagger in NLTK..Come aggiungere parole composte al tagger in NLTK?

Per esempio, quando lo faccio:

nltk.pos_tag(nltk.word_tokenize('Apple Incorporated is the largest company')) 

Mi dà:

[('Apple', 'NNP'), ('Incorporated', 'NNP'), ('is', 'VBZ'), ('the', 'DT'), ('largest', 'JJS'), ('company', 'NN')] 

Come faccio a farlo mettere 'Apple' e 'incorporata' Insieme per essere ('Apple Incorporated','NNP')

+1

avresti bisogno di un chunker/parser e quindi concatenare i pezzi/frase con '_', quindi appiattire nuovamente la struttura in tuple. – alvas

risposta

0

Potresti provare a dare un'occhiata a nltk.RegexParser. Ti consente di bloccare parte del contenuto con tag vocali in base alle espressioni regolari. Nel tuo esempio, si potrebbe fare qualcosa di simile

pattern = "NP:{<NN|NNP|NNS|NNPS>+}" 
c = nltk.RegexpParser(p) 
t = c.parse(nltk.pos_tag(nltk.word_tokenize("Apple Incorporated is the largest company"))) 
print t 

Questo darebbe:

Tree('S', [Tree('NP', [('Apple', 'NNP'), ('Incorporated', 'NNP')]), ('is', 'VBZ'), ('the', 'DT'), ('largest', 'JJS'), Tree('NP', [('company', 'NN')])]) 
0

Il codice sta facendo esattamente quello che deve fare. Aggiunge tag di Part of Speech ai token. 'Apple Incorporated' non è un singolo token. Si tratta di due token separati, e come tale non può avere un singolo tag POS applicato. Questo è il comportamento corretto.

Mi chiedo se si sta tentando di utilizzare lo strumento sbagliato per il lavoro. Cosa stai cercando di fare/Perché stai provando a farlo? Forse sei interessato a identificare le collocazioni piuttosto che i tag POS? Potresti dare un'occhiata qui: collocations module

+0

Sto provando a fare un programma che prende ogni tipo di parola ed esegue una funzione su di essi sul testo. Ad esempio, se il tag è "Corp", eseguire una determinata funzione. Stavo pensando che potrei sostituire i tag e in qualche modo farlo manualmente, considerando che non sono sicuro di come farlo con nltk, ma non so come farei neanche io! Fondamentalmente, riconosce che tipo di parola è e svolge una funzione su di esso. Qualsiasi aiuto? – user2403500

+0

Capisco che questa è la procedura normale, ma mi chiedevo se sapessi come posso sostituire ('Apple,' NNP '), (' Corporation ',' NNP ') con (' Apple Corporation ',' Corp ') se "Apple Corporation" nelle aziende. – user2403500