|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Applicativo per analisi testo libero
Ciao a tutti,
per motivi didattici devo realizzare un programma che prende in input un testo (piuttosto breve, sui 200 caratteri circa) e da questo testo estragga 4 elementi (Nome, Aggettivi, Città, Indirizzo). Il testo però che prende in input è libero, cioè non ha un ordine preciso e quindi devo realizzare qualcosa che analizzi il testo. Mi riferisco al campo del text mining... Gli aggettivi sono riferiti al nome, ad esempio il nome è in genere di una persona e l'aggettivo può essere la professione di questa persona o qualsiasi tipo di caratteristica fisica (alto, basso ecc ecc). Inoltre gli aggettivi possono non esserci nel testo. Stesso discorso per l'indirizzo che può essere omesso nel testo. Aggiungo che ho 4 raccolte (database) sui Nomi, Aggettivi, Città e Indirizzi...ma per ora non vorrei preoccuparmi di come collegare l'applicativo ai database ma soprattutto vorrei capire che algoritmo del text mining utilizzare e successivamente come implementarlo. Qualcuno saprebbe darmi qualche consiglio? Grazie
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
butta giù qualche esempio di input, così ragioni su qualcosa di concreto.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Ad esempio:
Vorrei trovare Samantha alta vicino piazza Navona a Roma E' un esempio come un altro e da questo testo vorrei che un applicativo estraesse ciò: Nome: Samantha aggettivi: alta Città: Roma indirizzo: piazza Navona
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ma la frase deve essere corretta?
Per dire, i nomi propri e i nomi di città devono essere obbligatoriamente inseriti con la iniziale maiuscola? Gli indirizzi devono essere preceduti da parole chiave quali:via, viale, piazza ecc ecc? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Sei sicuro che il l'input non sia più semplicemnte una cosa del genere:
"Giovanni Rossi abita a Roma in via Trastevere n°100" Magari con le posizioni scambiate ma comunque di questo tipo... No perchè altrimenti se hai una frase del genere: "Lunedì mi trovo con Jessica la tettona al pub in via Garibaldi, e martedì vado ad un rave party in piazza Tal dei Tali insieme a Pamela la sfacciata." Qui cosa dovresti tirar fuori? Ultima modifica di MEMon : 15-09-2009 alle 12:36. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Hai fatto bene a chiedere queste cose!
Sicuramente il testo può essere scritto con o senza maiuscole, o meglio, non ci deve essere differenza tra lettera maiuscola o minuscola. L'esempio che hai fatto (giovanni rossi abita...) è quello a cui mi riferisco. Anche perchè il testo di input sarà piuttosto breve! L'ordine non conta. E' anche corretto supporre che l'indirizzo sia preceduto da parole chiave come via, piazza ecc
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
- dato il testo in input, trasformare ogni parola in "lower case".
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Quote:
...per il resto però non so ancora come fare. Sto leggendo qualcosa sul text mining e ho letto del cosiddetto "tagging" che consiste nel "taggare" (stile facebook ES: Giovanni Rossi abita a Roma in via Trastevere n°100 <nome>Giovanni Rossi</nome> abita a <citta>Roma</citta> in <indirizzo>via Trastevere</indirizzo> n° 100. PS: del numero civico non mi interessa
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Il secondo passo è quello di mettere la mani su ogni singola parola (token), per poi poterla analizzare.
Forse prima è il caso di stabilire quali sono i tipi di token di interesse (es.: NOME, AGGETTIVO) e quindi fissare le regole che caratterizzano quel tipo di token. Sto "pensando ad alta voce"; non sono un esperto in materia, ma sto solo ragionando. Non so se il tuo caso è risolvibile con l'applicazione di un automa a stati finiti per il parsing del testo in input e l'estrazione e catalogazione dei singoli token, magari è il caso. Resterebbe solo da stabilire quali sono le regole che identificano un NOME da un qualsiasi altro token, e in particolare che determinano se un determinato token di tipo NOME è un NOME_PERSONA o NOME_CITTA', per dire. Quote:
Oppure devono esistere lo stesso le regole e la base dati viene usata per raccogliere tutti i token già identificati (e quindi a sua volta è usata per anche per l'identificazione di un nuovo token?) Si vede che sono ignorante in materia?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
banryu79...innanzitutto grazie per la risposta
Seconda cosa: non mi sembri affatto un ignorante in materia. Io ho iniziato ad addentrarmi in questo campo da poche settimane quindi vista la complessità dell'argomento, non ne so ancora molto... La questione degli automi a stati finiti la stavo leggendo giusto oggi, in particolare il discorso dell' Hidden Markov Model. Per il discorso delle basi di dati credo proprio che dovrò realizzare l'identificazione del token prima di collegarmi al rispettivo db. Come potrei realizzare le regole per ogni singolo token?
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#11 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Cioè non ne so nulla, quello he ho scritto è frutto di mie congetture Quote:
Supponiamo di aver stabilito questi due passi iniziali: [1] dato il testo in input, produrre in output il testo equivalente in cui ogni parola è trasformata in "lower case"; [2] dato il testo prodotto al punto [1] come input, produrre in output la pila formata da tutte le singole parole (token) incontrate nel testo: questo significa il non considerare i segni di punteggiatura e gli spazi bianchi (sto implicitamente assumendo il fatto che spazi e punteggiatura non ci servono per verificare le regole di individuazione e catalogazione dei token, cosa che potrebbe essere falsa, ma come ho detto sono ignorante in materia). Ora facciamo un'ulteriore supposizione: che i tipi di token che ci interessano siano solo questi due: NOME - un qualsiasi sostantivo (tavolo, Luca, Parma, prosciutto, patata, ecc..) AGGETTIVO - un qualsiasi aggettivo riferito a un sostantivo (marrone[riferito a tavolo], babbeo[riferito a Luca], popolata[riferito a Parma], squisito[riferito a prosciutto], americana[riferito a patata]) Come si fa nel seguente testo di input: Codice:
"La patata americana è sul nuovo tavolo di Luca." -- token_type: NOME, token_value: "patata"; token_type: AGGETTIVO, token_value: "americana", token_refTo: "patata"; -- token_type: NOME, token_value: "tavolo"; token_type: AGGETTIVO, token_value: "nuovo", token_refTo: "tavolo"; -- token_type: NOME, token_value: "Luca"; Io suppongo di partire da una pila che, per il testo di input qui sopra, dopo l'applicazione del punto [2], sarebbe così formata: [Luca] <- top [di] [tavolo] [nuovo] [sul] [è] [americana] [patata] [La] A questo punto la pila verebbe passata come input all'algoritmo che la analizza (in base alle regole stabilite per identificare i singoli token di interesse) per estrarre tutti i token interessanti. Definire, per ogni tipo di token desiderato, l'insieme di regole che lo individuano in un qualsiasi testo temo sia parecchio complesso: prova solo a riflettere sul come identificare il toke di tipo NOME. E' chiaro che se non si può fare nessuna assunzione sul testo in input la cosa diventa ben complessa: vicecersa se sappiamo in anticipo qualcosa sul come è fomato il testo in ingresso, possiamo fare delle assunzioni che ci facilitano il compito di scrivere il nostro analizzatore lessicale (credo di questo si tratti, cioè di un analizzatore lessicale). Magari non c'entra niente, ma tanto per farti un'idea su cosa sia uno scanner (analizzatore lessicale) e sul discorso della categorizzazione dei token, prova a leggere questi due articoli (il sito è di un utente di questo forum): - http://www.guidealgoritmi.it/ShowArticle.aspx?ID=2 - http://www.guidealgoritmi.it/ShowArticle.aspx?ID=6 Spero per te che qualche utente più esperto intervenga nella discussione, ciao
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#12 | ||||
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Quote:
Sulle assunzioni però vorrei chiarire un attimo in questi giorni, probabilmente un minimo di assunzione si potrebbe fare...ci devo ragionare. C'è anche un'altra cosa...consideriamo questo esempio Quote:
In questo caso quello che mi interessa è: NOME == massaggiatrice AGGETTIVO == thailandese CITTA == olbia del resto non mi interessa. Ma se ad esempio avessi questa situazione Quote:
Quote:
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
||||
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao,
senti, ma se in input devi ricevere un testo in linguaggio naturale (in italiano insomma) immesso da un utente che potenzialmente può scrivere quel che gli pare, sono dolori In pratica il tuo analizzatore lessicale, in teoria, si troverebbe a dover fare i conti con la grammatica della lingua italiana. La situazione quindi non è proprio "semplice" come potrebbe essere, se invece stessimo parlando di un analizzatore lessicale per un linguaggio formale. Ti consiglio la lettura di queste informazioni (la fonte è wikipedia) per farti un'ulteriore idea: inoltre nella pagina in inglese trovi utili riferimenti per mettere (forse) arrivare a mettere le mani su informazioni precise circa eventuali tecniche già sperimentate per l'analisi linguistica (che mi sembra e temo - http://it.wikipedia.org/wiki/Grammat...che_analitiche - http://en.wikipedia.org/wiki/Formal_...lytic_grammars Questo è più specifico: - http://en.wikipedia.org/wiki/Link_grammar Prendi con le pinze tutto quello che ti ho detto, ripeto, sono idee che mi sono fatto oggi, dopo aver letto il tuo post e aver eseguito dei collegamenti nel mio cervello con vari concetti sentiti a pezzettini e mai approfonditi
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Qui mi sa che la questione è molto più grande del previsto
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Forse ho individuato il campo della questione.
Il Text Mining è qualcosa di enorme, vastissimo e cercare di individuare il modello e i concetti che si avvicinano di più al mio problema è piuttosto difficile. Tuttavia grazie anche ai tuoi link e grazie al supporto del manuale sul Text Mining credo che il mio caso riguardi la cosiddetta Stochastic Context-Free Grammar. Ora cercare di rendere concrete queste teorie mi risulta alquanto oscuro...
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Comunque la mole di teoria che sta dietro all'intera faccenda è enorme (e sicuramente interessantissima). [1] - Natural language processing [2] - Part-of-speech tagging [3] - JTextPro: A Java-based Text Processing Toolkit
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Ti ringrazio per l'ennesima volta
Per quanto riguarda l' NLP avevo incontrato il tema durante la lettura di un testo sul text mining. Anche l'NLP è un campo vastissimo...purtroppo Il POS-tagging invece l'ho capito abbastanza bene, o almeno la teoria, infatti ne avevo parlato nel mio post 8 e credo sia una delle possibili vie da seguire. Il problema è che anche sui libri non c'è scritta quasi mai la risposta alla mia domanda "Come fare" ma quasi sempre spiega di cosa si tratta. Ho letto che esistono molti tagger sviluppati, ma sono quasi introvabili Ho scaricato il tool, lo proverò su linux essendo file tar.gz e spero di riuscire a usarlo e a capirne il funzionamento. Naturalmente posso utilizzare qualsiasi cosa per raggiungere lo scopo, l'importante è capire! Concordo con te che la mole di teoria dietro alla questione è ENORME, ma anche io la reputo molto interessante!! edit: ho trovato anche questo ma non ho idea di come farlo partire...
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd Ultima modifica di phantom85 : 17-09-2009 alle 21:27. |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Quote:
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd |
|
|
|
|
|
|
#19 | ||
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Nel caso tu sia interessato a Citar, nella pagina che hai linkato è spiegato come utilizzarlo: Quote:
Consultando un post della developement group/list ci sono indicazioni su come ottenere un "Brown corpus" per eseguire il training. Inoltre l'autore dice che Jitar è stabile, nel senso che i bug sono stati risolti e che il sistema di tagging è soddisfacente. Lo sviluppo è ancora attivo. Ciao
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
||
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 1469
|
Quote:
Grazie, mi riferivo a Jitar...appena ho un attimo di tempo faccio delle prove leggendo il readme. Ora mi sto avventurando nella creazione dell'automa dell'algoritmo... edit: nel frattempo sto facendo delle ricerche su vari analizzatori lessicali, ma purtroppo tutti quelli che trovo sono analizzatori di linguaggi di programmazione e non di testi "normali"...
__________________
Ho concluso transazioni con: gimor78, Taz83, Phopho, HighVoltage, PsychoWood, lexman, sandru, Alkaiser, Baccomatto, selu, Chris70, devil_luca, Novus88, anakin71, redpepper, renatofast, nucatolo, 8310, JeanCaneo e sirjd Ultima modifica di phantom85 : 18-09-2009 alle 11:20. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:43.




















