Ява- полный текст инвертированный индекс - PullRequest
0 голосов
/ 14 ноября 2018

Я работаю над простым полнотекстовым инвертированным индексом, пытаясь создать индекс слов, которые я извлекаю из файлов PDF.Я использую библиотеку PDFBox для достижения этой цели.

Однако я хотел бы знать, как определить определение слова для индексации. Способ, которым работает моя индексация, состоит в том, что каждое слово с пробелом - это слово-токен.Например,

This string, is a code.

В этом случае: индексная таблица будет содержать

This
string,
is
a
code.

Недостаток здесь для типа string,, он идет с запятой, где я думаю string было бы просто достаточно, потому что никто не ищет string, или code.

Возвращаясь к моему вопросу, есть ли там особое правило, которое я мог бы использовать, чтобы определить свой токен слова таким образом, чтобы предотвратить подобные проблемы?с чем у меня?

код:

File folder = new File("D:\\PDF1");
File[] listOfFiles = folder.listFiles();

for (File file : listOfFiles) {
   if (file.isFile()) {
      HashSet<String> uniqueWords = new HashSet<>();
      String path = "D:\\PDF1\\" + file.getName();
      try (PDDocument document = PDDocument.load(new File(path))) {    
          if (!document.isEncrypted()) {    
             PDFTextStripper tStripper = new PDFTextStripper();
             String pdfFileInText = tStripper.getText(document);
             String lines[] = pdfFileInText.split("\\r?\\n");
             for(String line : lines) {
                String[] words = line.split(" ");    
                for (String word : words) {
                    uniqueWords.add(word);   
                }

             }                            
          }
       } catch (IOException e) {
         System.err.println("Exception while trying to read pdf document - " + e);
       }
   }
}

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Да.Вы можете использовать метод replaceAll, чтобы избавиться от несловесных символов, таких как:

uniqueWords.add(word.replaceAll("([\\W]+$)|(^[\\W]+)", "")); 
0 голосов
/ 14 ноября 2018

Если вы хотите удалить все знаки препинания, вы можете сделать:

for(String word : words) {
    uniqueWords.add(word.replaceAll("[.,!?]", ""));
}

Что заменит все точки, запятые, восклицательные знаки и вопросительные знаки.


Если вы также хотите избавиться от кавычек, вы можете сделать:

uniqueWords.add(word.replaceAll("[.,?!\"]", "")
...