2015-10-15 59 views
0

我必須讀取幾個文件併爲文件中的每個單詞編制索引。 而索引我必須遵循的格式:許多文件的標記和索引

要求==>字,{D1,TF1,D2,TF2,D4,TF4},someOtherValue

說明:

  1)word = any word in the files 

     2)d1,d2,d4... are fileId 

     3) tf1,tf2,tf4....are the number of times the word appears 
      in d1,d2,d4 respectievly 

我創建一個「Token」類,它包含來自不同文件的字符串作爲「String token」,它所屬文件的名稱爲「String fileId」,其文件中的頻率爲「Int count」。

我可以輕鬆檢查1個文件中的各種單詞並更新其計數。 我用arrayList來做到這一點。 但是,當相同的單詞出現在另一個文件中時,如何在索引時追加fileId和它的計數。

+0

您是否嘗試創建某種文本搜索應用程序。如果是,那麼你可以看看Lucene,它的索引和搜索部分非常簡單。 – Shailendra

+0

@Shailendra我必須這樣做inn客棧java.thats問題。任何建議? – radhapiyari

+0

如果你的意思是Java語言,那麼Lucene是用Java編寫的。如果您必須在您嘗試實現的基礎上開發完整的文本搜索應用程序,那麼您可以嘗試使用Lucene。 – Shailendra

回答

0

我會創造一個

class RefCount { 
    String fileId; 
    int count; 
    RefCount(fileId){ 
     this.fileId = fileId; 
     count = 1; 
    } 
    void increment(){ 
     count++; 
    } 
    // more... 
} 

和類令牌應該

class Token { 
    String word; 
    List<RefCount> references; 
    ... 

    public void countWord(String fileId){ 
     int last = references.size() - 1; 
     if(last >= 0){ 
      RefCount rc = references.get(last); 
      if(equals(fileId)){ 
       rc.increment(); 
       return; 
      } 
     } 
     references.add(fileId); 
    } 
    // more... 
} 

這是假設你要添加引用的文件,文件,因此只需要進行檢查,以確定是否最後一個文件編號我們仍然在同一個文件中。

您應該使用Map<String,Token>而不是List。

編輯要顯示你可以遍歷地圖或列出所有的令牌,然後引用計數對象的列表結果:

for(Token token: tokenList){ 
    System.out.print(token.getWord() + ":"); 
    for(RefCount refCount: token.getReferences()){ 
     System.out.print(" " + refCount.getFileId() + 
          "*" + refCount.getCount()); 
    } 
    System.out.println(); 
} 

您可能希望終止每個第n個ID後面的線/計數對。

+0

我認爲它有效。最後一個幫助。 如何顯示所有單詞與各自的fileID和數量? 注意:我將一個名爲Test和Test的類中的文件標記爲Token類型列表,並且Token具有RefCount數組列表。 – radhapiyari

+0

@radhapiyari這很簡單:只需要​​一個嵌套循環。 – laune

+0

非常感謝。它的工作。我在上面的代碼中做了一些修改,它的行爲是我想要的。你是天才夥伴。 乾杯! – radhapiyari

相關問題