38namespace LinguisticProcessing
40namespace SyntacticAnalysis
42#define SACLOGINIT LOGINIT("LP::SyntacticAnalysis::Coordination")
75 LDEBUG <<
"testing DefineString for " << v1 <<
" and " << v2 <<
" with relation: "
78 auto simplificationData = std::dynamic_pointer_cast<SimplificationData>(analysis.
getData(
"SimplificationData"));
79 if (simplificationData==0)
82 LERROR <<
"No simplificationData in DefineString constraint";
85 if (simplificationData->coordStringsDefs().find(complement) != simplificationData->coordStringsDefs().end())
88 LERROR <<
"simplificationData already contains a " << complement <<
" coord string definition";
94 LDEBUG <<
"DefineString: false";
97 simplificationData->coordStringsDefs().insert(std::make_pair(complement,std::vector<LinguisticGraphVertex>()));
98 std::vector<LinguisticGraphVertex>& stringDef = (*simplificationData->coordStringsDefs().find(complement)).second;
99 LDEBUG <<
"Add " << v1 <<
" to string " << complement;
100 stringDef.push_back(v1);
105 next = boost::target(*(boost::out_edges(next, *graph.
getGraph()).first),*graph.
getGraph());
106 LDEBUG <<
"Add " << next <<
" to string " << complement;
107 stringDef.push_back(next);
110 LDEBUG <<
"DefineString: true";
130 LDEBUG <<
"Testing SameString on " << v1 <<
" and " << v2;
133 auto syntacticData = std::dynamic_pointer_cast<SyntacticData>(analysis.
getData(
"SyntacticData"));
134 auto simplificationData = std::dynamic_pointer_cast<SimplificationData>(analysis.
getData(
"SimplificationData"));
136 if (simplificationData==0)
139 LERROR <<
"No simplificationData in DefineString constraint";
142 std::vector<LinguisticGraphVertex> stringDef;
143 if (simplificationData->coordStringsDefs().find(complement) == simplificationData->coordStringsDefs().end())
146 LWARN <<
"No such coord string defined: " << complement;
151 stringDef = (*simplificationData->coordStringsDefs().find(complement)).second;
154 if (simplificationData->coordStrings().find(complement) == simplificationData->coordStrings().end())
156 simplificationData->coordStrings().insert(std::make_pair(complement, std::vector< std::vector < LinguisticGraphVertex > >()));
159 std::vector<LinguisticGraphVertex> newString;
160 LDEBUG <<
"Add " << v1 <<
" to new SameString " << complement;
161 newString.push_back(v1);
165 next = boost::target(*(boost::out_edges(next, *graph).first),*graph);
166 LDEBUG <<
"Add " << next <<
" to new string " << complement;
167 newString.push_back(next);
169 if (!stringDef.empty() && newString.size() != stringDef.size())
171 LDEBUG <<
"New string and model for " << complement <<
" have different sizes";
175 if (stringDef.empty() && (*simplificationData->coordStrings().find(complement)).second.empty() )
177 LDEBUG <<
"No definition and no same string yet : using myself";
178 stringDef = newString;
180 else if (stringDef.empty())
182 LDEBUG <<
"No definition yet : using first found same string";
183 stringDef = *(*simplificationData->coordStrings().find(complement)).second.begin();
186 std::vector<LinguisticGraphVertex>::const_iterator dit = stringDef.begin();
187 std::vector<LinguisticGraphVertex>::const_iterator nit = newString.begin();
189 for (; dit != stringDef.end(); dit++, nit++)
193 std::set<LinguisticCode> microFilters = msdDef->
allValues(*m_microAccessor);
194 std::list<LinguisticCode> lmicroFilters;
195 std::copy(microFilters.begin(),microFilters.end(),std::insert_iterator< std::list<LinguisticCode> >(lmicroFilters,lmicroFilters.end()));
197 if (!(msdNew!=0 && msdNew->
hasUniqueMicro(*m_microAccessor,lmicroFilters)))
199 LDEBUG <<
"new string vertex " << *nit <<
" and model string vertex " << *dit <<
" have different micro categories";
203 LDEBUG <<
"Add string " << v1 <<
"/" << v2 <<
" to same strings of " << complement;
204 simplificationData->coordStrings()[complement].push_back(newString);
222 LDEBUG <<
"clearing stored subsentences";
243 LDEBUG <<
"clearing stored subsentences";
A graph that stores the relations of syntactic dependency between the elements of a DependencyGraph.
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
Data used for the simplification of sentences allowing easier heterosyntagmatic analysis.
Data used for the syntactic analyzis of texts.
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
An AnalysisData containing a LinguisticGraph with a language and an id.
const LinguisticGraphVertex & lastVertex(void) const
Returns the last vertex of the graph.
const LinguisticGraph * getGraph(void) const
Returns the underlying graph structure.
const LinguisticGraphVertex & firstVertex(void) const
Returns the first vertex of the graph.
Holds morphosyntactic informations.
bool hasUniqueMicro(const Lima::Common::PropertyCode::PropertyAccessor µAccessor, const std::list< Lima::LinguisticCode > µFilter)
return true if there is only one micro, and this micro is in microfilter
std::set< LinguisticCode > allValues(const Common::PropertyCode::PropertyAccessor &propertyAccessor) const
DefineModel(MediaId language, const LimaString &complement=LimaString())
bool operator()(const Lima::LinguisticProcessing::LinguisticAnalysisStructure::AnalysisGraph &graph, const LinguisticGraphVertex &v1, const LinguisticGraphVertex &v2, AnalysisContent &analysis) const override
binary constraint function : the constraint only applies on two vertices in the graph (the graph is a...
DefineString(MediaId language, const LimaString &complement=LimaString())
bool operator()(const Lima::LinguisticProcessing::LinguisticAnalysisStructure::AnalysisGraph &graph, const LinguisticGraphVertex &v1, const LinguisticGraphVertex &v2, AnalysisContent &analysis) const override
binary constraint function : the constraint only applies on two vertices in the graph (the graph is a...
SameString(MediaId language, const LimaString &complement=LimaString())
bool operator()(const Lima::LinguisticProcessing::LinguisticAnalysisStructure::AnalysisGraph &graph, const LinguisticGraphVertex &v1, const LinguisticGraphVertex &v2, AnalysisContent &analysis) const override
binary constraint function : the constraint only applies on two vertices in the graph (the graph is a...
bool operator()(const Lima::LinguisticProcessing::LinguisticAnalysisStructure::AnalysisGraph &graph, const LinguisticGraphVertex &v1, const LinguisticGraphVertex &v2, AnalysisContent &analysis) const override
binary constraint function : the constraint only applies on two vertices in the graph (the graph is a...
SetInstance(MediaId language, const LimaString &complement=LimaString())
static const MediaticData & single()
const singleton accessor
std::string limastring2utf8stdstring(const Lima::LimaString &phrase, uint32_t size0)
Convert a wide string to a string , in dest up to size bytes.
Automaton::ConstraintFunctionFactory< SetInstance > SetInstanceFactory(SetInstanceId)
Automaton::ConstraintFunctionFactory< DefineModel > DefineModelFactory(DefineModelId)
Automaton::ConstraintFunctionFactory< DefineString > DefineStringFactory(DefineStringId)
Automaton::ConstraintFunctionFactory< SameString > SameStringFactory(SameStringId)