1

私は、Google App Engine (Eclipse を使用) で WEKA [1] を一部に使用するアプリケーションを構築しています。このアプリは ARFF ベースをロードする必要がありますが、それで問題ありません。これらのベースがあるディレクトリは、プロジェクトのルート ディレクトリにあります。次の行は、ベースのロードを担当します。

1. DataSource source;
2. source = new DataSource("bases/iris.arff");
3. Instances trainInstances = source.getDataSet();
4. trainInstances.setClassIndex(trainInstances.numAttributes() - 1);

上記の行は、アプリケーションの実行を担当するサーブレットで呼び出されるコードの一部です。サーブレットは正常に実行されますが、「ソース」変数が arff ファイルを読み取れないため、3 行目で次の例外が発生します。

「java.io.IOException: ソースが指定されていません weka.core.converters.ArffLoader.getDataSet(ArffLoader.java:1003)」

[2] によると、

次の場所にある場合、アプリケーションの一部としてアップロードされたファイルから読み取ることができます。 )

私はこの2つのポイントに従いましたが、成功しませんでした。2番目のものに対して、私の構成は次のとおりです。

<resource-files>
    <include path="/bases/**.arff" />
</resource-files>

この長い歴史を踏まえて、私はあなたに尋ねます:ARFFベースをロードできるようにするために、「ベース」ディレクトリをどこかに置くか、GAE xmlファイルまたはEclipseで何かを構成する方法はありますか?


参考文献

[1] www.cs.waikato.ac.nz/ml/weka/

[2] https://developers.google.com/appengine/kb/java#readfile

4

1 に答える 1

0

あなたの問題は、Web アプリケーション環境でのリソースのロードに関するものです。Web アプリケーション環境でのリソースのロードに関する stackoverflowの追加 リソース。

arff ファイルを source-src ディレクトリに置きます。アプリケーションをコンパイルすると、このディレクトリの下のファイルが web-inf/classes ディレクトリにコピーされます。

見るプロジェクト エクスプローラー

war ファイルを作成すると、それらがどこにコピーされているかがわかります。見る(輸出 - 戦争)

Arff ファイルが Web アーカイブ ファイル (war ファイル) に含まれていることを確認した後。それに適切なパスを使用できます。以下のように。String コンストラクターではなく、 InputStream コンストラクターを使用する必要があります。

InputStream stream = getServletContext().getResourceAsStream("WEB-INF/classes/iris.arff");
DataSource source = new DataSource(stream);

シンプルな Web アプリケーション プロジェクトでこれを試しましたが、動作します。私のコードは以下の通りです。

deneme.jsp

<%
InputStream stream = getServletContext().getResourceAsStream("WEB-INF/classes/iris.arff");
String summary = LoadArffFile.loadArffFileAndFindSummary(stream );

out.println(summary);

%>

LoadArffFile.java

public static String loadArffFileAndFindSummary( InputStream stream)
{

     DataSource source = new  DataSource(stream);
     String summary = null;
    try {
        summary = source.getStructure().toSummaryString();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     return summary;
}

tomcat で出力します。

Relation Name: iris Num Instances: 0 Num Attributes: 5 Name Type Nom Int Real Missing Unique Dist 1 sepallength Num 0% 0% 0% 0 / 0% 0 / 0% 0 2 sepalwidth Num 0% 0% 0% 0 / 0% 0 / 0% 0 3 petallength Num 0% 0% 0% 0 / 0% 0 / 0% 0 4 petalwidth Num 0% 0% 0% 0 / 0% 0 / 0% 0 5 class Nom 0% 0% 0% 0 / 0% 0 / 0% 0 
于 2012-07-04T21:02:46.830 に答える