2015-10-15 2 views
0

Мне нужно прочитать несколько файлов и проиндексировать каждое слово в файлах. во время индексирования я должен следовать формат:Tokenizing and Indexing many files

Требование ==> слово, {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 

я создал класс «Токен», который содержит слова из разных файлов как «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>, а не список.

Редактировать Для отображения результатов можно перебирать карте или из списка всех маркеров, то список объектов RefCount:

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

Вы можете завершить строку после каждого п-го ид/счет пары.

+0

Я думаю, что это работает. Последняя помощь. Как я могу отобразить все слова с соответствующим идентификатором файла и счетами? Примечание: я помещаю файлы в класс с именем Test и Test, имеет массив List of Token type и Token имеет массив List of RefCount. – radhapiyari

+0

@radhapiyari Это очень просто: вложенная петля - это все, что вам нужно. – laune

+0

Большое спасибо. Это сработало. Я внес некоторые изменения в коды выше, и он ведет себя так, как я хотел. Ты гениальный помощник. Приветствия! – radhapiyari