Стандартный анализатор - Apache Lucene - PullRequest
1 голос
/ 11 января 2012

Я на самом деле разрабатываю систему, в которой вы вводите некоторые текстовые файлы в 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 Ответ

0 голосов
/ 12 января 2012

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

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

...