【问题标题】:How to load separate textual attributes in weka TextDirectoryLoader?如何在 weka TextDirectoryLoader 中加载单独的文本属性?
【发布时间】:2017-10-28 14:47:09
【问题描述】:

我正在使用Weka的JAVA API根据不同的文本特征对文档进行分类。使用TextDirectoryLoader 类时,我可以加载包含一些文本的txt 文件的目录,将文本转换为数字特征,然后对实例进行分类。问题是该文本将由数据集中的单个字符串特征表示。

例如:

TextDirectoryLoader loader = new TextDirectoryLoader();
loader.setDirectory(new File(dataDir));

Instances dataRaw = loader.getDataSet();

StringToWordVector filter = new StringToWordVector();
filter.setInputFormat(dataRaw);
Instances dataFiltered = Filter.useFilter(dataRaw, filter);

'dataRaw' 将包含一个属性是文本和一个属性是类(派生自目录分类法):System.out.println( dataRaw.numAttributes()); // outputs 2

是否可以将文本分隔到原始 txt 文件中(例如使用分隔符?),以便加载不同的文本属性而不是一个?

一种选择是在之后插入一些新属性,例如:

dataRaw.insertAttributeAt(new Attribute("attr2", (FastVector) null), dataRaw.numAttributes());
for (int i = 0; i < dataRaw.numInstances(); i++) {
        dataRaw.instance(i).setValue(2, "sometext");
}

或者创建一个 arff 文件,例如:

@relation whatever

@attribute attr1 String

@attribute attr2 String

...

有没有什么办法可以通过'TextDirectoryLoader'来实现上述设置?提前致谢!

【问题讨论】:

    标签: java machine-learning weka text-classification


    【解决方案1】:

    加载文件并以[textString, classLabel] 的形式创建数据集后,您可以使用stringToWordVector() 过滤器处理该字符串属性,该过滤器为您在初始字符串中存在或不存在的每个单词创建一个新属性->[word0, word1,...wordN, classLabel]。这样,您可以进一步处理更新的数据集或直接执行选择的任务(聚类、分类等)。

    为了澄清,上述过滤器将您的文本字符串分解为一组单词计数(或频率),适用于数据挖掘任务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 2019-05-07
      • 2011-11-11
      • 2012-07-22
      • 2017-12-16
      • 1970-01-01
      • 2014-09-17
      相关资源
      最近更新 更多