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!
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
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 –
@ChthonicProject - Grazie - non avevo visto quel post, e mi aiuta a indicarmi la giusta direzione – kyrenia