2012-03-21 57 views
-2

我正在尝试实现文本文件的矢量化......我创建了一个字典(所有文档中的唯一字)......这是在java中实现此目的的最佳方式?文本文件的矢量化

例如 - 我的词典有以下单词 - {w1,w2,w3,w4} 而且我有两个文档,每个文档都有单词在词汇表中的子集。我需要写一个文本文件的矩阵形式 -

1,3,4,0 
0,0,2,1 

这里每一行代表一个文档和值表示文档中的每个词的出现。

你能建议我在Java中实现这个最有效的方法吗?

+0

当然,让我们看看你到目前为止,虽然? – Sid 2012-03-21 17:28:56

+0

我已经将字典单词存储在文本文件中...并且我将文本字符串作为参数传递给函数.... public void createVector(String text)throws IOException {String [] x = tweet.split( “”); \t \t为(列W:X){ \t \t \t而(((V = reader.readLine())= NULL)!){...}}}'我有点困惑,怎么算文本字符串中字典中每个单词出现的次数。 – Fox 2012-03-21 17:34:35

+0

你可以维护一个字典,其中的关键是单词,值是一个计数,每次遇到这个单词时,增加计数。 – Sid 2012-03-21 17:36:44

回答

2
  1. 阅读文本文件中的一个字在同一时间
  2. 检查这个词已经在字典中,如果是增加了计数,
  3. 循环遍历字典输出计数到输出文件。

因为功课标签的我给你的步骤,并没有任何实际的代码(你可以找到如何做到这一切有一个快速谷歌搜索,如果你不知道如何)

+0

谢谢你的帮助 – Fox 2012-03-21 17:36:53

+0

基本上你的字典是用设置的,每次你找到那个单词都会增加。 – jzworkman 2012-03-21 17:39:23

1

尝试使用HashMap将每个单词映射到矢量中该单词的位置。然后可以通过为矢量创建一个int []来构造每一行,遍历所有单词,查找映射中每个单词的位置并增加相应的项目。

HashMap<String, Integer> dict = new ... // Map word to position 
for (String[] doc: docs) { 
    int vector[VECTOR_SIZE] = new .... 
    for (String word: doc) { 
     vector[dict.get(word)]++; 
    } 
    // Print vector 
} 
+0

为什么使用一个单独的数组而不是只保留地图中的计数?与索引有一个映射只是多余的,而不是有一个映射到计数。 – jzworkman 2012-03-21 17:50:20