LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
SyntacticAnalyzer-disamb.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
17
#include "
SyntacticAnalyzer-disamb.h
"
18
19
// #include "ChainsDisambiguator.h"
20
#include "
common/AbstractFactoryPattern/SimpleFactory.h
"
21
#include "
linguisticProcessing/core/TextSegmentation/SegmentationData.h
"
22
#include "
common/time/timeUtilsController.h
"
23
24
using namespace
Lima::Common::MediaticData
;
25
using namespace
Lima::LinguisticProcessing::LinguisticAnalysisStructure
;
26
27
namespace
Lima
28
{
29
namespace
LinguisticProcessing
30
{
31
namespace
SyntacticAnalysis
32
{
33
34
static
const
uint64_t
DEFAULT_DEPGRAPHMAXBRANCHINGFACTOR
= 30;
35
36
SimpleFactory<MediaProcessUnit,SyntacticAnalyzerDisamb>
syntacticAnalyzerDisambFactory
(
SYNTACTICANALYZERDISAMB_CLASSID
);
37
38
SyntacticAnalyzerDisamb::SyntacticAnalyzerDisamb
() :
39
m_language()
40
{}
41
42
void
SyntacticAnalyzerDisamb::init
(
43
Common::XMLConfigurationFiles::GroupConfigurationStructure
& unitConfiguration,
44
Manager
* manager)
45
46
{
47
SALOGINIT
;
48
m_language
=manager->
getInitializationParameters
().media;
49
try
50
{
51
std::string depGraphMaxBranchingFactorS=unitConfiguration.
getParamsValueAtKey
(
"depGraphMaxBranchingFactor"
);
52
std::istringstream iss(depGraphMaxBranchingFactorS);
53
iss >>
m_depGraphMaxBranchingFactor
;
54
}
55
catch
(
Common::XMLConfigurationFiles::NoSuchParam
& )
56
{
57
LWARN
<<
"no parameter 'depGraphMaxBranchingFactor' in syntacticAnalyzerDisamb group for language "
<< (int)
m_language
<<
" ! Using default value << "
<<
DEFAULT_DEPGRAPHMAXBRANCHINGFACTOR
<<
"."
;
58
}
59
}
60
61
LimaStatusCode
SyntacticAnalyzerDisamb::process
(
62
AnalysisContent
& analysis)
const
63
{
64
Lima::TimeUtilsController
timer(
"SyntacticAnalysis"
);
65
SALOGINIT
;
66
LINFO
<<
"start syntactic analysis - disambiguation"
;
67
// create syntacticData
68
auto
anagraph = std::dynamic_pointer_cast<AnalysisGraph>(analysis.
getData
(
"PosGraph"
));
69
if
(anagraph==0)
70
{
71
LERROR
<<
"no AnalysisGraph ! abort"
;
72
return
MISSING_DATA
;
73
}
74
auto
sb = std::dynamic_pointer_cast<SegmentationData>(analysis.
getData
(
"SentenceBoundaries"
));
75
if
(sb==0)
76
{
77
LERROR
<<
"no sentence bounds ! abort"
;
78
return
MISSING_DATA
;
79
}
80
if
(sb->getGraphId() !=
"PosGraph"
) {
81
LERROR
<<
"SentenceBounds have been computed on "
<< sb->getGraphId() <<
" !"
;
82
LERROR
<<
"SyntacticAnalyzer-deps needs SentenceBounds on PosGraph"
;
83
return
INVALID_CONFIGURATION
;
84
}
85
86
// if (analysis.getData("SyntacticData")==0)
87
// {
88
// auto syntacticData = std::make_shared< SyntacticData >(anagraph.get(), nullptr);
89
// syntacticData->setupDependencyGraph();
90
// analysis.setData("SyntacticData", syntacticData);
91
// }
92
93
94
// bool l2r = true;
95
// ??OME2 for (SegmentationData::const_iterator boundItr=sb->begin();
96
// boundItr!=sb->end();
97
// for (auto boundItr=(sb->getSegments()).begin(); boundItr!=(sb->getSegments()).end(); boundItr++)
98
// {
99
// LinguisticGraphVertex beginSentence=boundItr->getFirstVertex();
100
// LinguisticGraphVertex endSentence=boundItr->getLastVertex();
101
// #ifdef DEBUG_LP
102
// LDEBUG << "analyze sentence from vertex " << beginSentence << " to vertex " << endSentence;
103
// #endif
104
// ChainsDisambiguator cd(std::dynamic_pointer_cast<SyntacticData>(analysis.getData("SyntacticData")).get(),
105
// beginSentence, endSentence, m_language, m_depGraphMaxBranchingFactor);
106
// cd.initPaths();
107
// cd.computePaths();
108
// cd.applyDisambiguisation();
109
/* LinguisticGraphVertex current, next;
110
current = beginSentence; next = current;
111
while (next != endSentence)
112
{
113
next = nextChainsDisambBreakFrom(current, *anagraph, endSentence);
114
LDEBUG << "Disambiguate chains between " << current << " and " << next;
115
ChainsDisambiguator cd(dynamic_cast<SyntacticData*>(analysis.getData("SyntacticData")),
116
current, next);
117
cd.initPaths();
118
cd.computePaths();
119
cd.applyDisambiguisation();
120
current = next;
121
}*/
122
// }
123
124
LINFO
<<
"end syntactic analysis - disambiguation"
;
125
return
SUCCESS_ID
;
126
}
127
146
// LinguisticGraphVertex SyntacticAnalyzerDisamb::nextChainsDisambBreakFrom(
147
// const LinguisticGraphVertex& v,
148
// const AnalysisGraph& anagraph,
149
// const LinguisticGraphVertex& nextSentenceBreak) const
150
// {
151
//
152
// const LinguisticGraph& graph = *(anagraph.getGraph());
153
//
154
// LinguisticGraphVertex current = v;
155
// while (boost::out_degree(current, graph) == 1)
156
// {
157
// // LDEBUG << "On " << current;
158
// if (current == anagraph.lastVertex() || current == nextSentenceBreak) return current;
159
// current = boost::target(*(boost::out_edges(current, graph).first), graph);
160
// }
161
// // LDEBUG << "Entering loop on " << current;
162
// while(true)
163
// {
164
// std::list< LinguisticGraphVertex > fifo;
165
// std::set< LinguisticGraphVertex > infifo;
166
// std::set< LinguisticGraphVertex > finished;
167
// fifo.push_back(current);
168
// LinguisticGraphInEdgeIt init, init_end;
169
// boost::tie(init, init_end) = boost::in_edges(current, graph);
170
// for (; init != init_end; init++)
171
// {
172
// finished.insert(source(*init,graph));
173
// }
174
// bool first = true;
175
// while (!fifo.empty())
176
// {
177
// current = fifo.front();
178
// fifo.pop_front();
179
// // LDEBUG << "On " << current;
180
// bool curfinished = true;
181
// if (finished.find(current) == finished.end())
182
// {
183
// LinguisticGraphInEdgeIt init, init_end;
184
// boost::tie(init, init_end) = boost::in_edges(current, graph);
185
// while (curfinished && init != init_end)
186
// {
187
// if ( finished.find(source(*init,graph)) == finished.end() )
188
// curfinished = false;
189
// init++;
190
// }
191
// if (curfinished) finished.insert(current);
192
// }
193
// if (fifo.empty() && curfinished && !first) break;
194
// else
195
// {
196
// first = false;
197
// LinguisticGraphOutEdgeIt it, it_end;
198
// boost::tie(it, it_end) = boost::out_edges(current, graph);
199
// for (; it != it_end; it++)
200
// {
201
// if (infifo.find(target(*it, graph)) == infifo.end())
202
// {
203
// fifo.push_back(target(*it, graph));
204
// infifo.insert(target(*it, graph));
205
// }
206
// }
207
// // fifo.push_back(current);
208
// }
209
// if (current == anagraph.lastVertex() || current==nextSentenceBreak)
210
// {
211
// if (current != nextSentenceBreak)
212
// {
213
// SADLOGINIT;
214
// LERROR << "In nextChainsBreakFrom: went beyond next sentence break " << nextSentenceBreak;
215
// LERROR << " returning graph's last vertex " << current;
216
// }
217
// // LDEBUG << "Next chains break is: " << current;
218
// return current;
219
// }
220
// }
221
// // LDEBUG << "Testing end only on " << current;
222
// CVertexChainIdPropertyMap chainsMap = boost::get( vertex_chain_id, graph );
223
// const std::set< Lima::LinguisticProcessing::LinguisticAnalysisStructure::ChainIdStruct >& chains = chainsMap[current];
224
// if (chains.empty())
225
// return current;
226
// std::set< Lima::LinguisticProcessing::LinguisticAnalysisStructure::ChainIdStruct >::const_iterator itc, itc_end;
227
// itc = chains.begin(); itc_end = chains.end();
228
// bool endonly = true;
229
// while (endonly && itc != itc_end)
230
// {
231
// if ( ( (*itc).elemType() == BEGIN ) || ( ( (*itc).elemType() == PART ) ) )
232
// endonly = false;
233
// itc++;
234
// }
235
// if (endonly) return current;
236
// }
237
// }
238
239
240
}
// closing namespace SyntacticAnalysis
241
}
// closing namespace LinguisticProcessing
242
}
// closing namespace Lima
LWARN
#define LWARN
Definition
LimaCommon.h:160
LINFO
#define LINFO
Definition
LimaCommon.h:158
LERROR
#define LERROR
Definition
LimaCommon.h:161
SALOGINIT
#define SALOGINIT
Definition
LinguisticProcessingCommon.h:108
SegmentationData.h
SimpleFactory.h
Defines a Factory to create Object of type Base.
SyntacticAnalyzer-disamb.h
SYNTACTICANALYZERDISAMB_CLASSID
#define SYNTACTICANALYZERDISAMB_CLASSID
Definition
SyntacticAnalyzer-disamb.h:32
Lima::AnalysisContent
Holds all data that pass through the ProcessUnits Analysis data are shared pointers,...
Definition
AnalysisContent.h:37
Lima::AnalysisContent::getData
std::shared_ptr< AnalysisData > getData(const QString &id)
return AnalysisData by id
Definition
AnalysisContent.cpp:39
Lima::Common::XMLConfigurationFiles::GroupConfigurationStructure
Definition
groupConfigurationStructure.h:32
Lima::Common::XMLConfigurationFiles::GroupConfigurationStructure::getParamsValueAtKey
std::string & getParamsValueAtKey(const std::string &key)
Definition
groupConfigurationStructure.cpp:207
Lima::Common::XMLConfigurationFiles::NoSuchParam
return a message when a 'param' was not found
Definition
xmlConfigurationFileExceptions.h:89
Lima::InitializableObjectManager
Manage initialization of InitializableObjects using configuration module and parameters.
Definition
InitializableObjectManager.h:32
Lima::InitializableObjectManager::getInitializationParameters
const InitializationParameters & getInitializationParameters() const
get Initialization Parameters
Definition
InitializableObjectManager.h:101
Lima::LinguisticProcessing::SyntacticAnalysis::SyntacticAnalyzerDisamb::SyntacticAnalyzerDisamb
SyntacticAnalyzerDisamb()
Definition
SyntacticAnalyzer-disamb.cpp:38
Lima::LinguisticProcessing::SyntacticAnalysis::SyntacticAnalyzerDisamb::init
void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
Definition
SyntacticAnalyzer-disamb.cpp:42
Lima::LinguisticProcessing::SyntacticAnalysis::SyntacticAnalyzerDisamb::process
LimaStatusCode process(AnalysisContent &analysis) const override
Process on data in analysisContent.
Definition
SyntacticAnalyzer-disamb.cpp:61
Lima::LinguisticProcessing::SyntacticAnalysis::SyntacticAnalyzerDisamb::m_language
MediaId m_language
Definition
SyntacticAnalyzer-disamb.h:58
Lima::LinguisticProcessing::SyntacticAnalysis::SyntacticAnalyzerDisamb::m_depGraphMaxBranchingFactor
uint64_t m_depGraphMaxBranchingFactor
Definition
SyntacticAnalyzer-disamb.h:59
Lima::SimpleFactory
Definition
SimpleFactory.h:28
Lima::TimeUtilsController
This file contains a class to control log of informations about time, such as logging cumulated time ...
Definition
timeUtilsController.h:46
Lima::Common::MediaticData
Definition
EntityType.cpp:18
Lima::LinguisticProcessing::LinguisticAnalysisStructure
Definition
DepTripleDumper.h:45
Lima::LinguisticProcessing::SyntacticAnalysis::syntacticAnalyzerDisambFactory
SimpleFactory< MediaProcessUnit, SyntacticAnalyzerDisamb > syntacticAnalyzerDisambFactory(SYNTACTICANALYZERDISAMB_CLASSID)
Lima::LinguisticProcessing::SyntacticAnalysis::DEFAULT_DEPGRAPHMAXBRANCHINGFACTOR
static const uint64_t DEFAULT_DEPGRAPHMAXBRANCHINGFACTOR
Definition
SyntacticAnalyzer-disamb.cpp:34
Lima
NAUTITIA.
Definition
AmosePluginsManager.h:15
Lima::LimaStatusCode
LimaStatusCode
Definition
LimaCommon.h:236
Lima::SUCCESS_ID
@ SUCCESS_ID
Definition
LimaCommon.h:237
Lima::INVALID_CONFIGURATION
@ INVALID_CONFIGURATION
Definition
LimaCommon.h:242
Lima::MISSING_DATA
@ MISSING_DATA
Definition
LimaCommon.h:243
timeUtilsController.h
lima_linguisticprocessing
src
linguisticProcessing
core
SyntacticAnalysis
SyntacticAnalyzer-disamb.cpp
Generated by
1.9.8