Стандартный анализатор - Apache Lucene

Я на самом деле разрабатываю систему, в которой вы вводите некоторые текстовые файлы в StandardAnalyzer, и содержимое этого файла затем заменяется выводом StandardAnalyzer (который токенизирует и удаляет все стоп-слова). Код, который я разработал до сих пор:

    File f = new File(path);

    TokenStream stream = analyzer.tokenStream("contents", 
            new StringReader(readFileToString(f)));

    CharTermAttribute charTermAttribute = stream.getAttribute(CharTermAttribute.class);

        while (stream.incrementToken()) {
            String term = charTermAttribute.toString();
            System.out.print(term);
        }

           //Following is the readFileToString(File f) function
     StringBuilder textBuilder = new StringBuilder();
     String ls = System.getProperty("line.separator");
     Scanner scanner = new Scanner(new FileInputStream(f));

     while (scanner.hasNextLine()){
          textBuilder.append(scanner.nextLine() + ls);
      }
      scanner.close();
    return textBuilder.toString();

ReadFileToString (f) - простая функция, которая преобразует содержимое файла в строковое представление. Вывод, который я получаю, это слова, каждое из которых удалено с пробелами или новой строкой. Есть ли способ сохранить исходные пробелы или символы новой строки после вывода из анализатора, чтобы я мог заменить исходное содержимое файла фильтрованным содержимым StandardAnalyzer и представить его в читаемой форме?

1 ответ

Токенайзеры сохраняют термин "позиция", поэтому теоретически вы можете посмотреть на позицию, чтобы определить, сколько символов находится между каждым токеном, но они не сохраняют данные, которые были между токенами. Таким образом, вы можете вернуть пробелы, но не переводы строки.

Если вы знакомы с JFlex, вы можете модифицировать токенизатор так, чтобы новые строки воспринимались как токен. Это, вероятно, сложнее, чем любая выгода от этого.

Другие вопросы по тегам