php nlp data-mining nltk weka

Minería de textos con PHP



nlp data-mining (6)

Estoy haciendo un proyecto para una clase universitaria que estoy tomando.

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

Sin embargo, no puedo encontrar ninguna biblioteca de PHP que me ayude a realizar 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 la línea de comandos desde PHP), pero no parece tan eficiente.

¿Tienes alguna idea de qué debo usar para este proyecto? ¿O debería simplemente cambiar a Python?

Gracias


Hace un tiempo hice un proyecto muy similar: solo clasifiqué las noticias RSS en lugar de Twitter, también usé PHP para el front-end y WEKA para el back-end. Utilicé PHP / Java Bridge, que fue relativamente fácil de usar: un par de líneas agregadas a su código Java (WEKA) y le permite a su PHP llamar a sus métodos. Aquí hay un ejemplo del código del lado de PHP de su sitio web:

<?php require_once("http://localhost:8087/JavaBridge/java/Java.inc"); $world = new java("HelloWorld"); echo $world->hello(array("from PHP")); ?>

Luego (como alguien ya ha mencionado), solo necesita filtrar las palabras de parada. Mantener un archivo de texto para esto es bastante útil para agregar nuevas palabras (tienden a acumularse cuando comienzas a filtrar palabras irrelevantes y cuentas errores tipográficos).

El modelo de naive-bayes tiene fuertes suposiciones de características independientes, es decir, no tiene en cuenta las palabras que normalmente están emparejadas (como un idioma o frase), simplemente toma cada palabra como un evento independiente. Sin embargo, puede superar a algunos de los métodos más complejos (como la combinación de palabras, IIRC) y debería ser perfecto para una clase universitaria sin que sea innecesariamente complejo.




Si va a utilizar un clasificador Naive Bayes, realmente no necesita un montón de procesamiento de NL. Todo lo que necesitará es un algoritmo para eliminar las palabras en los tweets y, si lo desea, eliminar las palabras vacías.

Los algoritmos de selección abundan y no son difíciles de codificar. Eliminar palabras de parada es solo una 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.


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


También puedes usar thrift o gearman para lidiar con nltk