2011-05-06 29 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