LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
recognizerResultLogger.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 *
8 * @file recognizerResultLogger.cpp
9 * @author besancon (romaric.besancon@cea.fr)
10 * @date Tue Oct 25 2005
11 * @version $Id$
12 * copyright Copyright (C) 2005-2012 by CEA LIST
13 *
14 ***********************************************************************/
15
23#include <fstream>
24
25using namespace std;
27
28namespace Lima {
29namespace LinguisticProcessing {
30namespace ApplyRecognizer {
31
34
36AbstractLinguisticLogger(".recoData.xml"),
37m_language(0),
38m_data()
39{
40}
41
44
47 Manager* manager)
48
49{
50 AbstractLinguisticLogger::init(unitConfiguration,manager);
51
52 m_language=manager->getInitializationParameters().media;
53
54 try {
55 m_data=unitConfiguration.getParamsValueAtKey("data");
56 }
59 LERROR << "missing \"data\" parameter in configuration of RecognizerResultLogger"
60 << " for language " << (int) m_language;
62 }
63}
64
66{
67
69 LDEBUG << "RecognizerResultLogger: logging data "<< m_data;
70 // get metadata (for filename)
71 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
72 if (metadata == 0) {
74 LERROR << "no LinguisticMetaData ! abort";
75 return MISSING_DATA;
76 }
77
78 std::ofstream fout;
79 if (!openLogFile(fout,metadata->getMetaData("FileName"))) {
81 LERROR << "DebugSyntacticAnalysisLogger::Cannot open log file";
83 }
84
85 uint64_t offset(0);
86 try {
87 offset=atoi(metadata->getMetaData("StartOffset").c_str());
88 }
90 // do nothing: not set in analyzeText (only in analyzeXmlDocuments)
91 }
92
93 uint64_t offsetIndexingNode(0);
94 try {
95 offsetIndexingNode=atoi(metadata->getMetaData("StartOffsetIndexingNode").c_str());
96 }
98 // do nothing: not set in analyzeText (only in analyzeXmlDocuments)
99 }
100
101 // get result data
102 auto resultData = analysis.getData(m_data);
103 if (resultData == 0) {
105 LERROR << "no data " << m_data << "in AnalysisContent";
106 return MISSING_DATA;
107 }
108 auto recoData = std::dynamic_pointer_cast<RecognizerResultData>(resultData);
109 if (recoData == 0) {
111 LERROR << "data " << m_data << "in AnalysisContent is not a RecognizerResultData";
112 return MISSING_DATA;
113 }
114
115 // print results in log file
116 RecognizerResultData::const_iterator
117 it=recoData->begin(),
118 it_end=recoData->end();
119 fout << "<entities offsetNode=\"" << offsetIndexingNode << "\">" << endl;
120 for (; it!=it_end; it++) {
121 auto m = (*it).cbegin(), m_end = (*it).cend();
122 for (; m != m_end; m++)
123 {
124 //LimaString normalizedForm=(*m).getNormalizedForm().normStr();
125 fout << "<entity>"
126 << "<pos>" << offset+(*m).positionBegin() << "</pos>"
127 << "<len>" << (*m).length() << "</len>"
128 //<< "<typeNum>" << (*m).getType() << "</typeNum>"
129 << "<type>"
131 getEntityName((*m).getType()).toStdString()
132 << "</type>"
133 << "<string>"<< (*m).getString().toStdString() << "</string>"
134 << "<norm>";
135 const auto& features = m->features();
136 for (auto featureItr = features.cbegin(), features_end = features.cend();
137 featureItr != features_end; featureItr++)
138 {
139 fout << "<" << featureItr->getName() << ">"
140 << featureItr->getValueString()
141 << "</" << featureItr->getName() << ">";
142 }
143
144 fout << "</norm>"
145 << "</entity>"
146 << endl;
147 }
148 }
149 fout << "</entities>" << endl;
150 fout.close();
151 return SUCCESS_ID;
152}
153
154
155} // end namespace
156} // end namespace
157} // end namespace
#define LDEBUG
Definition LimaCommon.h:157
#define LERROR
Definition LimaCommon.h:161
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
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
Use this exception to signal an error in one of the configuration files.
Definition LimaCommon.h:345
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.
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.
static const MediaticData & single()
const singleton accessor
Definition Singleton.h:51
SimpleFactory< MediaProcessUnit, ApplyRecognizer > ApplyRecognizer(APPLYRECOGNIZER_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.
#define APPRLOGINIT
#define RECOGNIZERRESULTLOGGER_CLASSID
launch exception related to the configuration file parsing