2016-11-28 6 views
0

私はApache cTAKESを使用しています。出力はJSONで必要です。私がしようとしているGoogleのgsonここでは、UIMAでJSON形式で出力する

public static void main(final String... args) throws IOException, UIMAException, SAXException { 
    final String note = "Serum Cholesterol 154 150 250 mgs/dl\n-\nSerum Triglycerides 67 90 200 mgs /dl\n-\nSerum HDL: Cholesterol 38 35 55 mgs /dl\n-\nSerum LDL: Cholesterol 49 85 150 mgs/d1\n-\nSerum VLDL: Cholesterol 13 10 40 mgs/dl\n-\nTotal Cholesterol/HDL Ratio: 3.90\"; 
    final JCas jcas = JCasFactory.createJCas(); 
    jcas.setDocumentText(note); 

    final AnalysisEngineDescription aed = getFastPipeline(); 
    SimplePipeline.runPipeline(jcas, aed); 

    Collection<TOP> codes = JCasUtil.selectAll(jcas); 
    List<TOP> list = new ArrayList<>(codes) 

    TOP [] res = list.toArray(new TOP[list.size()]); 
// System.out.println(Arrays.toString(res)); 
    String json = new Gson().toJson(res); 
    System.out.println(json); 

} 

これは、次のエラーで返され、

Exception in thread "main" java.lang.IllegalArgumentException: class org.apache.uima.jcas.tcas.DocumentAnnotation_Type declares multiple JSON fields named fsGenerator 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:122) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:72) 
at com.google.gson.Gson.getAdapter(Gson.java:353) 
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) 
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) 
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
at com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93) 
at com.google.gson.Gson.toJson(Gson.java:586) 
at com.google.gson.Gson.toJson(Gson.java:565) 
at com.google.gson.Gson.toJson(Gson.java:520) 
at com.google.gson.Gson.toJson(Gson.java:500) 
at org.apache.ctakes.clinicalpipeline.ExtractNEs.main(ExtractNEs.java:146) 

どれガイダンスは大きな助けになるでしょう。 おかげ

+0

「TOP」とは何ですか?与えられた例外メッセージで、多分これは助けます:http://stackoverflow.com/questions/16476513/class-a-declares-multiple-json-fields – PeterMmm

+0

TOPはorg.apache.uima.jcas.cas.TOP – monsy

答えて

1

私はこの見つかり答えは1つのパラメータがCASのドキュメントであり、他の作家である方法 static void jsonSerialize(CAS aCAS, Object output) を、持っているJsonCasSerializerを、使用することです。

私の更新されたコードは、

public static void main(final String... args) throws IOException, UIMAException, SAXException { 
    final String note = "Serum Cholesterol 154 150 250 mgs/dl\n-\nSerum Triglycerides 67 90 200 mgs /dl\n-\nSerum HDL: Cholesterol 38 35 55 mgs /dl\n-\nSerum LDL: Cholesterol 49 85 150 mgs/d1\n-\nSerum VLDL: Cholesterol 13 10 40 mgs/dl\n-\nTotal Cholesterol/HDL Ratio: 3.90\"; 
    final JCas jcas = JCasFactory.createJCas(); 
    jcas.setDocumentText(note); 

    final AnalysisEngineDescription aed = getFastPipeline(); 
    SimplePipeline.runPipeline(jcas, aed); 
    CAS cas = jcas.getCas(); 
    JsonCasSerializer jcs = new JsonCasSerializer(); 
    jcs.setPrettyPrint(true); // do some configuration 
    StringWriter sw = new StringWriter(); 
    jcs.serialize(cas, sw); // serialize into sw 

    System.out.println(sw.toString()); 

は、これは私にJSONでドキュメントの出力を与えました。

明確な使用方法はhereです。

+0

でした上記のコードに従いますが、次のエラーが発生しています: '例外のスレッド" main "java.lang.IllegalArgumentException:URIが階層的ではありません。 これはCTakes 4.0.0にネイティブかもしれません - これはどのバージョンが実行されたか知っていますか? – mongolol

+0

使用されているバージョンは** 3.2.3 **です。エラーが発生している場合は、より具体的にする必要があります。同様のエラーは、jarファイル内のlvg.propertiesにアクセスして、このhttps://issues.apache.org/jira/browse/CTAKES-385を参照してみてください。 – monsy

関連する問題