【发布时间】:2012-04-30 06:06:02
【问题描述】:
我正在尝试使用 Weka java API 进行文档分类。
这是我的数据文件的目录结构。
+- text_example
|
+- class1
| |
| 3 html files
|
+- class2
| |
| 1 html file
|
+- class3
|
3 html files
我有使用“TextDirectoryLoader”创建的“arff”文件。然后我在创建的 arff 文件上使用StringToWordVector 过滤器和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所指的词(token)?
如何降低特征向量的维数?我们不需要使所有特征向量的大小相同吗? (比如只考虑训练集中最常见的 100 个词,然后在测试时,只考虑测试文档中出现的那 100 个词。因为,这样如果我们想出一个全新的词会发生什么在测试阶段,分类器会忽略它吗?)。
我在这里遗漏了什么吗?我是 Weka 的新手。
如果有人能解释一下分类器如何使用这个由StringToWordVector 过滤器创建的向量,我真的很感激帮助。 (比如用训练数据创建词汇表,降维,这些都是在 Weka 代码中发生的吗?)
【问题讨论】:
标签: java text machine-learning classification weka