PDA

Visualizza la versione completa : Problema inserimento stringhe per progetto laurea: help per tutti gli informatici!!


nitros1980
07/01/10, 23:24
ciao ragazzi, vi prego datemi una mano.
Dovrei raccogliere in un db mysql tramite copia e incolla tutti i testi della "bacheca" e commenti di facebook per una analisi linguistica. L'inserimento e la consultazione avvengono tramite maschere realizzate in php.
Il progetto deve essere online ma anche in locale tramite phpmyadmin. la mia conoscenza di php è basilare. Per raccogliere i testi e fare in modo che siano registrati correttamente nel database mi hanno consigliato ADODB, solo che nel caso di lettere accentate etc mi mette nel db dei caratteri stranissimi..voi che dite?
se dovessi invece inserire i testi nel modo "tradizionale" che funzioni per trattare le stringhe dovrei usare? che charset e come si imposta? nel caso di caratteri particolari tipo "cuoricini" etc come faccio?

l'importante è che devo fare analisi linguistiche sulle parole e che quindi possa utilizzare il db per capie quante volte viene utilizzata una certa parola etc quindi non so se la codifica dei caratteri sia giusta...voi che dite?

grazie

Raiden
07/01/10, 23:42
allora ti posso dare io una mano.. col php il migliore database è Mysql..

1) il Charset di facebook è utf-8, ma questo poco importa.. devi definire tu il charset nella tua pagina html/php per esempio utf-8 e quando salvi nel database usi la funzione utf8_decode($stringa); e per leggere e stampare a video utf8_encode($stringa); questo ti permette di avere univocità nei testi e fa si che quello che scrivi lo leggi senza vedere caratteri strani.

2) i quoricini di facebook sono pseudo-tags, facebook se inserisci <3 lui non fa altro che usare str_replace("<3","&hearts;","$stringa"); cioè nella stringa se vede <3 lo cambia con il codice html &hearts; quindi diciamo che se copi e incolli dovrebbe uscirti &hearts;

3) phpmyadmin è solo una interfaccia grafica per gestire mysql, quindi penso che tu intendessi easyphp che include webserver Apache/Mysql/phpMyadmin

4) per qualsiasi cosa su php puoi vedere su www.php.net (http://www.php.net)

per effettuare una query di raggruppamento puoi effettuarne una semplice tipo

"Codice PHP" $query ="SELECT COUNT(frase) as tot_parole FROM frasi GROUP BY 'tvb' ";

questa query cerca nella tabella frasi e conta quante di queste contengono la parola 'Tvb'

Spero di esserti stato d'aiuto anche un pochino :ok

nitros1980
07/01/10, 23:51
grazie Raiden!

alcuni chiarimenti:
1)quindi quando vado a fare la query di inserimento prima passo la variabile che contiene il teso alla funzione utf8_decode() giusto?e il contrario quando vado a recuperare giusto? Per i caratteri accentati, apici etc devo utilizzare qualche altra funzione?

2)interessante
3)si intendevo easyphp

per quanto riguarda le ricerche intendevo che se voglio vedere quante volte la parola "fedeltà" viene utilizzata non è che mi da risposta nulla perchè nel db magari la parola viene registrata come fedelt&amp;?o magari ci sono altre parole che non vengono registrate come sono ma codificate...non so se mi spiego

EDIT: in phpmyadmin nel campo che andrà ad accogliere il testo dovrei scegliere la collation..dovrei mettere utf_unicode?

Raiden
08/01/10, 10:01
se usi una maschera in Html invece di usare phpmyadmin è mooolto meglio

ti faccio due query di esempio di come inserire e come ricercare qualcosa con utf_8

Inserimento
INSERT INTO FRASI (frase) values('".utf8_decode($stringa)."');

SELECT * FROM FRASI WHERE frase LIKE '%Tvb%'

quando poi fai la stampa a video fai

echo utf8_encode($stringa);

e ti esce esattamente il testo come lo hai messo :) in modo da non avere incongruenze..

:ok

nitros1980
08/01/10, 13:12
grazie raiden...però gli apici e i doppi con questa funzione come vengono trattati?non è che devo utilizzare anche funzioni tipo adslashes o altro?

Raiden
08/01/10, 13:18
si quando inserisci nel database fai '".addslashes(utf8_decode($stringa))."'

quando invece stampi scrivi stripslashes(utf8_encode($stringa));

emandt
08/01/10, 14:44
Piccolo OT: perchè vedo sempre di più laureandi in informatica fare cose più grandi di loro? E' come se un laureando in meccanica si mettesse a creare a mano un nuovo tipo di motore a turbina...
Hai detto tu stesso che la tua conoscenza del PHP è basilare, come puoi pensare di fare un progetto non conoscendo quasi nulla?

Lo dico piu che altro per te, non è una critica.

ADODB lo sconsiglierei per la gestione di MySQL con PHP, andresti a snaturare tutto quanto dato che PHP usa MySQL nativamente senza passare per "midware" intermediatori :)

Che cosa intendi per "analisi linguistica" dei post in bacheca e dei relativi commenti? Devi fare un software che li analizza o semplicemente li analizzi tu "a mano" ed inserisci i risultati che ottieni dal tuo lavoro-a-mano da un'altra parte?
Se vuoi solo analizzare quante volte viene ripetuta una singola parola si crea ugualmente un problema: potrebbe essere scritta in modo diverso e/o sbagliato....tipo il "perche" con l'accento da una parte o dall'altra, oppure scritto errato perchè scritto veloce (tipo "pechè") oppure con la contrazzione di internet ("perkè").
Quindi a questo punto o vagli tutte le miriadi di possibilità oppure devi fare l'analisi a mano.

Ma devi proprio puntare su una pagina di Facebook?
Qualsiasi sia la risposta potresti fare la pagina PHP affinchè CARICHI lei stessa la pagina desiderata (Facebook?) e scarichi quello che c'è (se è Facebook sono semplicemente testi rinchiusi in tag DIV o SPAN) così fai anche una bella figura, tanto se già conosci poco o niente di PHP e affini, ugualmente hai bisogno di aiuto....una volta fatto 30, tantovale fare 31...

Raiden
08/01/10, 15:04
emandt (http://www.er6italia.com/vbulletin/member.php?u=4549) per fare un'analisi come vuole fare lui.. si usano le espressioni regolari ed automi.. non è tanta roba solo che però le devi saper usare a menadito altrimenti col cappero che te ne esci. lascialo fare lui non ha chiesto mica un parere su quello che sta facendo ha chiesto se qualcuno gli spiegava come muoversi.. gia gli ho detto che ADODB non va bene per lui, anche se Cmq AdoDB è solo un insieme di classi che che permettono la comunicazione di Php con vari Database... e che basta usare phpmyadmin per gestire il Mysql e i moduli nativi in php per Mysql.. pò una volta che gli ho detto che c'è www.php.net (http://www.php.net) imparerà quello che deve fare.. spero che almeno conosca l'sql :)..

Anche io quando mi sono laureato in informatica 2 anni fa non conoscevo assolutamente phyton.. ne tantomeno Servlet e Jsp però mi so messo e ho fatto un CMS coi contro****i.. e nemmeno quando sono andato a lavorare conoscevo .NET e C# però dopo due giorni, ho iniziato a programmare interfacce per macchine a controllo numerico e macchine automatiche che adesso girano nelle linee di produzione FIAT e non solo.. non siamo sempre critici e pessimisti ognuno conosce i suoi limiti e anche se uno volesse provare a superarli bisogna solo essere incoraggiato e non abbattuto a priori :ok

P.S. in linea teorica usare un layer come AdoDB per fare Software web Based non è mai male.. soprattutto se si considera che si può cambiare Database da un momento all'altro.. usando un layer di mezzo come AdoDb puoi cambiare Database senza toccare una linea di codice e senza cambiare query :ok

nitros1980
08/01/10, 15:07
ti ringrazio emandt..ho scelto di lavorare in php mysql perchè è una cosa che vorrei imparare.

Il progetto consiste nel raccogliere i testi della bacheca e i commenti dei miei amici di faceook (circa 180)..i testi ho deciso di copiarli e incollarli perchè al momento dell'inserimento tramite maschera php li devo anche particolareggiare mettendoli in relazione aon la tabella utenti checontiene dati quali il sesso, anno di nascita etc e con la tabella categoria testi che va a specificare a quale cateoria appartiene e a che livello.La mia idea era poi di poter vedere delle varianti di una parola come hai detto tu..creando anche magari un motorino di ricerca interno etc...quando parli della pagina php che carica lei stessa la pagina desiderata che intendi?di passargli il sorgente tramite form?hai qualche esempio?

Raiden
08/01/10, 15:13
emandt intende uno script php che emula il browser accede a facebook e legge tutto quello che leggeresti tu e lo inserisce nel database.. nitros1980 però è anche vera una cosa che dice emandt e li gli devo dare ragione: se hai intenzione di fare motore di ricerca, analisi lessicale ecc... non devi imparare solo il php, devi imparare ad usare l'sql e tutte le sue funzioni di aggregazione e ricerca, eventualmente stored procedure per mysql, devi imparare ad usare Espressioni regolari e imparare a programmare automi che usino espressioni regolari.. altrimenti non penso che riuscirai nel tuo intento così facilmente :ok

nitros1980
08/01/10, 15:18
emandt intende uno script php che emula il browser accede a facebook e legge tutto quello che leggeresti tu e lo inserisce nel database.. nitros1980 però è anche vera una cosa che dice emandt e li gli devo dare ragione: se hai intenzione di fare motore di ricerca, analisi lessicale ecc... non devi imparare solo il php, devi imparare ad usare l'sql e tutte le sue funzioni di aggregazione e ricerca, eventualmente stored procedure per mysql, devi imparare ad usare Espressioni regolari e imparare a programmare automi che usino espressioni regolari.. altrimenti non penso che riuscirai nel tuo intento così facilmente :ok

Avete esempi di questo script da qualche parte?per quanto riguarda espressioni regolari e automi qualche linkino????scusate se abuso di voi sia mentalmente che fisicamente :D

emandt
08/01/10, 16:34
Ok ma un Servlet è pur sempre "un'Applet" che sfrutta e si appoggia su una struttura (più grande del Servlet stesso) già consolidata e fatta...non è come fare una pagina PHP da zero che poi Apache/ISS andranno a caricare leggendo prima il Database.
Il JSP invece sfrutta sempre un "Container" in cui viene eseguito il codice dal motore JSP, che a sua volta andrà reindirizzato al WebServer per la renderizzazione sulla pagina Web.
Quindi nei tuoi casi, con Servlet o JSP, usando anche ADODB, si avrà:
Utente --> Internet --> ServerWeb con Apache/IIS --> Servlet [oppure Contenitore JSP --> Motore JSP --> Codice JSP scritto da te] --> ADODB --> Database
...un po' laborioso e sicuramente non ottimizzato, proprio come .NET o Java.
Sono sempre meglio meno passaggi possibili:
Utente --> Internet --> ServerWeb con Apache/IIS --> PHP --> Database MySQL

@nitros1980: Fare un "automa" che legga Facebook è impegnativo e comunque violeresti le regole di utilizzo di Facebook (per suo regolamento i dati di accesso non possono essere ceduti ad altri, quindi nemmeno ad un programma di terze parti, anche se fatto da te), oltre che a complicarti la vita.
Il copia/incolla è la via più semplice ma dovrai scartare un sacco di cose inutili (tipo linee, bordi, tabelle, immaginette, ecc ecc...)

Raiden
08/01/10, 16:41
emandt mi sa che hai un pò di confusione in testa su cosa siano Servlet e Jsp.. e cosa siano i driver Jdbc e Odbc per Java :ok proprio come funziona anche .Net cioè con driver middleware che intermediano tra il database e il codice sorgente in modo che se cambi il il driver di connessione cambi poco e nulla nel codice :ok

Una servlet non è una Applet altrimenti si chiamerebbero allo stesso modo :ok


nitros1980.. non sono scriptini sono veri e propri algoritimi di elaborazione cerca su google espressioni regolari ma non ti basare sugli esempi stupidi a te serve qualcosa di + elaborato.. e studiati la teoria degli automi e come funzionano..

Purtroppo ti sei imbattuto in qualcosa di molto vasto e intricato :ok

emandt
08/01/10, 17:14
Ho fatto Servlet e non mi sono piaciuti:
1) poco controllo di basso livello (infatti come JSP fanno entrambi parte della "programmazione ad ALTO LIVELLO", cioè dove non si ha il controllo di tutto ma viene demandato ai "layers" sottostanti)
2) sono più lenti di qualcosa che ha passaggi in MENO (e finchè si fa un'applicativo per 2 utenti è un conto, quando però si devono gestire 15.000 connessioni simultanee come faccio io, usare un Servlet è un suicidio)

I vantaggi nell'usare quelle due cose sono la semplicità e l'immediatezza nella scrittura del codice e, come dici giustamente tu, la possibilità di intercambiare "layer sottostanti" senza creare confusione.

Se anche fossi in confusione ci sono guide online e anche su Wikipedia:

Servlet: "Le Servlet sono oggetti che operano all'interno di un server per applicazioni (per esempio Tomcat) e potenziano le sue funzionalità.
La parola servlet deriva da una precedente, Applet, che si riferisce a piccoli programmi scritti in linguaggio Java che si eseguono all'interno di un browser. Per contrapposizione, una Servlet è un programma che si esegue in un server web"
JSP: "All'atto della prima invocazione, le pagine JSP vengono infatti tradotte automaticamente da un compilatore JSP in servlet. Una pagina JSP può quindi essere vista come una rappresentazione ad alto livello di un servlet. Per via di questa dipendenza concettuale, anche l'uso della tecnologia JSP richiede la presenza, sul Web server, di un servlet container, oltre che di un server specifico JSP detto motore JSP (che include il compilatore JSP); in genere, servlet container e motore JSP sono integrati in un unico prodotto"

Forse di base credevi di aver creato davvero APPLICATIVI/APPLICAZIONI, ma di fatto codice .NET, PHP, JSP, HTML, JavaScript, linguaggio Java e simili sono solo SCRIPT eseguiti da un "motore di script" che interpreta e poi esegue operazioni di ALTO livello.
Un Servlet o codice JSP senza il motore/compilatore+contenitore+ServerWeb non fa nulla....è un semplice documento TXT da leggere.

E' possibile "sniffare" dati binari da una scheda di rete con le Servlet/JSP? - NO
E' possibile creare un driver per stampante con Servlet/JSP? - NO
E' possibile ricevere un dato sulla porta seriale (RS232) o parallele (LPT) del proprio PC con Servlet/JSP? - NO
E' possibile creare una sfera utilizzando DirectDraw (di DirectX) oppure OpenGL con Servlet/JSP? - NO
E' possibile spostare la testina dell'HardDisk in una posizione specifica con Servlet/JSP? - NO

Per di più non esiste nemmeno un applicativo per utenti finali di Desktop-casalinghi scritti per Servlet o scritti in JSP...per cui il bacino di utenza finale è quello di aggiungere funzionalità a qualcosa di già presente ma che un comune utente userà raramente (solo collegandosi a WebServer/WebService) e di certo non ce li avrà sul proprio Desktop in casa.

Nitros1980 ha bisogno di qualcosa che sia avviabile sulla sua macchina, come su tante altre, e non si può sempre far installare 300 layers per far funzionare il codice JSP.
Sfortunatamente non sà programmare in C/C++/VC/VC++/C#/Delphi/Java/.NET altrimenti potrebbe fare le cose molto più facilmente (e senza installare nulla quando vuole spostare l'applicativo da un PC ad un altro) piuttosto che passare per Apache/IIS+PHP, però rimane l'unica strada percorribile e la più semplice/veloce.

.NET funziona con midware, si verso il Database che verso il resto del sistema operativo, verissimo....e per questo è lento tanto quanto Java. Dovrebbe essere ovvio che più layer/strati si mette nel mezzo, e più un applicativo è lento.
Per quello programmo con Delphi e C++....mi ero stancato di non avere il controllo su alcune cose demandandole ad un layer/strato che non ho fatto io e che non so cosa faccia. Con C++, ma anche con Delphi, non ho più nulla nel mezzo SE NON VOGLIO USARLA IO.

PS: ti parlo da Programmatore Win32/64 (C++, Java e Delphi) e da Web Developer (PHP, ASP, XML, Coldfusion, ActionScript e AJAX)

Raiden
08/01/10, 17:51
Emandt onestamente non ho capito l'utilità del tuo post.. se volevi dimostrare che wikipedia ha un pò di notizie.. bhe gia lo sapevamo.. se invece volevi dimostrare che hai un pò di confusione sul reale utilizzo di Servlet,Jsp e .Net con i vari linguaggi C#,Vb.Net e C++.Net me ne sono accorto..

Se poi c'era anche un'altro scopo onestamente non l'ho capito..

Cmq qui non stiamo dicendo che nitros1980 debba usare java o c++ o qualche altra cosa.. stiamo solo dicendo che se vuole fare quello che deve fare in php deve imparare molto e penso che abbia parecchio sottostimato le problematiche a cui sicuramente andrà in conto..

Per evitare che il post cambi direzione e diventi una sorta di flame generalizzato e inutile al raggiungimento dello scopo ultimo cioè quello di aiutare nitros1980 ti prego .. FINIAMOLA QUI.. altrimenti noi potremmo incorrere in warning inutili e figuracce inutili e nitros non avrebbe un valido anche se minimo aiuto :ok

nitros1980
08/01/10, 17:55
emandt come hai fatto a diventare tutte queste cose insieme?hai sugerimenti di testi o siti a cui ti sei rifatto?mi piacerebbe anche a me..

Raiden
08/01/10, 18:04
nitros1980 ogni linguaggio di programmazione ha sempre un sito di supporto e tanti libri da cui imparare..

io programmo in


Java
C
C++
Bash
Php
Javascript
plSQL
C#.net
VB.Net
Vb6
Html
Css
Ajax
Xml
python (poco)

Conosco l'sql e i dialetti di Mysql, Oracle e MS SQL,

Ma non è che magicamente diventi programmatore con gli anni impari ad usare bene un linguaggio di programmazione e la forma mentis che assumi ti permette di imparare agilmente tutti gli altri in poco tempo..

nitros1980
08/01/10, 19:20
stica...cosa mi consigli di aggredire dopo php?

Raiden
08/01/10, 19:29
io ti consiglio di imparare ad usare un linguaggio di programmazione e non di scripting e poi successivamente quelli di scripting.. altrimenti magari trovi qualche problema..

Io ho imparato il C come primo linguaggio e da li tutti gli altri..