Come posso estrarre parole da una frase e determinare quale parte del discorso è ciascuna? [chiuso]


19

Voglio scrivere qualcosa che prende una frase e identifica ogni parola che contiene e definisce quale parte del discorso è ogni parola.

Per esempio

Ciao mondo, sono una frase

ritornerebbe questo

verb noun, pronoun verb adjective noun

Idealmente, mi piacerebbe fare un ulteriore passo avanti e prendere una frase e programmaticamente fargli capire cosa sta cercando di interpretare e forse fare qualcosa al riguardo.

Quindi la mia domanda è: qualcuno ha sentito parlare di qualcosa del genere?


2
"Ciao" è un verbo? Voglio dire, non so cos'altro sarebbe, ma non sembra un verbo.
Dan Ray

@DanRay: forse è una domanda per english.stackexchange.com?
StriplingWarrior,

1
@DanRay haha, vedi? Ecco perché sto cercando di capire se qualcosa può fare questo, perché apparentemente sono terribile in grammatica.
Vinny,

@Vinny - Certo che è possibile. Il problema è ... questa è la prossima idea da trilioni di dollari, e al momento non è ancora stata trasformata in un prodotto.
Ramhound,

1
@Vinny Sì, qualcuno ha sentito parlare di qualcosa del genere.
Tulains Córdova,

Risposte:


18

Questo si chiama Natural Language Processing ed è un campo enorme e complesso. Qualcosa come quello che descrivi è un risultato monumentale e persino le migliori soluzioni, come Watson , non sono per nulla perfette.

Cose come questa lo rendono impegnativo: "Buffalo bufalo Buffalo bufalo bufalo bufalo Bufalo bufalo"

una frase grammaticalmente corretta in inglese americano, usata come esempio di come omonimi e omofoni possano essere usati per creare costrutti linguistici complicati. È stato discusso in letteratura dal 1972 ... È stato anche descritto nel libro The Language Instinct del 1994 di Steven Pinker come esempio di una frase "apparentemente senza senso" ma grammaticale ...

Il significato della frase diventa più chiaro quando si comprende che usa la città di Buffalo, New York e il verbo un po 'insolito "bufalo" (che significa "bullo o intimidazione"), e quando la punteggiatura e la grammatica sono espanse in modo che la frase recita come segue: "Bufalo di bufalo che bufalo di bufalo, bufalo Bufalo di bufalo." Il significato diventa ancora più chiaro quando si usano i sinonimi: "Bisonte di bufalo che altri prepotenti di bisonti di Buffalo, essi stessi prepotenti di bisonte di bisonte".


1
Questo è quello che sto cercando! Qualcuno ha sentito parlare di qualcuno che lo sta adattando su una scala più piccola? Open-source? Esempi di questo utilizzo in scale più piccole?
Vinny,

@Vinny AFAIK non è molto disponibile in open source poiché risolvere questi problemi è altamente redditizio per le aziende, come il rilevamento della grammatica di MS Word. Ci sono alcuni programmi di chatter-bot disponibili, credo.
Ryathal,

1
@Vinny La difficoltà non ha nulla a che fare con la scala. L'elaborazione del linguaggio naturale ha una complessità intrinseca che non si riduce quando si riduce la "scala".
Tulains Córdova,

6

Sebbene dividere una frase e determinare la correttezza grammaticale insieme a risolvere il tuo primo problema sia più facile del tuo secondo problema, molte complessità come nomi di verbi o gerundi come il nuoto, la programmazione, ecc. E altre complessità simili, è ancora una sfida - Vedi Morons ' risposta.

Ma il secondo problema - le persone hanno messo in enormi sforzi per trovare una soluzione perfetta, ma davvero un perfetto algoritmo di "interpretazione" non è realizzabile praticamente per qualsiasi linguaggio naturale come l'inglese - ci sono variazioni che saranno avvitare il vostro algoritmo. Questo campo - un ibrido tra AI, Informatica e Linguistica è noto come PNL . Considera questo: anche Google Translate non è perfetto quando "interpreti" le frasi.

Tuttavia, questo è un campo molto interessante con cui dilettarsi.


@StriplingWarrior Volevo solo contrastare sufficientemente tra i due problemi posti dall'OP. Notato. Modifica in arrivo
Yati Sagade,

4

Penso che dovresti iniziare a leggere questo articolo di Wikipedia:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(è un campo di ricerca, non aspettarti una soluzione facile per questo.)


2
L'IT dovrebbe aggiungere che mentre la PNL è enorme, difficile e probabilmente intrattabile sui computer di oggi, la codifica POS è la parte più semplice di essa, e con dimensioni corpus sufficienti o molta dedizione e scrittura manuale delle regole può essere risolta quasi perfettamente, sicuramente superiore al 99% di correttezza. Potrebbe essere sufficiente per le tue esigenze.
Kilian Foth

grazie, questo è esattamente quello che stavo anche cercando.
Amc_rtty,

in realtà basato sulla descrizione di OP, questa dovrebbe essere la risposta accettata mentre osservi correttamente @KilianFoth
Amc_rtty

-1

Un modo economico per farlo sarebbe quello di creare un database del dizionario (sono quasi certo che qualcuno l'abbia fatto).

Sono necessari due campi nella tabella: word eusage

Trasforma la frase in una matrice di stringhe (ogni parola è una stringa) e indipendentemente:

select 'usage' from Dictionary WHERE 'word' = $word; 

È una soluzione pesante, ma che ho usato in passato.


5
Questo presuppone che ogni parola abbia un solo POS, e ti assicuro che non è affatto così.
microtherion,

D'accordo - non è possibile che ciò funzioni in modo fattibile (almeno in inglese) con tutte le parole che possono fungere da nomi, verbi, ecc., A seconda del contesto.
Derek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.