LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
FullTokenXmlLogger.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
13#include "FullTokenXmlLogger.h"
24
25#include <iostream>
26#include <fstream>
27#include <ctime>
28
29using namespace std;
30//using namespace boost;
32using namespace Lima::Common::MediaticData;
34
35namespace Lima
36{
37namespace LinguisticProcessing
38{
39namespace LinguisticAnalysisStructure
40{
41
43
47
50
53 Manager* manager)
54
55{
56 AbstractLinguisticLogger::init(unitConfiguration,manager);
57 try
58 {
59 m_graphId=unitConfiguration.getParamsValueAtKey("graph");
60 }
61 catch (NoSuchParam& )
62 {
63 m_graphId=string("AnalysisGraph");
64 }
65 m_language=manager->getInitializationParameters().media;
66 m_propertyCodeManager= &(static_cast<const Common::MediaticData::LanguageData&>(Common::MediaticData::MediaticData::single().mediaData(m_language)).getPropertyCodeManager());
67}
68
69
70// Each token of the specified path is
71// searched into the specified dictionary.
73 AnalysisContent& analysis) const
74{
75 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
76 if (metadata == 0)
77 {
79 LERROR << "no LinguisticMetaData ! abort";
80 return MISSING_DATA;
81 }
82
83 auto tokenList = std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData(m_graphId));
84 std::ofstream fout;
85 if (!openLogFile(fout,metadata->getMetaData("FileName"))) {
87 LERROR << "Error: cannot open log file";
89 }
90
91 dump(fout, *tokenList);
92 fout.close();
93 return SUCCESS_ID;
94}
95
96//**********************************************************************
97// define a visitor to go through the graph and output the fulltokens
98
99class DumpXMLVisitor : public boost::default_bfs_visitor
100{
101 std::ostream& m_ostream;
102 std::map<LinguisticGraphVertex,uint64_t> m_depthSource;
103 std::map<LinguisticGraphVertex,uint64_t> m_depth;
104 const Common::PropertyCode::PropertyCodeManager& m_propertyCodeManager;
105 const FsaStringsPool& m_stringsPool;
106public:
107 DumpXMLVisitor(std::ostream& os,
109 const FsaStringsPool& stringsPool):
110 m_ostream(os),m_depthSource(),m_depth(),m_propertyCodeManager(pcm),m_stringsPool(stringsPool) {}
111
114};
115
117 const LinguisticGraph& g)
118{
119 LinguisticGraphVertex vsource=source(e,g);
120 LinguisticGraphVertex vtarget=target(e,g);
121
122 // hack : skip edge between first and last vertex
123 if (vsource == 0 && vtarget == 1) { return; }
124
125 std::map<LinguisticGraphVertex,uint64_t>::iterator
126 d=m_depthSource.find(vsource);
127 if (d == m_depthSource.end())
128 {
129 m_depthSource[vsource]=0;
130 m_depth[vtarget]=0;
131 }
132 else
133 {
134 m_depthSource[vtarget]=(*d).second;
135 (*d).second++;
136 m_depth[vtarget]=(*d).second;
137 }
138}
139
141 const LinguisticGraph& g)
142{
143
144 m_ostream << " <vertex id=\"" << v << "\">" << std::endl;
145 Token* t = get(vertex_token,g,v);
146 if (t != 0)
147 {
148 m_ostream << " <token>" << std::endl;
149 t->outputXml(m_ostream,m_propertyCodeManager,m_stringsPool);
150 m_ostream << " </token>" << std::endl;
151 }
152 MorphoSyntacticData* data = get(vertex_data,g,v);
153 if (data != 0 )
154 {
155 data->outputXml(m_ostream,m_propertyCodeManager,m_stringsPool);
156 }
157 m_ostream << " </vertex>" << std::endl;
158}
159
160//**********************************************************************
161// dumps memory structure on XML file
162
163void FullTokenXmlLogger::dump(std::ostream& xmlStream,
164 AnalysisGraph& tTokenList) const
165{
166 //LASLOGINIT;
167 xmlStream << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" << std::endl;
168 xmlStream << "<!--generated by MM project on ";
169 // const uint64_t dateLen = strlen("Tue Oct 22 13:42:36 2002");
170 time_t aclock;
171 time(&aclock); /* Get time in seconds */
172 std::string str(ctime(&aclock));
173 xmlStream << str;
174 xmlStream << "-->" << std::endl;
175 xmlStream << "<?xml-stylesheet type=\"text/xsl\" href=\"DataStructure.xslt\"?>" << std::endl;
176 xmlStream << "<data_structure xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"";
177 xmlStream << " xsi:noNamespaceSchemaLocation=\"DataStructure.xsd\">" << std::endl;
178
179 // dump the graph
181 DumpXMLVisitor vis(xmlStream,*m_propertyCodeManager,sp);
182 breadth_first_search(*(tTokenList.getGraph()),
183 tTokenList.firstVertex(),
184 visitor(vis));
185
186 xmlStream << "</data_structure>" << std::endl;
187}
188
189} // LinguisticAnalysisStructure
190} // LinguisticProcessing
191} // Lima
AgglutinatedToken is a fulltoken that is a agglutinated compound word.
#define FULLTOKENXMLLOGGER_CLASSID
#define LERROR
Definition LimaCommon.h:161
boost::graph_traits< LinguisticGraph >::edge_descriptor LinguisticGraphEdge
typedefs to simplify the access to various graphs elements
@ vertex_token
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
@ vertex_data
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
#define DICTIONARYLOGINIT
#define MORPHOLOGINIT
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
Provide tools to parse a property file, and deal with the property coding system.
return a message when a 'param' was not found
Manage initialization of InitializableObjects using configuration module and parameters.
const InitializationParameters & getInitializationParameters() const
get Initialization Parameters
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.
An AnalysisData containing a LinguisticGraph with a language and an id.
const LinguisticGraph * getGraph(void) const
Returns the underlying graph structure.
const LinguisticGraphVertex & firstVertex(void) const
Returns the first vertex of the graph.
DumpXMLVisitor(std::ostream &os, const Common::PropertyCode::PropertyCodeManager &pcm, const FsaStringsPool &stringsPool)
void discover_vertex(LinguisticGraphVertex v, const LinguisticGraph &g)
void examine_edge(LinguisticGraphEdge v, const LinguisticGraph &g)
LimaStatusCode process(AnalysisContent &analysis) const override
Process on data in analysisContent.
void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
void outputXml(std::ostream &xmlStream, const Common::PropertyCode::PropertyCodeManager &pcm, const FsaStringsPool &sp) const
virtual void outputXml(std::ostream &xmlStream, const Common::PropertyCode::PropertyCodeManager &pcm, const FsaStringsPool &sp) const
Definition Token.cpp:60
static const MediaticData & single()
const singleton accessor
Definition Singleton.h:51
SimpleFactory< MediaProcessUnit, FullTokenXmlLogger > fullTokenXmlLoggerFactory(FULLTOKENXMLLOGGER_CLASSID)
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.
launch exception related to the configuration file parsing