LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
AccentedConcatenatedDataHandler.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 ***************************************************************************/
12
14
15namespace Lima
16{
17
18namespace LinguisticProcessing
19{
20
21namespace MorphologicAnalysis
22{
23
25 const LimaString& sourceStr,
26 uint64_t positionOffset,
27 const TStatus& status,
29 const FsaStringsPool* sp,
30 FlatTokenizer::CharChart* charChart) :
31 m_graph(outputGraph),
32 m_srcStr(sourceStr),
33 m_positionOffset(positionOffset),
34 m_status(status),
35 m_stringsPool(sp),
36 m_charChart(charChart),
37 m_concatVertices(),
38 m_currentToken(0),
39 m_currentData(0),
40 m_currentElement()
41{
42 m_currentElement.type=type;
43
44 std::vector<unsigned char> mapping;
45 LimaString desacc=m_charChart->unmarkWithMapping(m_srcStr,mapping);
46 m_unmarkToTextMapping.resize(desacc.size()+1);
47 unsigned char i=0;
48 for (std::vector<unsigned char>::const_iterator it=mapping.begin();
49 it!=mapping.end();
50 it++,i++)
51 {
52 m_unmarkToTextMapping[*it]=i;
53 }
54 m_unmarkToTextMapping.back()=m_srcStr.size();
55// std::cerr << "m_unmarkToTextMapping size = " << m_unmarkToTextMapping.size() << std::endl;
56
57
58 m_charChart->unmarkWithMapping(sourceStr,m_positionMapping);
59 for (std::vector<unsigned char>::iterator it=m_positionMapping.begin();
60 it!=m_positionMapping.end();
61 it++)
62 {
63 *it = m_unmarkToTextMapping[*it];
64 }
65 m_positionMapping.push_back(m_unmarkToTextMapping.back());
66// std::cerr << "position mapping size = " << m_positionMapping.size() << std::endl;
67// std::copy(m_positionMapping.begin(),m_positionMapping.end(),std::ostream_iterator<int>(std::cerr,","));
68
69}
70
71
74
76{
77 const LimaString& accentedForm=(*m_stringsPool)[form];
78#ifdef DEBUG_LP
80 LDEBUG << "AccentedConcatenatedDataHandler::foundAccentedForm" << accentedForm;
81#endif
82 m_charChart->unmarkWithMapping(accentedForm,m_positionMapping);
83 for (std::vector<unsigned char>::iterator it=m_positionMapping.begin();
84 it!=m_positionMapping.end();
85 it++)
86 {
87 if (*it < m_unmarkToTextMapping.size())
88 {
89 *it = m_unmarkToTextMapping[*it];
90 }
91 }
92 m_positionMapping.push_back(m_unmarkToTextMapping.back());
93// std::cerr << "position mapping size = " << m_positionMapping.size() << std::endl;
94// std::copy(m_positionMapping.begin(),m_positionMapping.end(),std::ostream_iterator<int>(std::cerr,","));
95}
96
101
102void AccentedConcatenatedDataHandler::foundLingInfos(StringsPoolIndex lemma,StringsPoolIndex norm)
103{
104 m_currentElement.lemma=lemma;
105 m_currentElement.normalizedForm=norm;
106}
107
110
112{
113 m_concatVertices.push_back(std::vector<LinguisticGraphVertex>());
114}
115
116void AccentedConcatenatedDataHandler::foundComponent(uint64_t position, uint64_t length,StringsPoolIndex form)
117{
118// std::cerr << "found component : " << position << ", " << length << std::endl;
119// std::cerr << "mapping " << position << " => " << (int)m_positionMapping[position] << std::endl;
120// std::cerr << "mapping " << position + length << " => " << (int)m_positionMapping[position+length] << std::endl;
121 // create vertex and link if necessary
122 LinguisticGraphVertex componentVertex=add_vertex(*m_graph);
123 std::vector<LinguisticGraphVertex>& concatenated=m_concatVertices.back();
124 if (concatenated.size()>0)
125 {
126 add_edge(concatenated.back(),componentVertex,*m_graph);
127 }
128 concatenated.push_back(componentVertex);
129
130 m_currentToken=new Token(
131 form,
132 (*m_stringsPool)[form],
133 m_positionOffset+m_positionMapping[position],
134 m_positionMapping[position + length] - m_positionMapping[position],
135 m_status);
136 put(vertex_token,*m_graph,componentVertex,m_currentToken);
137 m_currentData=new MorphoSyntacticData();
138 put(vertex_data,*m_graph,componentVertex,m_currentData);
139 m_currentElement.inflectedForm=form;
140// std::cerr << "transcode component : " << m_currentToken->position() << ", " << m_currentToken->length() << std::endl;
141}
142
144{
145 m_currentData=0;
146 m_currentToken=0;
147}
148
152
154{
155 if (m_currentData) {
156 m_currentElement.properties=lings;
157 m_currentData->push_back(m_currentElement);
158 }
159}
160
161
162}
163
164}
165
166}
#define LDEBUG
Definition LimaCommon.h:157
@ vertex_token
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
@ vertex_data
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
#define MORPHOLOGINIT
LimaString unmarkWithMapping(const LimaString &str, std::vector< unsigned char > &mapping) const
AccentedConcatenatedDataHandler(LinguisticGraph *outputGraph, const LimaString &sourceStr, uint64_t positionOffset, const LinguisticAnalysisStructure::TStatus &status, LinguisticAnalysisStructure::MorphoSyntacticType type, const FsaStringsPool *sp, FlatTokenizer::CharChart *charChart)
virtual void foundComponent(uint64_t position, uint64_t length, StringsPoolIndex form) override
virtual void foundLingInfos(StringsPoolIndex lemma, StringsPoolIndex norm) override
NAUTITIA.
QString LimaString
Definition LimaString.h:33