//*********************************************************************** // main function for outputing the graph //*********************************************************************** void AnnotationGraphXmlDumper::dump( std::ostream& os, const AnnotationGraph* graph, const AnnotationData& annotationData) const { DumpGraphVisitor vis(os, annotationData); os << "<annot-graph>" << std::endl; // Color color; boost::depth_first_search(*graph, boost::visitor(vis)); os << " <matchings>" << std::endl; std::map<StringsPoolIndex, std::multimap<AnnotationGraphVertex, AnnotationGraphVertex> >::const_iterator it, it_end; it = annotationData.matchings().begin(); it_end = annotationData.matchings().end(); for (; it != it_end; it++) { const std::multimap<AnnotationGraphVertex, AnnotationGraphVertex>& matching = (*it).second; os << " <matching id=\"" << Misc::limastring2utf8stdstring(annotationData.annotationName((*it).first)) << "\">" << std::endl; std::multimap<AnnotationGraphVertex, AnnotationGraphVertex>::const_iterator sit, sit_end; sit = matching.begin(); sit_end = matching.end(); for (; sit != sit_end; sit++) { os << " <pair k=\""<<(*sit).first<<"\" v=\""<<(*sit).second<<"\"/>" << std::endl; } os << " </matching>" << std::endl; } os << " </matchings>" << std::endl; os << "</annot-graph>" << std::endl; }
LimaStatusCode CorefSolvingNormalizedXmlLogger::process( AnalysisContent& analysis) const { // COREFSOLVERLOGINIT; TimeUtils::updateCurrentTime(); AnnotationData* annotationData = static_cast<AnnotationData*>(analysis.getData("AnnotationData")); const LinguisticAnalysisStructure::AnalysisGraph& graph = *(static_cast<LinguisticAnalysisStructure::AnalysisGraph*>(analysis.getData(m_graph))); // LinguisticGraph* lingGraph = const_cast<LinguisticGraph*>(graph.getGraph()); LinguisticMetaData* metadata=static_cast<LinguisticMetaData*>(analysis.getData("LinguisticMetaData")); if (metadata == 0) { COREFSOLVERLOGINIT; LERROR << "no LinguisticMetaData ! abort" << LENDL; return MISSING_DATA; } ofstream out; if (!openLogFile(out,metadata->getMetaData("FileName"))) { COREFSOLVERLOGINIT; LERROR << "Can't open log file " << LENDL; return UNKNOWN_ERROR; } out << "<coreferences>" << endl; // LDEBUG << "CorefSolvingNormalizedXmlLogger on graph " << m_graph << LENDL; AnnotationGraphVertexIt itv, itv_end; boost::tie(itv, itv_end) = vertices(annotationData->getGraph()); for (; itv != itv_end; itv++) { // process //LDEBUG << "CorefSolvingNormalizedXmlLogger on annotation vertex " << *itv << LENDL; if (annotationData->hasAnnotation(*itv,utf8stdstring2limastring("Coreferent"))) //if (annotationData->hasAnnotation(*itv,utf8stdstring2limastring("Coreferent"))) { CoreferentAnnotation* annot ; try { annot = annotationData->annotation(*itv,utf8stdstring2limastring("Coreferent")) .pointerValue<CoreferentAnnotation>(); } catch (const boost::bad_any_cast& ) { COREFSOLVERLOGINIT; LERROR << "One annotation on vertex " << *itv << " you are trying to cast is not a Coreference; Coreference not logged" << LENDL; for (int i = 0; i < 19 ; i++) { LERROR << "annot "<< i << " : " << limastring2utf8stdstring(annotationData->annotationName(i)) << LENDL ; } continue; } LinguisticProcessing::LinguisticAnalysisStructure::Token* token = get(vertex_token, *graph.getGraph(), annot->morphVertex()); if (token == 0) { COREFSOLVERLOGINIT; LERROR << "Vertex " << *itv << " has no entry in the analysis graph token map. This should not happen !!" << LENDL; } else { CoreferentAnnotation* antecedent; // bool hasAntecedent = false; AnnotationGraphOutEdgeIt it, it_end; boost::tie(it, it_end) = boost::out_edges(static_cast<AnnotationGraphVertex>(*itv), annotationData->getGraph()); for (; it != it_end; it++) { if (annotationData->hasAnnotation(target(*it,annotationData->getGraph()),utf8stdstring2limastring("Coreferent"))) { try { antecedent = annotationData->annotation(target(*it, annotationData->getGraph()), utf8stdstring2limastring("Coreferent")).pointerValue<CoreferentAnnotation>(); // hasAntecedent = true; } catch (const boost::bad_any_cast& ) { COREFSOLVERLOGINIT; LERROR << "One annotation on vertex you are trying to cast resulting from an edge out of " << *itv << " is not a Coreference; Coreference not logged" << LENDL; continue; } } } out << " <reference>\n" << " <pos>" << get(vertex_token,*graph.getGraph(),annot->morphVertex())->position() << "</pos>\n" << " <len>" << token->stringForm().length() << "</len>\n" << " <string>"<< limastring2utf8stdstring(transcodeToXmlEntities(token->stringForm())) << "</string>\n" << " <npId>" << annot->id() << "</npId>\n" << " <posVertex>" << annot->morphVertex() << "</posVertex>\n"; //if (hasAntecedent) if (false) { out << " <npRef>" << antecedent->id() << "</npRef>\n"; out << " <refPosVertex>" << antecedent->morphVertex() << "</refPosVertex>\n"; } out << " <categ>" << annot->categ() << "</categ>\n" << " </reference>\n" << endl; } } } out << "</coreferences>" << endl; out.close(); TimeUtils::logElapsedTime("CorefSolvingNormalizedXmlLogger"); return SUCCESS_ID; }