4

私の現在のプロジェクトは、自然言語の構文解析に関係しています。1つのテストでは、ファイルからテキストを読み取り、特定の文字を削除し、テキストを1つの単語にトークン化します。テストでは、実際に一意の単語の数を比較します。Eclipseでは、このテストは「緑」です。Mavenでは、予想よりも多くの単語を取得します。単語のリストを比較すると、次の追加の単語が表示されます。

  • 取得銀行⊙s
  • カード⊙s
  • 機関⊙s
  • 発行者⊙s
  • プロバイダー⊙s
  • psam⊙s
  • ⊜from⊝</li>
  • ⊜スロット⊝</li>
  • ⊜to⊝</li>

テキストソースを見ると、フィルターで除外する必要のある次の文字が含まれています。“”'</ p>

これは日食では機能しますが、Mavenでは機能しません。utf-8を使用しています。ファイルは正しくエンコードされているようです。Mavenpomで次のように指定します。

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <org.apache.lucene.version>3.6.0</org.apache.lucene.version>
</properties>

編集:これがファイルを読み取るコードです(Eclipseによれば、UTF-8としてエンコードされています)。

        BufferedReader reader = new BufferedReader(
                new FileReader(this.file));
        String line = "";
        while ((line = reader.readLine()) != null) {
            // the csv contains a text and a classification
            String[] reqCatType = line.split(";");
            String reqText = reqCatType[0].trim();
            String reqCategory = reqCatType[1].trim();
            // the tokenizer also removes unwanted characters:
            String[] sentence = this.filter.filterStopWords(this.tokenizer
                    .tokenize(reqText));
            // we use this data to train a machine learning algorithm
            this.dataSet.learn(sentence, reqCategory);
        }
        reader.close();

編集:次の情報は、問題の分析に役立つ場合があります。

mvn -v
Apache Maven 3.0.3 (r1075438; 2011-02-28 09:31:09-0800)
Maven home: /usr/share/maven
Java version: 1.6.0_33, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.6.8", arch: "x86_64", family: "mac"
4

1 に答える 1

4

したがって、データファイルはUTF-8にあります。実行中のJavaプログラムが意味を解釈する命令になるため、そのファイルのEclipse設定には関係がありません。

FileReaderは常にプラットフォームのデフォルトのエンコーディングを使用しますが、これは一般的に悪い考えです。Eclipseはおそらく「プラットフォームのデフォルト」を設定していますが、Mavenはそうではありません。

コードを修正して、エンコーディングを指定します。

JavaDocを参照してください。

To specify these values yourself, construct an InputStreamReader on a FileInputStream.
于 2012-09-05T05:41:47.257 に答える