### 在Integer对象上进行加法操作,从目录中读取多个文件以在Java中创建词袋模型

词袋模型和文档术语矩阵是同一回事吗?

我有一个由许多文件组成的训练数据集。我想将它们全部读取到一个数据结构(哈希映射?)中,以创建特定类别的文档的词袋模型,这些类别可以是科学、宗教、体育或性,作为感知器实现的准备工作。

目前我有最简单的Java I/O结构,即:

    String text;     BufferedReader br = new BufferedReader(new FileReader("file"));    while ((text = br.readLine()) != null)     {        //读取多个文件        //生成一个哈希映射,每个唯一词作为键,        //该词出现的频率作为值    }

所以我想做的是从目录中的多个文件读取输入,并将所有数据保存到一个底层结构中,该如何做呢?我应该将它写到某个文件中吗?

我认为如我在代码注释中描述的哈希映射应该可以工作,基于我对词袋模型的理解。这是正确的吗?我如何实现这样一个东西以与从多个文件读取输入同步?我应该如何存储它,以便以后将其纳入我的感知器算法中?

我见过这样做

  String names = new String[]{"a.txt", "b.txt", "c.txt"};  StringBuffer strContent = new StringBuffer("");  for (String name : names) {      File file = new File(name);       int ch;      FileInputStream stream = null;        try {          stream = new FileInputStream(file);             while( (ch = stream.read()) != -1) {          strContent.append((char) ch);           }      } finally {          stream.close();        }    }

但这是一个蹩脚的解决方案,因为你需要提前指定所有文件,我认为这应该更动态。如果可能的话。


回答:

你可以尝试下面的程序,它是动态的,你只需要提供你的目录路径。

public class BagOfWords {ConcurrentHashMap<String, Set<String>> map = new ConcurrentHashMap<String, Set<String>>();public static void main(String[] args) throws IOException {    File file = new File("F:/Downloads/Build/");    new BagOfWords().iterateDirectory(file);}private void iterateDirectory(File file) throws IOException {    for (File f : file.listFiles()) {        if (f.isDirectory()) {            iterateDirectory(file);        } else {            // 读取文件            // 分割并放入集合中            // 添加到映射中        }    }}

}

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注