2010-05-06 14 views
22

Sto facendo un progetto per un corso di college che sto prendendo.Estrazione di testo con PHP

Utilizzo PHP per creare una semplice app Web che classifichi i tweet come "positivi" (o felici) e "negativi" (o tristi) basati su un set di dizionari. L'algoritmo che sto pensando al momento è il classificatore o l'albero delle decisioni di Naive Bayes.

Tuttavia, non riesco a trovare alcuna libreria PHP che mi aiuti a eseguire un serio processo di elaborazione del linguaggio. Python ha NLTK (http://www.nltk.org). C'è qualcosa del genere per PHP?

Ho intenzione di utilizzare WEKA come back-end dell'app Web (chiamando Weka in linea di comando da PHP), ma non sembra efficiente.

Avete qualche idea di cosa dovrei usare per questo progetto? O dovrei semplicemente passare a Python?

Grazie

+2

Naive classificatori bayesiani non sono davvero difficile per scrivere se si capisce i principi di base. In realtà potresti fare tutto in PHP in questo modo. San Jacinto copriva già tutto ciò che avevo detto sulla parte della PNL. Un'altra cosa che posso dirvi da un progetto simile che ho fatto solo un paio di settimane fa è che la classificazione del sentiment usando l'approccio standard "bag-of-words" non funziona molto bene. Non ho provato niente come n-grammi, anche se ... ho la sensazione che si comporterebbero meglio, ma ovviamente questo ti darebbe un sacco di dimensioni aggiuntive ... –

+0

Non c'è nessuna indicazione nel tuo post o il tuo collegato al motivo per cui questa è una soluzione adatta. –

+0

TextARanguageDetect di PEAR può identificare 52 lingue umane da campioni di testo e restituire punteggi di confidenza per ciascuno. Non è un'opzione interessante da prendere in considerazione? – nuqqsa

risposta

9

Se avete intenzione di utilizzare un classificatore bayesiano, è in realtà non hanno bisogno di una tonnellata intera di elaborazione NL. Tutto ciò di cui hai bisogno è un algoritmo per arginare le parole nei tweet e, se vuoi, rimuovere le parole di stop.

Gli algoritmi di derivazione abbondano e non sono difficili da codificare. Rimuovere le parole di stop è solo questione di cercare una mappa di hash o qualcosa di simile. Non vedo una giustificazione per cambiare la piattaforma di sviluppo in modo da soddisfare il NLTK, sebbene sia uno strumento molto carino.

2

È inoltre possibile utilizzare l'API uClassify per eseguire operazioni simili a Naive Bayes. Fondamentalmente formi un classificatore come faresti con qualsiasi algoritmo (eccetto che lo stai facendo tramite l'interfaccia web o inviando documenti xml all'API). Quindi ogni volta che ricevi un nuovo tweet (o una serie di tweet), chiami l'API per farlo classificare. È veloce e non devi preoccuparti di sintonizzarlo. Ovviamente ciò significa che perdi la flessibilità che ottieni controllando te stesso il classificatore, ma ciò significa anche meno lavoro per te se questo di per sé non è l'obiettivo del progetto di classe.

0

è anche possibile utilizzare la parsimonia o Gearman a che fare con NLTK

5

Ho fatto un progetto molto simile qualche tempo fa - classificando solo le notizie RSS invece di Twitter - anche usando PHP per il front-end e WEKA per il back-end. Ho usato PHP/Java Bridge che era relativamente semplice da utilizzare: un paio di righe aggiunte al codice Java (WEKA) e consente al PHP di chiamare i suoi metodi. Ecco un esempio di codice PHP-side dal loro sito:

<?php 
require_once("http://localhost:8087/JavaBridge/java/Java.inc"); 

$world = new java("HelloWorld"); 
echo $world->hello(array("from PHP")); 
?> 

Poi (come qualcuno ha già detto), è solo bisogno di filtrare le parole di stop. Mantenere un file txt per questo è molto utile per aggiungere nuove parole (tendono ad accumularsi quando si iniziano a filtrare parole irrilevanti e si tiene conto degli errori di battitura).

Il modello naive bayes ha forti assunzioni di funzionalità indipendente, cioè non tiene conto di parole che sono comunemente accoppiate (come un idioma o una frase) - semplicemente prendendo ogni parola come un evento indipendente. Tuttavia, può sovraperformare alcuni dei metodi più complessi (come la parola-derivazione, IIRC) e dovrebbe essere perfetto per una classe di college senza renderlo inutilmente complesso.

Problemi correlati