View Full Version : [PHP]algoritmo
gangiaemi
08-03-2010, 10:44
Buongiorno a tutto lo staff e a tutti gli utenti.
Faccio una semplice domanda : ho la necessita, tramite un documento di testo, di cercare le parole piu rilevanti e le frasi piu rilevanti.
Esiste un modo per poter fare questo tramite php?
Sicuramente non troverai un linguaggio che offra una funzione del genere senza doverla programmare a mano, perché è troppo generica.
Di rimando, il PHP è sicuramente in grado di svolgere una funzione del genere se opportunamente programmato.
gangiaemi
08-03-2010, 13:25
ciao, grazie per la tua risposta.
Lo so che non esiste un linguaggio che possa offrire una funzione del genere.
So che bisogna sicuramente implementarla.
Che tipo di ragionamento c'è alla base di una ricerca di frasi o parole all'interno di un file di testo o documento?
Come faccio a dire : bene adesso prendi 10 parole , adesso prendine 6 ?
Credo che possa essere utile un db di appoggio con all'interno un vocabolario di termini.Questo è ok per singole parole, ma per periodi di senso compiuto?
é un po di tempo che ci sto pensando e non riesco proprio a trovare una soluzione o un punto di partenza.Qualche idea?
PS: cortesemente, non postare frasi che non servono praticamente a nulla.
Reputo questo un forum serio e gradirei risposte altrettanto serie, per favore.
Grazie.
banryu79
08-03-2010, 13:56
Per cominciare a ragionare meglio, prova per esempio a spiegare in maniera più dettagliata quello che ti occorre fare, il tuo problema da risolvere.
Ad esempio in questo:
ho la necessita, tramite un documento di testo, di cercare le parole piu rilevanti e le frasi piu rilevanti.
cosa intendi per parole più rilevanti/frasi più rilevanti, all'interno di un documento di testo?
Di solito una cosa è più o meno rilevante rispetto ad un criterio.
Devi eseguire una ricerca per numero di occorrenze del tipo: l'input è una o più parole o una frase, e l'output deve essere un lista di frasi (proposizioni) e la loro posizione nel documento, ordinata in base al numero di volte in cui le parole/frasi cercate sono presenti?
Quale è il criterio di rilevanza?
gangiaemi
08-03-2010, 15:37
Ciao, grazie anche a te per la risposta, sensata ;)
Hai perfettamente ragione.
Il problema è questo: dato un documento scritto in linguaggio naturale, bisogna estrapolare delle keywords e frasi che mi possano permettere di realizzare un file in formato xml, da salvare in una repository.
Questo file in formato xml , contiene, in maniera sintetica, quello che vi è scritto nel documento , in maniera molto generica.
Mi spiego meglio con un esempio :
"...... l'utente puo effettuare delle operazioni solo è loggato al sistema tramite inserimento di username e password. Le operazioni che puo effettuare sono : inserimento e modifica di un utente(anche se non vi è scritto, la modifica e l'inserimento vengono effettuate in una tabella chiamata utenti o users.)
Non appena l'utente accede al sistema, viene visualizzato l'elenco di tutti i reparti nei quali inserire il nuovo utente"
Dovrei arrivare ad avere un file xml di questo tipo :
<xml......>
<progetto>
<attori>utente</attori>
<Descrizione>Modifica o inserimento di un utente</Descrizione>
<operazioni>
<tipo>
<opt>
Inserimento
</opt>
<cosa>
un nuovo utente
</cosa>
<dove>
in tabella utenti
</dove>
</tipo>
<tipo>
<opt>
Modifica
</opt>
<cosa>
Un utente esistente
</cosa>
<dove>In tabella utenti</dove>
</tipo>
</operazioni>
<pre>
Necessario inserimento di username e password
</pre>
<post>
<msg>
Inserimento o modifica effettuate con successo
</msg>
<post>
</progetto>
Adesso, per passare da un documento molto generico ad uno cosi formale, ho bisogno necessariamente di analizzare il testo.
Non posso prendere in esame tutte le parole presenti nel documento ma devo fare una "scrematura" delle parole e cercare di prendere quelle che potrebbero essere piu rilevanti, come ad esempio : inserimento, modifica, utente.
Devo inoltre anche cercare di prendere le frasi piu importanti , come ad esempio : inserimento e modifica di un untente ; l'utente deve essere loggato al sistema.
Come faccio pero a capire quali sono le frasi piu importanti e le parole piu importanti?
Il mio primo pensiero è stato quello di utilizzare un DB come appoggio dove inserire le parole singole per poter fare un confronto con quelle presenti nel documento. Una specie di whitelist.
Come per le singole parole, mi devo mettere a scrivere nel database tutta una serie di frasi di senso compiuto, per poi verificare che ce ne siano di simili nel documento? (ESEMPIO : nel database inserisco questa frase : l'utente deve essere loggato. Il mio documento pero ha : l'utente deve essere loggato al sistema. La frase è molto simile. che faccio la prendo lo stesso come buona ?)
Spero di essermi spiegato bene e non aver fatto piu confusione di quella che ho gia in testa.
Ti ringrazio ancora per il tempo dedicatomi.
A presto
E.
Una ricerca di questo tipo implica, almeno per la seconda parte, un sistema efficace di riconoscimento delle proposizioni, il quale si risolve solo con un algoritmo estremamente sofisticato.
Invece, quello che puoi fare è analizzare il testo alla ricerca delle parole più utilizzate, stilando una classifica delle parole più rilevanti in base a questo semplice criterio.
In tal caso, ti suggerisco di scremare subito le congiunzioni e gli avverbi più utilizzati perché ne troveresti troppo in proporzione alla loro importanza nel contesto.
Insomma, non stai cercando di fare qualcosa di semplice, e l'unica strada è decidere dove limitare le potenzialità dell'algoritmo e lavorare sodo sulle restanti possibilità.
Il documento di partenza deve essere ben strutturato e formale per poter fare una cosa del genere in maniera decente.
Considera solo che una macchina non ha alcuna idea del significato delle stringhe che gli passi (istruzioni escluse).
Esistono vari livelli di dettaglio a cui puoi operare, cmq sicuramente il primo passo è trovare le parole chiave in base al dominio applicativo di interesse (e qui dovresti avere un dizionario di termini più o meno tecnici relativi ad esso), dopodiché usare dei termini generici (dei termini chiave che stabilisci a priori e che dovrebbero essere SEMPRE usati quando fai il primo documento) che possono essere d'aiuto al programma a separare le varie aree...
gangiaemi
10-03-2010, 23:45
Salve ragazzi, grazie a tutti per le risposte.
Sono giunto alla conclusione che il testo, cosi come scritto , ossia in un linguaggio naturale, è impossibile da far interpretare ad una macchina.Se cosi fosse, google lo avrebbe gia fatto , con la sua miriade di ingegneri impegnati sempre a costruire algoritmi superproduttivi no?
L'idea di fare un documento ben strutturato, mi era passata per la testa e non era male come idea, mi avrebbe risolto non pochi problemi.
Tuttavia il requisito di partenza è che il documento deve essere scritto in linguaggio naturale, come sto scrivendo io ora.
Allora, dopo varie capocciate :muro: e molta riflessione con un mio carissimo amico, siamo arrivati a questo : perchè non creare un editor apposito che mi possa dare la possibilità di scrivere testo in linguaggio naturale , ma che allo stesso tempo mi possa guidare nella scelta delle parole chiave e frasi di senso compiuto , per la generazione del mio documento in formato xml?
Che ve ne pare?
Guardando un po nella rete, credo che questo si possa fare.
L'ipotesi del software mi sembra discreta, alla fine non è completamente automatico, ma potrebbe essere un buon inizio :)
Vi tengo aggiornati, se qualcuno dovesse essere interessato a questa cosa qui.
Grazie a tutti quanti
A presto
E.
banryu79
11-03-2010, 08:26
...
Sono giunto alla conclusione che il testo, cosi come scritto , ossia in un linguaggio naturale, è impossibile da far interpretare ad una macchina.
...
su questo non ci metterei la mano sul fuoco, anzi.
Dovresti provare a informarti sul "parsing del linguaggio naturale" (http://www.scienze.unibo.it/Scienze+Matematiche/Didattica/Insegnamenti/dettaglio.htm?AnnoAccademico=2009&IdComponenteAF=340483&CodDocente=031280&CodMateria=34549).
Alla fine un linguaggio naturale segue comunque una grammatica, non è campato in aria (certo, la complessità è enorme; poi dipende anche a che scopo si analizza un testo in NL, dipende insomma da che cosa si va cerando).
gangiaemi
11-03-2010, 09:53
Ciao, sarebbe possibile realizzare un parser di un linguaggio naturale,ma la complessità è elevatissima.
Bisognerebbe dare delle regole sintattiche e semantiche per la strutturazione del documento.
In italiano soprattutto, quando per esprimere una azione , vi sono moltissimi modi per poterlo fare.In un esempio particolare : l'utente deve essere loggato al sistema; l'utente si deve loggare al sistema.
Queste 2 semplici frasi hanno lo stesso significato, ma sono scritte in un modo differente.
Prendo una frase da un documento che ho :
"........Il sistema mostra l’elenco delle divisioni disponibili da associare al nuovo utente, selezionando per default la divisione di appartenenza del lavoratore selezionato...."
implementare un algoritmo che sia in grado di comprendere questa frase, non credo sia possibile.
Ho creato tempo fa, una grammatica che fosse in grado di generare, dato un sorgente in pascal( sintassi pascal) , un sorgente in c(sintassi C). Il presupposto appunto era che la sintassi e la semantica del linguaggio sono ben strutturati e formalizzati in una data maniera.
Grazie per la risposta. Opinioni interessanti, come questa, sono sempre utili:)
banryu79
11-03-2010, 10:41
"........Il sistema mostra l’elenco delle divisioni disponibili da associare al nuovo utente, selezionando per default la divisione di appartenenza del lavoratore selezionato...."
implementare un algoritmo che sia in grado di comprendere questa frase, non credo sia possibile.
Beh, immagino tutto dipenda da che cosa significa quel "comprendere", per te, in quel contesto (il contesto del tuo problema, che, per inciso, non ho ancora capito con chiarezza).
Per darti un'idea di cosa si riesce a fare, ti cito il software T-LAB (http://www.tlab.it/it/allegati/help_it_online/fare.htm).
Altra citazione interessante, PowerSet.
Qui la pagina di wikipedia (http://en.wikipedia.org/wiki/Powerset_%28company%29), e qui un'intervista al suo creatore (http://www.ifaf.it/blog/2009/12/28/ricerca-3-0-lorenzo-thione-sul-web-del-futuro/).
Comunque, ho visto che il campo è definito come NLP, Natural Language Processing (http://en.wikipedia.org/wiki/Natural_language_processing).
Qui (http://research.microsoft.com/en-us/groups/nlp/)la pagina di Microsoft Research relativa al NLP, e qui (http://nlp.stanford.edu/) quella dello Stantford Natural Processing Group.
Per dire che il problema è ben conosciuto e studiato.
Capisco che postare link serva a poco o niente, a te personalmente, per risolvere il tuo problema.
Tra l'altro io sono completamente ignorante in materia, quindi i link te li ho postati ingenuamente, pensando di farti un piccolo favore, ma magari già li conoscevi o la cosa non ti interessa a questo livello.
C'è anche caso che magari qualche lettura ti possa ispirare o aiutare a comprendere meglio cosa si può fare, che direzione prendere.
Ciao :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.