LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
AbstractTextualAnalysisDumper.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 AbstractAnalysisDumper.cpp
9 * @author Romaric Besancon (romaric.besancon@cea.fr)
10 * @date Fri Jan 21 2011
11 * copyright Copyright (C) 2011 by CEA LIST
12 *
13 ***********************************************************************/
14
15#include <common/LimaCommon.h>
19#include <iostream>
20#include <fstream>
21
23using namespace std;
24
25namespace Lima {
26namespace LinguisticProcessing {
27
28//***********************************************************************
29// constructors and destructors
32m_language(0),
33m_out(0),
34m_handlerName(),
35m_outputFile(),
36m_outputSuffix(),
37m_stripInputSuffix(false),
38m_append(false),
39m_temporaryFileMetadata()
40{
41}
42
46
47//***********************************************************************
50 Manager* manager)
51
52{
53 m_language = manager->getInitializationParameters().media;
54
55 try
56 {
57 m_handlerName=unitConfiguration.getParamsValueAtKey("handler");
58 }
59 catch (NoSuchParam& ) { } // do nothing, optional
60
61 try
62 {
63 m_temporaryFileMetadata = QString::fromUtf8(unitConfiguration.getParamsValueAtKey("temporaryFileMetadata").c_str());
64 }
65 catch (Common::XMLConfigurationFiles::NoSuchParam& ) {} // keep default value (empty)
66
67 try
68 {
69 m_outputSuffix=unitConfiguration.getParamsValueAtKey("outputSuffix");
70 }
71 catch (NoSuchParam& ) {} // do nothing, optional
72
73 try
74 {
75 m_stripInputSuffix=unitConfiguration.getBooleanParameter("stripInputSuffix");
76 }
77 catch (NoSuchParam& ) {} // do nothing, optional
78
79 try
80 {
81 m_outputFile=unitConfiguration.getParamsValueAtKey("outputFile");
82 }
83 catch (NoSuchParam& ) {} // do nothing, optional
84
85 try
86 {
87 string val=unitConfiguration.getParamsValueAtKey("append");
88 if (val=="true" || val=="yes" || val=="1") {
89 m_append=true;
90 }
91 else {
92 m_append=false;
93 }
94 }
95 catch (NoSuchParam& ) {} // keep default value
96}
97
98std::shared_ptr<DumperStream> AbstractTextualAnalysisDumper::initialize(
99 AnalysisContent& analysis) const
100{
102// #ifdef DEBUG_LP
103 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream" << m_handlerName;
104// #endif
105
106 // if handler is defined, find handler
107 if (! m_handlerName.empty()) {
108// #ifdef DEBUG_LP
109 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream with handler "<< m_handlerName;
110// #endif
111 AnalysisHandlerContainer* h = static_cast<AnalysisHandlerContainer*>(analysis.getData("AnalysisHandlerContainer").get());
113 if (handler==0)
114 {
116 LWARN << "AbstractTextualAnalysisDumper::initialize handler " << m_handlerName << " has not been given to the core client";
117 }
118 else {
119 return std::make_shared<DumperStream>(handler);
120 }
121 }
122
123 if (! m_temporaryFileMetadata.isEmpty()) {
124// #ifdef DEBUG_LP
125 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream with temporary file metadata";
126// #endif
127 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
128 if (metadata == 0) {
129 LERROR << "AbstractTextualAnalysisDumper::initialize no LinguisticMetaData ! abort";
130 }
131// #ifdef DEBUG_LP
132 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream with metadata value"<< metadata->getMetaData(m_temporaryFileMetadata.toUtf8().constData());
133// #endif
134 return std::make_shared<DumperStream>(
135 metadata->getMetaData(m_temporaryFileMetadata.toUtf8().constData()),
136 m_append);
137 }
138
139 if (! m_outputFile.empty()) {
140// #ifdef DEBUG_LP
141 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream with output file"<< m_outputFile << m_append;
142// #endif
143 return std::make_shared<DumperStream>(m_outputFile, m_append);
144 }
145
146 if (! m_outputSuffix.empty()) {
147 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
148 if (metadata == 0) {
150 LERROR << "AbstractTextualAnalysisDumper::initialize: no LinguisticMetaData ! abort";
151 }
152 else {
153 std::string sourceFile(metadata->getMetaData("FileName"));
154 // remove suffix if necessary
155 if (m_stripInputSuffix) {
156 size_t lastIndex = sourceFile.find_last_of(".");
157 if (lastIndex != std::string::npos) {
158 sourceFile = sourceFile.substr(0, lastIndex);
159 }
160 }
161
162// #ifdef DEBUG_LP
163 LDEBUG << "AbstractTextualAnalysisDumper: initialize DumperStream with output suffix "
164 << m_outputSuffix << " on file " << sourceFile;
165// #endif
166 string outputFile=sourceFile + m_outputSuffix;
167 return std::make_shared<DumperStream>(outputFile, m_append);
168 }
169 }
170
171 // return
172 LERROR << "AbstractTextualAnalysisDumper::initialize: missing parameters to initialize output stream: use default file 'output'";
173 return std::make_shared<DumperStream>("output", m_append);
174}
175
176} // end namespace
177} // end namespace
#define LWARN
Definition LimaCommon.h:160
#define LDEBUG
Definition LimaCommon.h:157
#define LERROR
Definition LimaCommon.h:161
#define DUMPERLOGINIT
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
AbstractAnalysisHandler * getHandler(const std::string &handlerId) const
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
std::shared_ptr< DumperStream > initialize(AnalysisContent &analysis) const
virtual void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
NAUTITIA.
STL namespace.