Newsgroup: it.comp.ia
Titolo: [PCBRAIN] Analizzatore testi

Salve a tutti!
Sto realizzando, per l'occasione della gara di chatterbot (quindi
Guajjjjjjjj a chi mi ruba l'idea) un sistema per PCBrain tale che gli
permetta di leggere dei testi e capirne i contenuti, come se si stesse
parlando con un interlocutore umano...
Il fatto è che brancolo nel buio... per ora il sistema riesce a riconoscere
una percentuale molto bassa di concetti (attorno al 10%)... e cio penso sia
dovuto al fatto che (come tutti i chatterbot odierni) PCBrain riesce solo a
capire frasi semplici, mentre quelle dei testi e degli articoli che si
trovano di solito su internet sono lunghe e articolate... come posso
spezzettare il tutto?
Grazie per le idee,
Dome
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
PC Brain Official Web Site
http://digilander.iol.it/pcbrain
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

--
A.I-
Factor2 Web Site
http://utenti.tripod.it/aifactory2/Home.html
--------------------------------
Inviato via 
http://usenet.iol.it
 


Io sto approntando un analizzatore lessicale (con buoni risultati direi) che
è in grado di compiere l'analisi grammaticale e di disambiguare i termini
utilizzando i Modelli di Markov Nascosti (HMM). Sto aggiustando alcuni
problemi "tecnici" ma il sistema funziona già (sto cercando di rendere il
tutto molto più veloce). Per quando riguarda l'analisi del periodo e logica
io consiglio l'utilizzo di una grammatica Context Free (Grammatica di
Chomsky). Con un po' di fatica si reisce a costruire una grammatica per
l'italiano "abbastanza" buona in grado di fare sia l'analisi del periodo che
quella logica. Per quanto riguarda i concetti, tempo fa avevo realizzato un
programma i grado di capire l'argomento di una frase usando un metodo
statistico sui termini più presenti di alcuni temi.
Per delucidazioni fatemi sapere qui sul NG...
Milliken


> utilizzando i Modelli di Markov Nascosti (HMM).
Di che si tratta?
Dome

...[cut]...
Ciao, ho letto con piacere il tuo post
e volevo chiederti una cosa molto semplice (se posso):
tu come fai per capire
quando una parola all'interno di una frase e' un verbo oppure no?
mi spiego:
io, nel mio programma faccio la ricerca del vocabolo all'interno di una tabella
dove ho inserito a mano tutte le desinenze dei verbi,
ma mi piacerebbe molto realizzare un algoritmo del genere (vedi qui sotto):
CheckVerbo(vocabolo as string, persona as integer, plurale as boolean, tempo as string)
begin
   if vocabolo e' un VERBO then
       return verbo(vocabolo, persona, plurale, tempo)
   else
       return FALSE
   endif
end
Quali strutture dati servono per realizzare un algoritmo del genere?
Mi piacerebbe avere la tua opinione in merito perche' mi sembri
molto piu' esperto di me in queste cose.
il mio sistema di ricerca sta diventando molto lento, quindi
ora vorrei realizzare un algoritmo che funzioni come ti ho spiegato sopra.
So che tu hai gia fatto qualcosa del genere in Julia e volevo sapere
cosa comporta realizzare un algoritmo simile.
grazie,
Davide

Per fare questo basta guardare nei sorgenti di PCBrain. Lui gia riconosce un
verbo in una frase e ci azzecca sempre, anzi, pure troppo!
Ti segni le desinenze di tutte e tre le coniugazioni, e vedi se la desinenza
della parola figura nella lista delle 3 coniugazioni. A quel punto
sostituisci alla desinenza are, ere, ire (in base al tipo di desinenza
trovata) e, con il verbo all'infinito vai a cercare se esiste quella parola
nel dizionario dei verbi. Tutto qui.
Ah! Ho aggiunto anche un controllo per gli irregolari (ho messo una
listarella di verbi irregolari con TUTTE le loro coniugazioni... fa uno
string matching).
Dome


 ha scritto nel messaggio news:pzLm7.16443$ul3.5...@news.infostrada.it...


So
che tu hai gia fatto qualcosa del genere in Julia e volevo sapere
Grazie
a me :))
milliken, senti, puoi dirmi quando sei disponibile per
continuare a lavorare sul progetto A.I-Factory2?
Muzero ha cercato di
contattarti ma non ci è riuscito...
Fammi sapere a: 
aim...@ciaoweb.it
Ciao,
Matteo



Devo dirti sinceramente che non so nemmeno io cosa siano pienamente. Diciamo
che è un bel nome che si dice per farsi belli :))))... a parte gli scherzi
ora ti spiego come faccio io a disambiguare.
In pratica nella lingua italiana alcune parole hanno una sola occorrenza
grammaticale (come "è" che può essere solo la 3 persona del verbo essere,
indicativo presente) mentre altre possono essere più cose ("vecchia" può
essere sia aggettivo che nome). Per prima cosa ho dato in pasto al mio cerca
parole (un piccolo software che compie una ricerca binaria su un dizionario
in forma di file di record e restituisce la categoria grammaticale della
parola che ha trovato) molti testi lunghi tratti dal sito liberliber (roba
tipo il manifesto di marx, i promessi sposi, pinocchio e altre cose che mi
sembravano scritte in italiano abbastanza moderno e che fossero
grammaticalmente corrette)e facevo scrivere su un file tutti i risultati
mettendo davanti alle parole che avevano una singola categoria grammaticale
un simbolo (@). Successivamente da un secondo programma facevo analizzare
questo risultato e ogni volta che trovava tre simboli in fila (ovvero tre
parole in fila che avevano una sola occorrenza grammaticale) facevo segnare
la terne di categorie grammaticali in un file "terne.txt" incrementando un
contatore alla terna in questione se la terna era già presente oppure
aggiungendola con un contatore 1 se la terna era nuova.
Per capirsi il file "terne.txt" ora si presenta così :
nome verbo aggettivo 3
nome aggettivo pronome 13
verbo articolo nome 45
ecc...
Quindi quando vado a fare l'analisi lessicale di una parola e scopro che
quella parola ha più di una occorrenza grammaticale prendo le due categorie
grammaticali delle parole precedenti (mettiamo che siano nome e verbo) e tra
le terne che presentano nome e verbo come prime due categorie prendo quella
che presenta tra le come terza categorie una delle categorie della parola
ambigua e tra queste prendo quella con il contatore massimo (ovvero quella
che avrebbe la maggior possibilità di seguire le due categorie precedenti).
Esempio. se la frase fosse : "una cosa vecchia"
il programma cosa farebbe  ?
per un troverebbe : un articolo
per cosa troverebbe : cosa nome
per vecchia troverebbe : vecchia nome , aggettivo
Quindi prende il file terne.txt
mettiamo che nel file siano presenti le terne
articolo nome aggettivo 35
articolo nome nome 13
Il programma scopre che aggettivo è più probabile che segua articolo nome e
quindi asserisce che : vecchia aggettivo
In pratica questo discorso delle terne e delle probabilità ho scoperto solo
dopo che era un caso particolare di questi modelli di markov nascosti e così
per sembrare molto professionale ora dico di averli usati :)))
Spero di essere stato chiaro, in barba al sig. lentini che non pubblica mai
i suoi algoritmi (perchè secondo me sono delle c......te, ma questo lo
scopriremo solo vivendo :))
SE&O
Milliken

 io con la prima versione del mio analizzatore lessicale.
Ehi ehi!
Fermi tutti!
Di che parlate?
Da milliken ho solo copiato l'inizio! Poi l'analizzatore di PCBrain è stato
(tranne per alcuni aspetti) al di sopra di quello di Julia (infatti il mio
coniugava verbi e parole). Ho capito male?
Dome

Scusate raga... giornataccia ;(

Si!!!
ho quasi ultimato il mio analizzatore grammaticale!
Peccato che ho
sprecato tempo dato che probebilmente usero' quello di milliken :))
Cmq
volevo chiedere se qualcuno puo' aiutarmi (magari unendosi al TEAM)
a
sviluppare una fitta rete semantica con codice "pulito" senza variabili
strane o altro in VB...


Milliken
Ciao,
Matteo
