2010-05-06 2 views
22

Я делаю проект для колледжа, который я беру.Обработка текста с PHP

Я использую PHP для создания простого веб-приложения, которое классифицирует твиты как «позитивные» (или счастливые) и «негативные» (или печальные) на основе набора словарей. Алгоритм, о котором я сейчас думаю, - это классификатор Naive Bayes или дерево решений.

Однако я не могу найти какую-либо библиотеку PHP, которая помогла бы мне сделать серьезную обработку языка. Python имеет NLTK (http://www.nltk.org). Есть ли что-то подобное для PHP?

Я планирую использовать WEKA в качестве задней части веб-приложения (вызывая Weka в командной строке из PHP), но это не кажется эффективным.

Вы знаете, что я должен использовать для этого проекта? Или я должен просто переключиться на Python?

Благодаря

+2

Наивные байесовские классификаторы не очень трудно написать самостоятельно, если вы понимаете основные принципы. На самом деле вы могли бы сделать все на PHP. San Jacinto уже охватил все, что я сказал бы о части НЛП. Еще одна вещь, которую я могу рассказать вам из аналогичного проекта, который я сделал всего пару недель назад, - это то, что классификация чувств с использованием стандартного подхода с мешком слов на самом деле не очень хорошо работает. Я не пробовал ничего, как n-граммы, хотя ... У меня есть ощущение, что они будут работать лучше, но, конечно, это даст вам массу дополнительных измерений ... –

+0

Нет никаких указаний ни в ваших пост или тот, с которым вы связаны, почему это подходящее решение. –

+0

PEAR's Text_LanguageDetect может идентифицировать 52 человеческих языка из образцов текста и возвращать оценки доверия для каждого. Разве это не интересный вариант? – nuqqsa

ответ

9

Если вы собираетесь использовать наивный байесовский классификатор, вы на самом деле не нужна целая тонна NL обработки. Все, что вам понадобится, это алгоритм, чтобы остановить слова в твитах, и если хотите, удалите стоп-слова.

Алгоритмы стробирования изобилуют и не сложны для кодирования. Удаление стоп-слов - это вопрос поиска хэш-карты или чего-то подобного. Я не вижу оправдания переключать вашу платформу разработки, чтобы разместить NLTK, хотя это очень хороший инструмент.

2

Вы также можете использовать API uClassify, чтобы сделать что-то похожее на Naive Bayes. Вы в основном обучаете классификатор, как и с любым алгоритмом (за исключением того, что вы делаете это через веб-интерфейс или отправляете XML-документы в API). Затем, когда вы получаете новый твит (или пакет твитов), вы вызываете API, чтобы он классифицировал их. Это быстро, и вам не нужно беспокоиться о его настройке. Конечно, это означает, что вы теряете гибкость, которую вы получаете, контролируя сам классификатор, но это также означает, что вам не нужно работать, если это само по себе не является целью проекта класса.

0

вы также можете использовать бережливость или Gearman иметь дело с NLTK

1

Попробуйте открытый Calais - http://viewer.opencalais.com/. Он имеет api, классы PHP и многие другие. Кроме того, LingPipe для этой задачи - http://alias-i.com/lingpipe/index.html

+0

Первый - это веб-интерфейс, а не библиотека (_if_ есть библиотека, также укажите ссылку на это). Последний является библиотекой, но для Java, а не PHP. – jogojapan

5

Я сделал очень похожий проект некоторое время назад - только классифицировал новостные статьи RSS вместо twitter - также используя PHP для front-end и WEKA для внешнего сервера. Я использовал , который был относительно прост в использовании - несколько строк, добавленных в ваш код Java (WEKA), и это позволяет вашему PHP вызывать его методы. Вот пример PHP-кода на стороне с их сайта:

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

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

Тогда (как кто-то уже упоминалось), вам просто нужно отфильтровать стоп-слова. Хранение txt-файла для этого довольно удобно для добавления новых слов (они, как правило, накапливаются, когда вы начинаете отфильтровывать нерелевантные слова и учитывать опечатки).

Модель наивных байков имеет сильные независимые предположения, т. Е. Не учитывает слова, которые обычно сопряжены (например, идиома или фраза) - просто принимая каждое слово как независимое событие. Тем не менее, он может превзойти некоторые из более сложных методов (например, word-stemming, IIRC) и должен быть идеальным для класса колледжа, не делая его излишне сложным.

Смежные вопросы