在UIMA中以JSON格式获取输出

时间:2021-06-28 14:05:43

I'm using Apache cTAKES where the output is required in JSON. I'm trying google's gson here,

我正在使用Apache cTAKES,其中JSON需要输出。我在这里尝试google的gson,

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);

}

This returns with the following errors,

返回时出现以下错误:

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)

Any guidance would be of great help. Thanks

任何指导都会有很大的帮助。谢谢

1 个解决方案

#1


2  

The answer I found for this is to use JsonCasSerializer, which has a method static void jsonSerialize(CAS aCAS, Object output) ,where one parameter is CAS document and other is a writer.

我找到的答案是使用JsonCasSerializer,它有一个方法static void jsonSerialize(CAS aCAS,Object output),其中一个参数是CAS文档,另一个是writer。

My updated code is,

我的更新代码是,

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());

This gave me an output of the document in JSON.

这给了我JSON文档的输出。

A clear usage is given here.

这里给出了明确的用法。

#1


2  

The answer I found for this is to use JsonCasSerializer, which has a method static void jsonSerialize(CAS aCAS, Object output) ,where one parameter is CAS document and other is a writer.

我找到的答案是使用JsonCasSerializer,它有一个方法static void jsonSerialize(CAS aCAS,Object output),其中一个参数是CAS文档,另一个是writer。

My updated code is,

我的更新代码是,

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());

This gave me an output of the document in JSON.

这给了我JSON文档的输出。

A clear usage is given here.

这里给出了明确的用法。