2012-03-01 13 views
8

Qual è il modo più efficiente per ottenere il passato di un verbo, preferibilmente senza utilizzare i framework di memoria pesante NLP?Come si ottiene il passato di un verbo?

ad es.

  • dal vivo per: vivevano
  • prova a: provato
  • rubinetto per: sfruttato
  • ebollizione per: bollito
  • vendita a: venduto

ho scritto qualcosa di veloce me stesso (l'overflow dello stack non mi consente di rispondere autonomamente), che sembra funzionare per i verbi regolari (ad esempio i primi 4 di questa lista), ma non per i verbi irregolari: http://pastebin.com/Txh76Dnb

modifica: Grazie per tutte le risposte, sembra che non possa essere eseguito correttamente senza un dizionario a causa di verbi irregolari.

+5

* ".. senza utilizzare strutture di memoria pesante NLP?" * Utilizzare l'API VooDoo? Molto leggero nella memoria, anche se potrebbe costarti qualche gallina e altri piccoli animali. –

+1

Avrai bisogno di un dizionario. –

+0

@OliCharlesworth, conosci qualche parola che non sarebbe stata analizzata correttamente da questo algoritmo: http://web2.uvcs.uvic.ca/elc/studyzone/330/grammar/pasted.htm che richiederebbe un dizionario? –

risposta

10

Mentre volevo fare questo algoritmicamente senza usare i dizionari, ho dovuto ricorrere all'utilizzo di uno.

Ho trovato che la libreria più efficiente era SimpleNLG.

Poiché i loro documenti sono sincronizzati con l'API corrente, qui è come raggiungere questo obiettivo:

XMLLexicon lexicon = new XMLLexicon("path\\to\\default-lexicon.xml"); 
WordElement word = lexicon.getWord("live", LexicalCategory.VERB); 
InflectedWordElement infl = new InflectedWordElement(word); 
infl.setFeature(Feature.TENSE, Tense.PAST); 
Realiser realiser = new Realiser(lexicon); 
String past = realiser.realise(infl).getRealisation(); 
System.out.println(past); 
+0

come posso fare il contrario di questo? Ad esempio, mi piacerebbe trovare "play" dalla parola chiave "played". – talha06

+0

Non ho più la libreria SimpleNLG su questo PC, quindi non l'ho ancora testata, ma credo che dovrebbe essere semplice come cambiare la 4a linea in modo che Tense.PAST sia Tense.FUTURE e cambiando la seconda linea in modo che "live" è "giocato". –

+0

no non è .. ho provato quello che hai detto; ma non ha funzionato. dà l'output di "riprodotto" per l'input "riprodotto". – talha06

1

Utilizzare un servizio Web del dizionario.

DictService è piuttosto popolare.

Ricava risultati da http://www.dict.org. che fornisce vari database. Ce n'è una che ho trovato utile "The Collaborative International Dictionary of English v.0.48" che restituisce definizioni di parole e anche i tempi.

Dovrai analizzare il risultato in qualche modo per trovare il tempo passato.

+0

Grazie per il collegamento, ma preferirei una soluzione offline per portabilità e prestazioni. –

3

Un modo per andare potrebbe essere quello di creare un dizionario di soli verbi irregolari (quelli che non seguono il solito schema), e quindi cercare prima la parola in questo. Se la parola non appare, usa il tuo algoritmo. Qualcuno conosce il numero relativo di verbi irregolari vs regolari in inglese?

+2

http: //en.wikipedia.org/wiki/List_of_English_irregular_verbs Non sembra molto, finché non ti rendi conto che, come dimostra la tabella, molti verbi possono essere aggravati e la varietà di verbi che puoi creare in questo modo è praticamente illimitata. Una menzione speciale va a "appendere" e "mentire" che può avere tempi passati sia regolari che irregolari, a seconda della loro semantica. – biziclop

Problemi correlati