LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
EventData.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 *
8 * @file EventData.cpp
9 * @author Romaric Besancon (romaric.besancon@cea.fr)
10 * @date Fri Mar 25 2011
11 * copyright Copyright (C) 2011 by CEA LIST
12 *
13 ***********************************************************************/
14
15#include "EventData.h"
16
19#include "EventTemplateData.h"
20//#include "linguisticProcessing/common/annotationGraph/AnnotationData.h"
22//#include "linguisticProcessing/core/LinguisticAnalysisStructure/AnalysisGraph.h"
23#include "Events.h"
25
26
27using namespace std;
28using namespace Lima::Common;
29
30namespace Lima {
31namespace LinguisticProcessing {
32namespace EventAnalysis {
33
34//***********************************************************************
35// constructors and destructors
38m_entities()
39{
40}
41
44
46{
47 m_entities[type].push_back(e);
48}
49
50std::vector<MediaticData::EntityType> EventData::getEntityTypes() const
51{
52 std::vector<MediaticData::EntityType> types;
53 for (std::map<MediaticData::EntityType,std::vector<Entity> >::const_iterator
54 it=m_entities.begin(),it_end=m_entities.end();it!=it_end;it++) {
55 types.push_back((*it).first);
56 }
57 return types;
58}
59
61{
62 static Entity NullEntity;
63 std::map<MediaticData::EntityType,std::vector<Entity> >::const_iterator
64 entities=m_entities.find(type);
65 if (entities!=m_entities.end()) {
66 for (std::vector<Entity>::const_iterator it=(*entities).second.begin(),
67 it_end=(*entities).second.end();it!=it_end;it++) {
68 if ((*it).getMain()) {
69 return (*it);
70 }
71 }
72 }
73 return NullEntity;
74}
75
76EventParagraph* EventData::locate( Event* event, const Entity *entity ) const {
78 EventParagraph* result = 0;
79 for( std::vector< EventParagraph* >::iterator pars = event->begin() ;
80 pars != event->end() ; pars++ ) {
81 LDEBUG << "EventData::convertToEvents: try paragraph ( "
82 << (*pars)->getPosition() << ", " << (*pars)->getEnd() << " )...";
83 if( (entity->getPosition() >= (*pars)->getPosition()) &&
84 ((entity->getPosition()+entity->getLength()-1) <= (*pars)->getEnd() ) ) {
85 return (*pars);
86 }
87 }
88 return result;
89}
90
91//-------------------------------------------------------------------------------
92// conversion to Events (for compatibility with EventExtraction web service)
94convertToEvents(const SegmentationData* segmData) const
95{
97
98 Events* events=new Events();
99 // Only one event = main event is inserted
100 // because entities from only main event are managed
101 Event* event=new Event();
102 event->setMain();
103 events->push_back(event);
104 // may be more than one one paragraph per event
105
106 // get list of segments
107 int parNum = 1;
108 std::vector<Lima::LinguisticProcessing::Segment> const &segments = segmData->getSegments();
109// const Segment *mainSegment = 0;
110 // find paragraph of main event
111 LDEBUG << "EventData::convertToEvents: looking for main segment...";
112 for( std::vector<Lima::LinguisticProcessing::Segment>::const_iterator sIter = segments.begin() ;
113 sIter != segments.end() ; sIter++ ) {
114 LDEBUG << "EventData::convertToEvents: type of segment is " << sIter->getType();
115 if( !sIter->getType().compare("MAIN_EVENT") ) {
116// mainSegment = &(*sIter);
117 LDEBUG << "EventData::convertToEvents: location is ( "
118 << sIter->getPosBegin() << ", " << sIter->getPosEnd() << " )";
119 EventParagraph* eventPar=new EventParagraph();
120 eventPar->setPosition(sIter->getPosBegin());
121 eventPar->setLength(sIter->getLength());
122 eventPar->setId(parNum++);
123 event->push_back(eventPar);
124 }
125 }
126
127 const map<Common::MediaticData::EntityType,vector<Entity> >& entities=getEntities();
128// int i = 0;
129 for (map<Common::MediaticData::EntityType,vector<Entity> >::const_iterator
130 it=entities.begin(),it_end=entities.end();it!=it_end;it++) {
132 MediaticData::MediaticData::single().getEntityName((*it).first));
133 LDEBUG << "EventData::convertToEvents: process entity of type " << entityName;
134 for(std::vector<Entity>::const_iterator e=(*it).second.begin(),e_end=(*it).second.end();e!=e_end;e++)
135 {
136 // int pos = e->getPosition();
137 // int length = e->getlength();
138 // const Lima::LinguisticProcessing::Automaton::EntityFeatures& features = e->getFeatures();
139 //MediaticData::EntityType entityType = (*it).first;
140 Entity *entity = e->clone();
141 EventParagraph* eventPar=locate(event, entity);
142 if( eventPar == 0 ) {
143 LWARN << "EventData::convertToEvents: cannot find paragraph where to place event "
144 << entityName << " ( " << e->getPosition() << ", "
145 << (e->getPosition()+e->getLength()-1) << " )";
146 }
147 else if( !entityName.compare( "Seisme.SEISMIC_EVENT" ) )
148 {
149 LDEBUG << "EventData::convertToEvents: addEventEntity( "
150 << entityName << ", " << e->getOutputUTF8String() << " )";
151 eventPar->addEventEntity( (*it).first, entity );
152 }
153 else
154 {
155 LDEBUG << "EventData::convertToEvents: addEntity( "
156 << entityName << ", " << e->getOutputUTF8String() << " )";
157 eventPar->addEntity( (*it).first, entity );
158 }
159 }
160 }
161 LDEBUG << "EventData::convertToEvents: end...";
162
163 return events;
164}
165
166
167} // end namespace
168} // end namespace
169} // end namespace
#define LWARN
Definition LimaCommon.h:160
#define LDEBUG
Definition LimaCommon.h:157
#define EVENTANALYSISLOGINIT
just for semantics: base class for analysisData
std::map< Common::MediaticData::EntityType, std::vector< Entity > > & getEntities()
Definition EventData.h:49
const Entity & getMainEntity(const Common::MediaticData::EntityType &type) const
Definition EventData.cpp:60
EventParagraph * locate(Event *event, const Entity *entity) const
Definition EventData.cpp:76
std::vector< Common::MediaticData::EntityType > getEntityTypes() const
Definition EventData.cpp:50
void addEntity(const Common::MediaticData::EntityType &type, const Entity &e)
Definition EventData.cpp:45
Events * convertToEvents(const Lima::LinguisticProcessing::SegmentationData *segmData) const
Definition EventData.cpp:94
void addEventEntity(const Common::MediaticData::EntityType &type, Entity *entity)
void addEntity(const Common::MediaticData::EntityType &type, Entity *entity)
This class represents a list of elements, that are pointers on polymmorphic annotations that can be d...
Definition Event.h:44
const std::vector< Segment > & getSegments() const
std::string limastring2utf8stdstring(const Lima::LimaString &phrase, uint32_t size0)
Convert a wide string to a string , in dest up to size bytes.
NAUTITIA.
STL namespace.
static const struct TextHtmlEntity entities[]