LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
SentenceBoundariesXmlLogger.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
14#include "SegmentationData.h"
23
24#include <iostream>
25#include <fstream>
26#include <memory>
27
28using namespace std;
29//using namespace boost;
30using namespace Lima::Common::MediaticData;
32
33namespace Lima
34{
35namespace LinguisticProcessing
36{
37namespace LinguisticAnalysisStructure
38{
39
42
48
51
54 Manager* manager)
55
56{
57 AbstractTextualAnalysisDumper::init(unitConfiguration,manager);
58
59 try
60 {
61 m_graphId=unitConfiguration.getParamsValueAtKey("graph");
62 }
63 catch (NoSuchParam& ) {} // use default value
64 try
65 {
66 m_boundaries=unitConfiguration.getParamsValueAtKey("boundaries");
67 }
68 catch (NoSuchParam& ) {m_boundaries="SentenceBoundaries";} // use default value
69
70}
71
72// Each token of the specified path is
73// searched into the specified dictionary.
75 AnalysisContent& analysis) const
76{
78 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
79 if (metadata == 0)
80 {
82 LERROR << "no LinguisticMetaData ! abort";
83 return MISSING_DATA;
84 }
85 auto graph=std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData(m_graphId));
86
87 auto data=analysis.getData(m_boundaries);
88 if (data == 0) {
90 LERROR << "no SentenceBoundaries data";
91 return MISSING_DATA;
92 }
93 auto sb = std::dynamic_pointer_cast<SegmentationData>(data);
94
95 std::string docId("");
96 try {
97 docId=metadata->getMetaData("DocId");
98 }
100 // do nothing: not set in analyzeText (only in analyzeXmlDocuments)
101 }
102
103 uint64_t offsetIndexingNode(0);
104 try {
105 offsetIndexingNode=atoi(metadata->getMetaData("StartOffsetIndexingNode").c_str());
106 }
108 // do nothing: not set in analyzeText (only in analyzeXmlDocuments)
109 }
110
111 auto dstream=AbstractTextualAnalysisDumper::initialize(analysis);
112 ostream& out=dstream->out();
113
114 if (!docId.empty()) {
115 out << "<sentence_boundaries id=\""<< docId
116 << "\" offsetNode=\"" << offsetIndexingNode
117 << "\">" << endl;
118 }
119 else {
120 out << "<sentence_boundaries>" << endl;
121 }
122
123 for (vector<Segment>::const_iterator it=sb->getSegments().begin(),it_end=sb->getSegments().end();
124 it!=it_end; it++) {
125
126 // use end vertex of segment as sentence boundary
127 LinguisticGraphVertex end=(*it).getLastVertex();
128
129 if (end == graph->lastVertex()) {
130 //out << "<sentence_boundary special_value=\"END\"/>" << endl;
131 continue;
132 }
133
134 Token* t = get(vertex_token,*(graph->getGraph()), end);
135 out << "<sentence_boundary pos=\"" << t->position()
136 << "\" length=\"" << t->length()
137 << "\" value=\"" << Common::Misc::limastring2utf8stdstring(t->stringForm())
138 << "\"/>" << endl;
139 }
140 out << "</sentence_boundaries>" << endl;
141
142 TimeUtils::logElapsedTime("SentenceBoundariesXmlLogger");
143 return SUCCESS_ID;
144}
145
146} // LinguisticAnalysisStructure
147} // LinguisticProcessing
148} // Lima
#define LERROR
Definition LimaCommon.h:161
#define SENTENCEBOUNDARIESXMLLOGGER_CLASSID
@ vertex_token
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
#define SENTBOUNDLOGINIT
Defines a Factory to create Object of type Base.
logger for the sentence boundaries (XML format)
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
return a message when a 'param' was not found
Manage initialization of InitializableObjects using configuration module and parameters.
std::shared_ptr< DumperStream > initialize(AnalysisContent &analysis) const
virtual void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager)
initialize with parameters from configuration file.
LimaStatusCode process(AnalysisContent &analysis) const
Process on data in analysisContent.
static void logElapsedTime(const std::string &mess, const std::string &taskCategory=std::string(""))
log the number of microseconds since last UpdateCurrentTime
static void updateCurrentTime(const std::string &taskCategory=std::string(""))
store current time for new elapsed time computation
std::string limastring2utf8stdstring(const Lima::LimaString &phrase, uint32_t size0)
Convert a wide string to a string , in dest up to size bytes.
SimpleFactory< MediaProcessUnit, SentenceBoundariesXmlLogger > sentenceBoundariesXmlLoggerFactory(SENTENCEBOUNDARIESXMLLOGGER_CLASSID)
NAUTITIA.
LimaStatusCode
Definition LimaCommon.h:236
@ SUCCESS_ID
Definition LimaCommon.h:237
@ MISSING_DATA
Definition LimaCommon.h:243
STL namespace.
launch exception related to the configuration file parsing