Weka API:使用 StringToWordVector 创建 TDM

Weka API: Creating a TDM using StringToWordVector

我有以下代码:

 ArrayList<Attribute> attributes = new ArrayList<>()
    attributes.add(new Attribute("tweet", true))

    ArrayList<String> theLines = new ArrayList<>()
    File cleanestTweets = new File("cleanestTweets.txt")
    File savedResults = new File("savedResults.arff")
    Instances instances

    try {

        Scanner console = new Scanner(cleanestTweets)

        while (console.hasNextLine()) {

            String line = console.nextLine()

                theLines.add(theLine)

        }

        Instance ins = new DenseInstance(1)
        instances = new Instances("TwitterData", attributes, theLines.size())
        theLines.each { it ->
            ins.setValue(attributes[0], it)
            instances.add(ins)
        }

        StringToWordVector filter = new StringToWordVector()
        filter.setInputFormat(instances)
        filter.setOutputWordCounts(true)
        filter.setTFTransform(true)
        filter.setDictionaryFileToSaveTo(savedResults)
        filter.getDictionaryFileToSaveTo()


    } catch (IOException e) {

    }

创建实例的代码工作正常。然后我试图创建一个 TDM 并将其写到 savedResults.txt。当 运行 代码时,没有任何内容写入 savedResults.txt。我不完全确定为什么。我已经阅读了 documentation 但它没有提及任何内容。

    StringToWordVector filter = new StringToWordVector()
    filter.setInputFormat(instances)
    filter.setDictionaryFileToSaveTo(savedResults)
    filter.setOutputWordCounts(true)
    filter.setTFTransform(true)
    Instances dataFiltered = weka.filters.Filter.useFilter(instances, filter)

这确实会把单词及其出现的地方写到文件中。看起来您必须创建新实例并明确说明要使用过滤器。我用this question得出这个结论。