Weka Java API を使用して文書分類を行おうとしています。
これが私のデータファイルのディレクトリ構造です。
+- text_example
|
+- class1
| |
| 3 html files
|
+- class2
| |
| 1 html file
|
+- class3
|
3 html files
「TextDirectoryLoader」で作成された「arff」ファイルがあります。次にStringToWordVector
、作成した arff ファイルにフィルターを使用しますfilter.setOutputWordCounts(true)
。
以下は、フィルターが適用された後の出力のサンプルです。私はいくつかのことを明確にする必要があります。
@attribute </form> numeric
@attribute </h1> numeric
.
.
@attribute earth numeric
@attribute easy numeric
この膨大なリストは、最初の html ファイルの内容をトークン化する必要があります。右?
で、〜がある、
@data
{1 2,3 2,4 1,11 1,12 7,..............}
{10 4,34 1,37 5,.......}
{2 1,5 6,6 16,...}
{0 class2,34 11,40 15,.....,4900 3,...
{0 class3,1 2,37 3,40 5....
{0 class3,1 2,31 20,32 17......
{0 class3,32 5,42 1,43 10.........
最初の 3 つの項目にクラス属性がないのはなぜですか? (class1 が必要です)。{0 class2,..}、{0 class3..} のように先頭の 0 は何を意味しますか。たとえば、class3 フォルダの 3 番目の html ファイルには、整数 32 で識別される単語が 5 回出現することが示されています。32 によって参照される単語 (トークン) を取得するにはどうすればよいですか?
特徴ベクトルの次元を減らすにはどうすればよいですか? すべての特徴ベクトルを同じサイズにする必要はありませんか? (たとえば、トレーニング セットから最も頻繁に使用される 100 の単語だけを考えて、後でテストするときに、テスト ドキュメントでそれら 100 の単語だけが出現することを考えます。テスト段階では、分類器はそれを無視しますか?)。
ここで何か不足していますか?私はWekaが初めてです。
StringToWordVector
また、分類子がフィルターで作成されたこのベクトルをどのように使用するかを誰かが説明してくれれば、本当に助かります。(トレーニング データを使用した語彙の作成、次元削減など、これらは Weka コード内で行われますか?)