Подтвердить что ты не робот

Текстовый поиск с PHP

Я делаю проект для класса колледжа, который я принимаю.

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

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

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

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

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

Недавно я сделал очень похожий проект - только классифицировал новостные ленты RSS вместо twitter - также использовал PHP для front-end и WEKA для фонового. Я использовал PHP/Java Bridge, который был относительно прост в использовании - несколько строк, добавленных в ваш код 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) и должен быть идеальным для класса колледжа, не делая его излишне сложным.

Ответ 3

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

Ответ 6

вы также можете использовать бережливость или редуктор для работы с nltk