2016-11-28 2 views
0

Я использую Apache cTAKES, где выход требуется в JSON. Я пытаюсь Google, gson здесь,Получение вывода в формате JSON в UIMA

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 is org.apache.uima.jcas.cas.TOP – monsy

ответ

1

Ответ, который я нашел для этого использовать JsonCasSerializer, который имеет метод static void jsonSerialize(CAS aCAS, Object output) , где один параметр является CAS документ и другой писатель.

Мой обновленный код,

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 **, что касается ошибки, которую вы получаете, вам нужно быть более конкретным, и, насколько я помню, подобная ошибка, которую я получил, заключалась в доступе к lvg.properties в банке, попробуйте передать этот https://issues.apache.org/jira/browse/CTAKES-385 – monsy