2015-05-03 6 views
6

Dopo diversi altri post, [ad es. Detect English verb tenses using NLTK, Identifying verb tenses in python, Python NLTK figure out tense] ho scritto il seguente codice per determinare tesa di una frase in Python utilizzando POS tag:Determinazione del tempo di una frase Python

from nltk import word_tokenize, pos_tag 

def determine_tense_input(sentance): 
    text = word_tokenize(sentance) 
    tagged = pos_tag(text) 

    tense = {} 
    tense["future"] = len([word for word in tagged if word[1] == "MD"]) 
    tense["present"] = len([word for word in tagged if word[1] in ["VBP", "VBZ","VBG"]]) 
    tense["past"] = len([word for word in tagged if word[1] in ["VBD", "VBN"]]) 
    return(tense) 

Questo restituisce un valore per l'uso del passato/verbi presente/futuro, che io di solito poi prendo il valore massimo di come il tempo della sentanza. L'accuratezza è moderatamente decente, ma mi chiedo se c'è un modo migliore per farlo.

Ad esempio, c'è ora per caso un pacchetto scritto che è più dedicato ad estrarre il tempo di una sentanza? [nota: 2 dei 3 post di overflow dello stack hanno 4 anni, quindi le cose potrebbero essere cambiate]. O in alternativa, dovrei usare un parser diverso all'interno di nltk per aumentare l'accuratezza? In caso contrario, spero che il codice sopra possa aiutare qualcun altro!

+0

Forse puoi provare a trovare un tagger più a grana fine. O addestrando il proprio basato su un corpus taggato, o usando qualcosa da Stanford, per esempio. Trovo che, per alcuni scopi (come questo) il tagging di nltk.pos_tag (o dei corpora disponibili in nltk_data) non ti aiuti molto. L'utilizzo di un tagger con classi più distinte mi ha aiutato prima in uno scenario simile. Tutto ciò dipende dalla disponibilità di corpora annotati di solito abbastanza specifici del dominio. – Igor

+1

Per un approccio più accurato, è necessario distinguere tra tempo primario e tempo secondario. La mia risposta a una domanda simile potrebbe aiutare: http://stackoverflow.com/a/22146151/1011791 –

+0

@ChthonicProject - Grazie - non avevo visto quel post, e mi aiuta a indicarmi la giusta direzione – kyrenia

risposta

0

Puoi rafforzare il tuo approccio in vari modi. Potresti pensare di più alla grammatica dell'inglese e aggiungere alcune regole in base a ciò che osservi; oppure potresti spingere l'approccio statistico, estrarre alcune caratteristiche (rilevanti) e gettare l'intero lotto su un classificatore. NLTK ti offre un sacco di classificatori con cui giocare, e sono ben documentati nel libro NLTK.

Puoi avere il meglio di entrambi i mondi: le regole scritte a mano possono essere sotto forma di funzioni che vengono fornite al classificatore, che deciderà quando può fare affidamento su di esse.

1

È possibile utilizzare Stanford Parser per ottenere un'analisi delle dipendenze della frase. La radice dell'analisi delle dipendenze sarà il verbo 'primario' che definisce la frase (non sono troppo sicuro di quale sia il termine linguistico specifico). È quindi possibile utilizzare il tag POS su questo verbo per trovare il suo tempo e utilizzarlo.