23

私が取っている大学のクラスのプロジェクトをやっています。

PHP を使用して、一連の辞書に基づいてツイートを "ポジティブ" (またはハッピー) と "ネガティブ" (または悲しい) に分類する単純な Web アプリを作成しています。私が今考えているアルゴリズムは、単純ベイズ分類器または決定木です。

しかし、本格的な言語処理を行うのに役立つ PHP ライブラリーが見つかりません。Python には NLTK ( http://www.nltk.org ) があります。PHPにそのようなものはありますか?

Web アプリのバックエンドとして (PHP 内からコマンド ラインで Weka を呼び出して) WEKA を使用する予定ですが、効率的ではないようです。

このプロジェクトに何を使用すればよいか分かりますか? それとも Python に切り替える必要がありますか?

ありがとう

4

6 に答える 6

9

Naive Bayes 分類器を使用する場合、大量の NL 処理は実際には必要ありません。必要なのは、ツイート内の単語をステミングし、必要に応じてストップ ワードを削除するアルゴリズムだけです。

ステミング アルゴリズムは数多くあり、コーディングも難しくありません。ストップ ワードを削除するには、ハッシュ マップなどを検索するだけです。NLTK は非常に優れたツールですが、NLTK に対応するために開発プラットフォームを切り替える正当な理由はありません。

于 2010-05-06T17:30:57.303 に答える
5

私は少し前に非常によく似たプロジェクトを行いました - Twitter の代わりに RSS ニュース項目のみを分類し、フロントエンドに PHP を使用し、バックエンドに WEKA を使用しました。私は比較的使いやすいPHP/Java Bridgeを使用しました。Java (WEKA) コードに数行追加するだけで、PHP はそのメソッドを呼び出すことができます。以下は、彼らの Web サイトの PHP 側のコードの例です。

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

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

次に (誰かが既に述べたように)、ストップ ワードを除外する必要があります。このための txt ファイルを保持しておくと、新しい単語を追加するのに非常に便利です (無関係な単語を除外し、タイプミスを考慮し始めると、単語が山積みになる傾向があります)。

ナイーブ ベイズ モデルには、強力な独立した機能の仮定があります。つまり、一般的にペアになっている単語 (イディオムやフレーズなど) を考慮せず、各単語を独立した出現としてのみ使用します。ただし、より複雑な方法 (単語ステミング、IIRC など) よりも優れているため、必要以上に複雑にすることなく、大学の授業に最適です。

于 2012-01-26T20:04:01.557 に答える
2

uClassify API を使用して Naive Bayes と同様のことを行うこともできます。基本的には、他のアルゴリズムと同じように分類子をトレーニングします (ただし、ここでは Web インターフェースを介して行うか、xml ドキュメントを API に送信することによって行います)。次に、新しいツイート (または一連のツイート) を取得するたびに、API を呼び出してそれらを分類します。高速で、チューニングについて心配する必要はありません。もちろん、これは、分類器を自分で制御することで得られる柔軟性を失うことを意味しますが、それ自体がクラス プロジェクトの目標でない場合は、作業が少なくなることも意味します。

于 2010-05-07T12:06:01.147 に答える
1

このライブラリを確認できますhttps://github.com/Dachande663/PHP-分類子は非常に簡単です

于 2013-03-11T22:03:00.417 に答える
1

open calais を試してください - http://viewer.opencalais.com/。API、PHP クラスなどがあります。また、このタスクの LingPipe - http://alias-i.com/lingpipe/index.html

于 2012-01-26T07:46:22.110 に答える
0

thrift や gearman を使用して nltk に対処することもできます

于 2011-07-21T07:54:38.320 に答える