LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
DisambiguatedGraphXmlLogger.cpp
Go to the documentation of this file.
1// Copyright 2002-2013 CEA LIST
2// SPDX-FileCopyrightText: 2022 CEA LIST <gael.de-chalendar@cea.fr>
3//
4// SPDX-License-Identifier: MIT
5
6/***************************************************************************
7 * Copyright (C) 2004-2012 by CEA LIST *
8 * *
9 ***************************************************************************/
15// #include "linguisticProcessing/core/Graph/phoenixGraph.h"
21
24
25
26#include <iostream>
27
28
29#include <fstream>
30
31using namespace std;
33using namespace Lima::Common::Misc;
34
35namespace Lima
36{
37
38namespace LinguisticProcessing
39{
40
41namespace PosTagger
42{
43
45
49
50
53
56 Manager* manager)
57
58{
64 AbstractLinguisticLogger::init(unitConfiguration,manager);
65
66 m_language=manager->getInitializationParameters().media;
67 m_macroManager=&(static_cast<const Common::MediaticData::LanguageData&>(Common::MediaticData::MediaticData::single().mediaData(m_language)).getPropertyCodeManager().getPropertyManager("MACRO"));
68 m_microManager=&(static_cast<const Common::MediaticData::LanguageData&>(Common::MediaticData::MediaticData::single().mediaData(m_language)).getPropertyCodeManager().getPropertyManager("MICRO"));
69
70}
71
73 AnalysisContent& analysis) const
74{
76 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
77 if (metadata == 0)
78 {
80 LERROR << "no LinguisticMetaData ! abort";
81 return MISSING_DATA;
82 }
83
84 ofstream out;
85 if (!openLogFile(out,metadata->getMetaData("FileName")))
86 {
88 LERROR << "Can't open log file ";
90 }
91
92 auto posTokenList=std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData("PosGraph"));
93 const LinguisticGraph* posGraph=posTokenList->getGraph();
94
96
97 out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << endl;
98 out << "<vertices>" << endl;
99
100 LinguisticGraphInEdgeIt inItr,inItrEnd;
101 LinguisticGraphVertexIt vxItr,vxItrEnd;
102 boost::tie(vxItr,vxItrEnd) = vertices(*posGraph);
103 for (;vxItr!=vxItrEnd;vxItr++)
104 {
105 MorphoSyntacticData* dw=get(vertex_data,*posGraph,*vxItr);
106 Token* ft=get(vertex_token,*posGraph,*vxItr);
107
108 if (ft == 0 || dw == 0)
109 {
110 continue;
111 }
112
113 uint64_t pos=0;
114 uint64_t len=0;
115 if (ft!=0)
116 {
117 pos=ft->position();
118 len=ft->length();
119 }
120
121 LinguisticCode macro = dw->firstValue(m_macroManager->getPropertyAccessor());
122 LinguisticCode micro = dw->firstValue(m_microManager->getPropertyAccessor());
123
124 std::string smacro = m_macroManager->getPropertySymbolicValue(macro);
125 std::string smicro = m_microManager->getPropertySymbolicValue(micro);
126
127 out << "<vertex id=\"" << *vxItr << "\" position=\"" << pos << "\" length=\"" << len << "\" >" << endl;
128 std::set<StringsPoolIndex> lemmas = dw->allLemma();
129 std::set<StringsPoolIndex>::const_iterator lemmaIt, lemmaIt_end;
130 lemmaIt = lemmas.begin(); lemmaIt_end = lemmas.end();
131 for (; lemmaIt != lemmaIt_end; lemmaIt++)
132 {
133 out << " <lemma>" << limastring2utf8stdstring(sp[*lemmaIt]) << "</lemma>" << endl;
134 }
135 out << " <macro>" << smacro << "</macro>" << endl;
136 out << " <micro>" << smicro << "</micro>" << endl;
137 boost::tie(inItr,inItrEnd) = in_edges(*vxItr,*posGraph);
138 for (;inItr!=inItrEnd;inItr++)
139 {
140 out << " <pred id=\"" << source(*inItr,*posGraph) << "\"/>" << endl;
141 }
142 out << "</vertex>" << endl;
143 }
144 out << "</vertices>" << endl;
145 out.close();
146
147 TimeUtils::logElapsedTime("DisambiguatedGraphXmlLogger");
148
149 return SUCCESS_ID;
150}
151
152
153}
154
155}
156
157}
#define LERROR
Definition LimaCommon.h:161
LinguisticGraph::in_edge_iterator LinguisticGraphInEdgeIt
LinguisticGraph::vertex_iterator LinguisticGraphVertexIt
@ vertex_token
@ vertex_data
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
#define PTLOGINIT
Defines a Factory to create Object of type Base.
Holds all data that pass through the ProcessUnits Analysis data are shared pointers,...
std::shared_ptr< AnalysisData > getData(const QString &id)
return AnalysisData by id
Holds linguistic data for one language.
const FsaStringsPool & stringsPool(MediaId med) const
const MediaData & mediaData(MediaId media) const
const std::string & getPropertySymbolicValue(const LinguisticCode &value) const
The coded property value can hold several property data.
const PropertyAccessor & getPropertyAccessor() const
give the corresponding PropertyAccessor
A generic process unit to log information in files: contains some common informations such as : outpu...
bool openLogFile(std::ofstream &output, const std::string &sourceFile) const
virtual void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
LinguisticCode firstValue(const Common::PropertyCode::PropertyAccessor &propertyAccessor) const
Return the first non empty value for the given accessor.
void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
LimaStatusCode process(AnalysisContent &analysis) const override
Process on data in analysisContent.
static const MediaticData & single()
const singleton accessor
Definition Singleton.h:51
static void logElapsedTime(const std::string &mess, const std::string &taskCategory=std::string(""))
log the number of microseconds since last UpdateCurrentTime
static void updateCurrentTime(const std::string &taskCategory=std::string(""))
store current time for new elapsed time computation
std::string limastring2utf8stdstring(const Lima::LimaString &phrase, uint32_t size0)
Convert a wide string to a string , in dest up to size bytes.
SimpleFactory< MediaProcessUnit, DisambiguatedGraphXmlLogger > disambiguatedGraphXmlLoggerFactory("DisambiguatedGraphXmlLogger")
NAUTITIA.
LimaStatusCode
Definition LimaCommon.h:236
@ CANNOT_OPEN_FILE_ERROR
Definition LimaCommon.h:239
@ SUCCESS_ID
Definition LimaCommon.h:237
@ MISSING_DATA
Definition LimaCommon.h:243
STL namespace.