2009-08-23 3 views
10

Sto cercando di implementare un'applicazione in grado di determinare il significato della frase, dividendola in parti più piccole. Quindi ho bisogno di sapere quali sono le parole oggetto, oggetto ecc. In modo che il mio programma possa sapere come gestire questa frase.Come determinare soggetto, oggetto e altre parole?

risposta

11

Questo è un problema di ricerca aperto. È possibile ottenere una panoramica su Wikipedia, http://en.wikipedia.org/wiki/Natural_language_processing. Prendi in considerazione frasi come "Il tempo vola come una freccia, il frutto vola come una banana" - non è facile classificare in modo univoco le parole.

+0

+1, ho iniziato una risposta con quella stessa identica citazione! :) –

2

Immagino che non ci sia un modo "semplice" per farlo. Devi costruire un analizzatore linguistico (che è del tutto possibile), tuttavia, un linguaggio come un sacco di casi eccezionali. E questo è ciò che rende difficile l'implementazione di un analizzatore linguistico.

9

Si dovrebbe guardare il Natural Language Toolkit, che è esattamente per questo genere di cose.

Vai a questa sezione del manuale: Categorizing and Tagging Words - ecco un estratto:

>>> text = nltk.word_tokenize("And now for something completely different") 
>>> nltk.pos_tag(text) 
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), 
('completely', 'RB'), ('different', 'JJ')] 

"Qui vediamo che e è CC, una congiunzione di coordinamento; ora e completamente sono RB, o avverbi; per è IN, una preposizione; qualcosa di è NN, un sostantivo e diverso è JJ, un aggettivo. "

+6

NLTK è una buona risorsa per questo genere di cose, ma il tag di parte del discorso non fornisce sufficienti informazioni grammaticali per distinguere tra ruoli oggetto/oggetto. Penso che il capitolo 8 del manuale (Analisi della struttura delle frasi) sarebbe più appropriato. – Stompchicken

2

Il problema specifico che si menziona, l'identificazione dell'oggetto e degli oggetti di una clausola, viene eseguito da syntactic parsing. È possibile avere una buona idea di come funziona l'analisi utilizzando this demo del software di analisi sviluppato dalla Stanford University.

Tuttavia, l'analisi sintattica non determina il significato di una frase, ma solo la sua struttura. Determinare il significato (semantica) è un problema molto difficile in generale e non esiste una tecnologia che possa realmente "capire" una frase nello stesso modo in cui lo sarebbe un essere umano. Sebbene non esista una soluzione generale, potresti essere in grado di fare qualcosa in un dominio soggetto molto limitato. Ad esempio, i dati che vuoi analizzare riguardano un argomento ristretto con un insieme limitato di "cose" di cui le persone parlano?

2

StompChicken ha dato la risposta giusta a questa domanda, ma vorrei aggiungere che i concetti di soggetto e oggetto sono noti come relazioni grammaticali, e che lo RASP di Briscoe e Carroll è un parser che può fare il passo aggiuntivo di deducendo un elenco di relazioni dall'analisi.

Ecco alcuni esempi di output dal loro demo page. Si tratta di un estratto del output per una frase che inizia "Noi descriviamo un robusto approccio preciso dominio indipendente ...":

(| ncsubj | | descrivere: 2_VV0 | | Noi: 1_PPIS2 | _)
(| dobj | | Descrive: 2_VV0 | | approach: 7_NN1 |)