我正在尝试使用 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 文件夹中的第三个 html 文件中,由整数 32 标识的单词出现了 5 次。只是为了看看我如何获得 32 引用的单词(令牌)?
如何降低特征向量的维数?我们不需要使所有特征向量的大小相同吗?(比如只考虑训练集中最常见的 100 个词,然后在测试时,只考虑测试文档中出现的那 100 个词。因为,这样如果我们想出一个全新的词会发生什么在测试阶段,分类器会忽略它吗?)。
我在这里错过了什么吗?我是 Weka 的新手。
如果有人可以向我解释分类器如何使用通过StringToWordVector
过滤器创建的这个向量,我也非常感谢您的帮助。(比如使用训练数据创建词汇表,降维,这些是否发生在 Weka 代码中?)