2010-05-06 25 views
22

Je fais un projet pour un cours de niveau collégial que je prends. J'utilise PHP pour créer une application web simple qui classifie les tweets comme "positifs" (ou heureux) et "négatifs" (ou tristes) basés sur un ensemble de dictionnaires. L'algorithme auquel je pense en ce moment est le classificateur Naive Bayes ou l'arbre de décision.Text mining avec PHP

Cependant, je ne trouve aucune bibliothèque PHP qui m'aide à faire un traitement de langage sérieux. Python a NLTK (http://www.nltk.org). Y a-t-il quelque chose comme ça pour PHP?

Je prévois d'utiliser WEKA comme back-end de l'application web (en appelant Weka en ligne de commande depuis PHP), mais cela ne semble pas très efficace.

Avez-vous une idée de ce que je devrais utiliser pour ce projet? Ou devrais-je simplement passer à Python?

Merci

+2

classificateurs bayésiens Naive ne sont pas vraiment difficiles à écrire vous-même si vous comprenez les principes de base. Vous pouvez réellement faire tout en PHP de cette façon. San Jacinto a déjà couvert tout ce que j'aurais dit à propos de la partie PNL. Une autre chose que je peux vous dire d'un projet similaire que j'ai réalisé il y a quelques semaines, c'est que la classification des sentiments utilisant l'approche standard des mots-clés ne fonctionne pas très bien. Je n'ai pas essayé quelque chose comme des n-grammes, cependant ... J'ai le sentiment qu'ils fonctionneraient mieux, mais bien sûr cela vous donnerait des tonnes de dimensions supplémentaires ... –

+0

Il n'y a aucune indication que ce soit dans votre poste ou celui que vous avez lié à pourquoi c'est une solution appropriée. –

+0

Text_LanguageDetect de PEAR peut identifier 52 langues humaines à partir d'échantillons de texte et renvoyer des scores de confiance pour chacun. N'est-ce pas une option intéressante à prendre en compte? – nuqqsa

Répondre

9

Si vous allez utiliser un classificateur Naive Bayes, vous ne vraiment pas besoin d'une tonne de traitement tout NL. Tout ce dont vous aurez besoin est un algorithme pour endiguer les mots dans les tweets et si vous le souhaitez, supprimez les mots d'arrêt.

Les algorithmes d'échantillonnage abondent et ne sont pas difficiles à coder. Suppression des mots d'arrêt est juste une question de recherche d'une carte de hachage ou quelque chose de similaire. Je ne vois pas de raison de changer votre plate-forme de développement pour accueillir le NLTK, bien que ce soit un très bon outil.

2

Vous pouvez également utiliser l'API uClassify pour faire quelque chose de similaire à Naive Bayes. Vous formez essentiellement un classificateur comme vous le feriez avec n'importe quel algorithme (sauf ici que vous le faites via l'interface web ou en envoyant des documents xml à l'API). Ensuite, chaque fois que vous obtenez un nouveau tweet (ou un lot de tweets), vous appelez l'API pour le classer. C'est rapide et vous n'avez pas à vous soucier de l'accorder. Bien sûr, cela signifie que vous perdez la flexibilité que vous obtenez en contrôlant le classificateur vous-même, mais cela signifie également moins de travail pour vous si ce n'est pas le but du projet de classe.

0

vous pouvez également utiliser Thrift ou gearman pour traiter NLTK

5

J'ai fait un projet très similaire il y a quelques temps - classer uniquement les nouvelles RSS au lieu de Twitter - en utilisant aussi PHP pour le front-end et WEKA pour le back-end. J'ai utilisé PHP/Java Bridge qui était relativement simple à utiliser - quelques lignes ajoutées à votre code Java (WEKA) et cela permet à votre PHP d'appeler ses méthodes. Voici un exemple du code PHP côté de leur site web:

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

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

Ensuite (comme on l'a déjà mentionné), il vous suffit de filtrer les mots d'arrêt. Garder un fichier txt pour cela est très pratique pour ajouter de nouveaux mots (ils ont tendance à s'empiler lorsque vous commencez à filtrer les mots non pertinents et les fautes de frappe). Le modèle naïf-bayes a de fortes hypothèses de caractéristiques indépendantes, c'est-à-dire qu'il ne tient pas compte des mots qui sont couramment appariés (comme un idiome ou une phrase) - en prenant simplement chaque mot comme une occurrence indépendante. Cependant, il peut surpasser certaines des méthodes plus complexes (telles que le mot-stemming, IIRC) et devrait être parfait pour une classe de collège sans le rendre inutilement complexe.