2015-10-15 25 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

相关问题