LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
SegmentFeaturesDumper.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 ***************************************************************************/
11
25
26#include <boost/algorithm/string/replace.hpp>
27
28#include <fstream>
29#include <queue>
30
31using namespace std;
32//using namespace boost;
33using namespace boost::tuples;
35using namespace Lima::Common::MediaticData;
37
38namespace Lima {
39namespace LinguisticProcessing {
40namespace AnalysisDumpers {
41
43
46m_graph("PosGraph"),
47m_data(""),
48m_sep(" "),
49m_sepReplace("_"),
50m_features(0)
51{}
52
53
56
58 Manager* manager)
59
60{
61 AbstractTextualAnalysisDumper::init(unitConfiguration,manager);
62
64 try
65 {
66 m_graph=unitConfiguration.getParamsValueAtKey("graph");
67 }
68 catch (NoSuchParam& ) {} // keep default value
69
70 try {
71 m_data=unitConfiguration.getParamsValueAtKey("data");
72 }
73 catch (Common::XMLConfigurationFiles::NoSuchParam& ) {} // do nothing, keep default
74
75 try {
76 m_sep=unitConfiguration.getParamsValueAtKey("sep");
77 }
78 catch (NoSuchParam& ) {} // keep default value
79
80 try {
81 m_sepReplace=unitConfiguration.getParamsValueAtKey("sep_replace");
82 }
83 catch (NoSuchParam& ) {} // keep default value
84
85 try {
86 std::deque<string> featureList=unitConfiguration.getListsValueAtKey("features");
87 // initialize feature access
88 m_features=new SegmentFeatures(m_language);
89 m_features->initialize(featureList);
90 }
91 catch (NoSuchList& ) { // keep default value
92 LOGINIT("LP::Dumper");
93 LERROR << "Warning: no features selected in SegmentFeaturesDumper: output will be empty";
94 }
95
96}
97
99 AnalysisContent& analysis) const
100{
101 LOGINIT("LP::Segmentation");
102 LDEBUG << "SegmentFeaturesDumper::process";
103
104 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
105 if (metadata == 0) {
106 LERROR << "no LinguisticMetaData ! abort";
107 return MISSING_DATA;
108 }
109
110 if (m_features==0) {
111 LERROR << "No features selected => no output";
112 return SUCCESS_ID;
113 }
114
115 auto dstream=initialize(analysis);
116 m_features->update(analysis);
117
118 ostream& out=dstream->out();
119
120 auto data=analysis.getData(m_data);
121 if (data==0) {
122 LERROR << "Error: no data '"<< m_data << "'";
123 return MISSING_DATA;
124 }
125 auto segmData = std::dynamic_pointer_cast<SegmentationData>(data);
126 auto graph = std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData(segmData->getGraphId()));
127
128 // ??OME2 LDEBUG << "SegmentationData " << m_data << " has " << segmData->size() << " segments";
129 LDEBUG << "SegmentationData " << m_data << " has " << segmData->getSegments().size() << " segments";
130
131 uint64_t i(0);
132 // ??OME2 for (vector<Segment>::const_iterator s=segmData->begin(),
133 // s_end=segmData->end();s!=s_end;s++) {
134 for (vector<Segment>::const_iterator s=(segmData->getSegments()).begin(),
135 s_end=(segmData->getSegments()).end();s!=s_end;s++) {
136 LDEBUG << "looking at segment " << i << ":" << (*s).getPosBegin() << "," << (*s).getLength();
137 bool first=true;
138 for (SegmentFeatures::const_iterator f=m_features->begin(),f_end=m_features->end();f!=f_end;f++) {
139 if (first) { first=false; }
140 else {
141 out << m_sep;
142 }
143 std::string str = (*f)->getValue(graph.get(), *s);
144 boost::replace_all(str,m_sep,m_sepReplace);
145 out << str;
146 }
147 out << endl;
148 }
149
150 return SUCCESS_ID;
151}
152
153} // end namespace
154} // end namespace
155} // end namespace
#define LOGINIT(X)
Definition LimaCommon.h:187
#define LDEBUG
Definition LimaCommon.h:157
#define LERROR
Definition LimaCommon.h:161
A graph structure for linguistic analysis.
#define SEGMENTFEATURESDUMPER_CLASSID
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
std::deque< std::string > & getListsValueAtKey(const std::string &key)
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.
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 initialize(const std::deque< std::string > &featureNames)
void update(const AnalysisContent &analysis)
SimpleFactory< MediaProcessUnit, SegmentFeaturesDumper > SegmentFeaturesDumperFactory(SEGMENTFEATURESDUMPER_CLASSID)
NAUTITIA.
LimaStatusCode
Definition LimaCommon.h:236
@ SUCCESS_ID
Definition LimaCommon.h:237
@ MISSING_DATA
Definition LimaCommon.h:243
STL namespace.
launch exception related to the configuration file parsing