LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
SyntacticAnalyzer-simplify.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
24#include "SimplificationData.h"
26
27#include <boost/graph/reverse_graph.hpp>
28
29using namespace std;
30using namespace boost;
31using namespace Lima::Common::MediaticData;
34
35namespace Lima
36{
37namespace LinguisticProcessing
38{
39namespace SyntacticAnalysis
40{
41#define SASLOGINIT LOGINIT("LP::SyntacticAnalysis::Simplify")
42
44
45
47 m_language(),
48 m_recognizer(0)
49{}
50
53 Manager* manager)
54
55{
57 LINFO << "SyntacticAnalyzerSimplify::init";
59 std::string rules=unitConfiguration.getParamsValueAtKey("simplifyAutomaton");
60 m_recognizer = std::dynamic_pointer_cast<Automaton::Recognizer>(LinguisticResources::single().getResource(m_language,rules));
61}
62
64 AnalysisContent& analysis) const
65{
66 Lima::TimeUtilsController timer("SyntacticAnalysis");
68 LINFO << "SyntacticAnalyzerSimplify::process";
69
70 auto anagraph = std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData("PosGraph"));
71 if (anagraph==0)
72 {
73 LERROR << "no AnalysisGraph ! abort";
74 return MISSING_DATA;
75 }
76 auto sb = std::dynamic_pointer_cast<SegmentationData>(analysis.getData("SentenceBoundaries"));
77 if (sb==0)
78 {
79 LERROR << "no sentence bounds ! abort";
80 return MISSING_DATA;
81 }
82
83 if (analysis.getData("SyntacticData")==0)
84 {
85 auto syntacticData = std::make_shared<SyntacticData>(anagraph.get(), nullptr);
86 syntacticData->setupDependencyGraph();
87 analysis.setData("SyntacticData", syntacticData);
88 }
89
90 auto simplificationData = std::dynamic_pointer_cast<SimplificationData>(analysis.getData("SimplificationData"));
91 if (simplificationData==0)
92 {
93 simplificationData = std::make_shared<SimplificationData>(anagraph.get());
94 analysis.setData("SimplificationData", simplificationData);
95 }
96
97 // ??OME2 SegmentationData::const_iterator boundItr, boundItr_end;
98 //boundItr = sb->begin(); boundItr_end = sb->end();
99 std::vector<Segment>::const_iterator boundItr, boundItr_end;
100 boundItr = (sb->getSegments()).begin(); boundItr_end = (sb->getSegments()).end();
101 for (; boundItr != boundItr_end; boundItr++)
102 {
103 LinguisticGraphVertex beginSentence=boundItr->getFirstVertex();
104 LinguisticGraphVertex endSentence=boundItr->getLastVertex();
105 LDEBUG << "simplify sentence from vertex " << beginSentence
106 << " to vertex " << endSentence;
107
108 do
109 {
110 LDEBUG << "Applying automaton on sentence from " << beginSentence << " to " << endSentence;
111 simplificationData->simplificationDone(false);
112 simplificationData->sentence(beginSentence);
113 std::vector<Automaton::RecognizerMatch> result;
114 m_recognizer->apply(*anagraph,
115 beginSentence,
116 endSentence,
117 analysis,
118 result,
119 true, // test all vertices=true
120 true, // stop rules search on a node at first success
121 true, // only one success per type
122 true // stop exploration at first success
123 );
124 } while (simplificationData->simplificationDone());
125
126 }
127
128 LINFO << "end syntactic analysis - subsentences simplification";
129 return SUCCESS_ID;
130}
131
132} // closing namespace SyntacticAnalysis
133} // closing namespace LinguisticProcessing
134} // closing namespace Lima
#define LDEBUG
Definition LimaCommon.h:157
#define LINFO
Definition LimaCommon.h:158
#define LERROR
Definition LimaCommon.h:161
A graph structure for linguistic analysis.
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
Defines a Factory to create Object of type Base.
#define SASLOGINIT
Data used for the simplification of sentences allowing easier heterosyntagmatic analysis.
#define SYNTACTICANALYZERSIMPLIFY_CLASSID
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
void setData(const QString &id, std::shared_ptr< AnalysisData > data)
set an analysisData with the given id.
Manage initialization of InitializableObjects using configuration module and parameters.
const InitializationParameters & getInitializationParameters() const
get Initialization Parameters
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 LinguisticResources & single()
const singleton accessor
Definition Singleton.h:51
This file contains a class to control log of informations about time, such as logging cumulated time ...
SimpleFactory< MediaProcessUnit, SyntacticAnalyzerSimplify > syntacticAnalyzerSimplifyFactory(SYNTACTICANALYZERSIMPLIFY_CLASSID)
NAUTITIA.
LimaStatusCode
Definition LimaCommon.h:236
@ SUCCESS_ID
Definition LimaCommon.h:237
@ MISSING_DATA
Definition LimaCommon.h:243
STL namespace.