2010-05-06 16 views
22

Estoy haciendo un proyecto para una clase de la universidad que estoy tomando.Minería de texto con PHP

Estoy usando PHP para crear una aplicación web simple que clasifique los tweets como "positivos" (o felices) y "negativos" (o tristes) según un conjunto de diccionarios. El algoritmo en el que estoy pensando ahora es el clasificador Naive Bayes o el árbol de decisiones.

Sin embargo, no puedo encontrar ninguna biblioteca de PHP que me ayude a hacer un procesamiento de lenguaje serio. Python tiene NLTK (http://www.nltk.org). ¿Hay algo así para PHP?

Estoy planeando usar WEKA como el back-end de la aplicación web (llamando a Weka en línea de comandos desde PHP), pero no parece tan eficiente.

¿Tiene alguna idea de lo que debería usar para este proyecto? ¿O debería cambiar a Python?

Gracias

+2

clasificadores bayesianos Naive no son realmente difícil escribir usted mismo si usted entiende los principios básicos. En realidad, puedes hacer todo en PHP de esa manera. San Jacinto ya cubrió todo lo que hubiera dicho sobre la parte PNL. Otra cosa que puedo decirte de un proyecto similar que hice hace un par de semanas es que la clasificación de sentimientos usando el enfoque estándar de bolsa de palabras en realidad no funciona muy bien. Sin embargo, no probé nada como n-grams ... Tengo la sensación de que funcionarían mejor, pero por supuesto eso le daría toneladas de dimensiones adicionales ... –

+0

No hay ninguna indicación en ninguno de sus publicar o el que está vinculado a por qué esta es una solución adecuada. –

+0

El Text_LanguageDetect de PEAR puede identificar 52 idiomas humanos a partir de muestras de texto y devolver puntajes de confianza para cada uno. ¿No es esta una opción interesante para tener en cuenta? – nuqqsa

Respuesta

9

Si va a utilizar un clasificador de Bayes ingenuo, que realmente no necesita una tonelada de procesamiento NL. Todo lo que necesitará es un algoritmo para detener las palabras en los tweets y, si lo desea, eliminar palabras de parada.

Los algoritmos de generación de muestras abundan y no son difíciles de codificar. La eliminación de palabras de parada es solo cuestión de buscar un mapa hash o algo similar. No veo una justificación para cambiar su plataforma de desarrollo para acomodar el NLTK, aunque es una herramienta muy buena.

2

También puede usar la API uClassify para hacer algo similar a Naive Bayes. Básicamente entrenas un clasificador como lo harías con cualquier algoritmo (excepto que aquí lo haces a través de la interfaz web o enviando documentos XML a la API). Luego, cada vez que recibe un nuevo tweet (o lote de tweets), llama al API para que lo clasifique. Es rápido y no tienes que preocuparte por ajustarlo. Por supuesto, eso significa que usted pierde la flexibilidad que obtiene al controlar el clasificador usted mismo, pero eso también significa menos trabajo para usted si eso en sí mismo no es el objetivo del proyecto de la clase.

0

también se puede utilizar de segunda mano o gearman para hacer frente a NLTK

5

Hice un proyecto muy similar hace un tiempo - solo clasificando noticias RSS en lugar de Twitter - también usando PHP para el front-end y WEKA para el back-end. Usé PHP/Java Bridge, que era relativamente simple de usar: un par de líneas agregadas a su código Java (WEKA) y que le permite a su PHP llamar a sus métodos. He aquí un ejemplo del código del lado del PHP desde su página web:

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

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

Entonces (como alguien ya ha mencionado), sólo tiene que filtrar las palabras vacías. Mantener un archivo txt para esto es muy útil para agregar palabras nuevas (tienden a acumularse cuando comienzas a filtrar palabras irrelevantes y explican los errores tipográficos).

El modelo naive-bayes tiene fuertes suposiciones de características independientes, es decir, no tiene en cuenta las palabras que comúnmente se combinan (como un modismo o frase), simplemente tomando cada palabra como una ocurrencia independiente. Sin embargo, puede superar algunos de los métodos más complejos (como la derivación de palabras, IIRC) y debe ser perfecto para una clase de la universidad sin hacerla innecesariamente compleja.

Cuestiones relacionadas