2011-05-06 26 views
1

我有文本文件如下所示文本文件聚类

例如:

文件1:

 yamaha 
     gladiator 
     bike 

文件2:

 bajaj 
     pulsar 
     bike 

文件3:

 yamaha 
     gladiator 
     india 

我必须单独阅读这些文件并创建群集。就是说,从上面的例子来看,文件1和文件3是相似的,并且会创建一个群集。我希望至少有一个单词在两个文件之间进行匹配以形成群集。所以最后我必须从上面得到两个集群 1:yamaha和2:bajaj。请帮助我这....

+1

你已经做了什么?你有没有想过算法?你有什么问题? – 2011-05-06 07:32:35

+0

在这种情况下,“相似”的确切定义是什么?如果我有两个任意文件,我该如何确定它们是否相似?它是对称的(可能),传递性(可能不)?一旦你定义了算法,实现它可能会非常简单。 – 2011-05-06 07:46:17

+0

如果我有3个文本文件,就像我在ex中给出的那样,并且这两个文件中至少有一个词匹配其中。所以它成为一个集群。 – 2011-05-06 07:53:03

回答

1

听起来像你只需要读取每个文件到Set<String>的单词,然后寻找交点建立你的群集。例如,可以通过将单词映射到出现次数(Map<String, Integer>)或将单词映射到一组文件名(Map<String, Set<String>>)来实现。

不知道你在哪里第二示例集群来源于为“巴贾吉”只存在于文件2

编辑:根据要求解释地图和设置是如何工作的

实例化Maps的地图字符串(字),以一组文件名:

Map<String, Set<String>> wordsToFilenames = new HashMap<String, Set<String>>(); 

添加在文件名中找到这个字(假设我们在一个字从文件到字变量读取,并有文件名的filena我变,两个字符串):

Set<String> filenamesForWord; 

if (wordsToFilenames.containsKey(word)) { 
    filenamesForWord = wordsToFilenames.get(word); 
} 
else { 
    filenamesForWord = new HashSet<String>(); 
    wordsToFilenames.put(word, filenamesForWord); 
} 

filenamesForWord.add(filename); 
+0

我应该如何? – 2011-05-06 07:37:13

+0

你知道如何阅读文本文件吗?你有没有使用过Java的集合类? – 2011-05-06 07:39:10

+0

你知道如何阅读文件。但我不知道如何将它添加到“地图”。我从来没有使用它... – 2011-05-06 07:43:47