1

私は実際に、いくつかのテキストファイルを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のフィルター処理された内容に置き換えて、読み取り可能な形式で表示できるようにする方法はありますか?

4

1 に答える 1

0

トークナイザーは用語の位置を保存するため、理論的には位置を見て各トークン間に何文字あるかを判断できますが、トークン間にあったデータは保存しません。したがって、スペースを戻すことはできますが、改行はできません。

JFlex に慣れている場合は、改行をトークンとして扱うようにトークナイザーを変更できます。それはおそらくあなたがそれから得られるどんな利益よりも難しいでしょう.

于 2012-01-11T22:35:11.267 に答える