LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
disambiguationLogger.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
24
25#include <iostream>
26#include <fstream>
27#include <sstream>
28
29using namespace std;
30using namespace boost;
31using namespace Lima::Common::Misc;
32using namespace Lima::Common::MediaticData;
35
36namespace Lima
37{
38namespace LinguisticProcessing
39{
40namespace PosTagger
41{
42
43struct lToken
44{
45 bool operator()(const Token* t1, const Token* t2) const
46 {
47 if (t1->position()!=t2->position()) return t1->position() < t2->position();
48 return t1->length() < t2->length();
49 }
50};
51
53
57
60
63 Manager* manager)
64
65{
71 m_language=manager->getInitializationParameters().media;
72 m_microManager=&(static_cast<const Common::MediaticData::LanguageData&>(Common::MediaticData::MediaticData::single().mediaData(m_language)).getPropertyCodeManager().getPropertyManager("MICRO"));
73 try
74 {
75 m_logAll=(unitConfiguration.getParamsValueAtKey("logAll")=="true");
76 }
77 catch (NoSuchParam& )
78 {
79 m_logAll=false;
80 }
81}
82
83
84// Each token of the specified path is
85// searched into the specified dictionary.
87 AnalysisContent& analysis) const
88{
90 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.getData("LinguisticMetaData"));
91 if (metadata == 0) {
93 LERROR << "no LinguisticMetaData ! abort";
94 return MISSING_DATA;
95 }
96 ofstream fout;
97 openLogFile(fout,metadata->getMetaData("FileName"));
98
99 map<Token*,set<LinguisticCode>,lToken > categoriesMapping;
100
101 auto tokenList = std::dynamic_pointer_cast<AnalysisGraph>(analysis.getData("PosGraph"));
102 LinguisticGraph* graph=tokenList->getGraph();
103
104 LinguisticGraphVertexIt vxItr,vxItrEnd;
105 boost::tie(vxItr,vxItrEnd) = vertices(*graph);
106 for (;vxItr!=vxItrEnd;vxItr++)
107 {
108 MorphoSyntacticData* data=get(vertex_data,*graph,*vxItr);
109 Token* token=get(vertex_token,*graph,*vxItr);
110 if( data!=0)
111 {
112 if (m_logAll)
113 {
114 data->allValues(m_microManager->getPropertyAccessor(),categoriesMapping[token]);
115 }
116 else
117 {
118 if (data->begin() != data->end())
119 {
120 LinguisticCode micro=m_microManager->getPropertyAccessor().readValue(data->begin()->properties);
121 categoriesMapping[token].insert(micro);
122 }
123 }
124 }
125 }
126
127 for (map<Token*,set<LinguisticCode>,lToken >::const_iterator ftItr=categoriesMapping.begin();
128 ftItr!=categoriesMapping.end();
129 ftItr++)
130 {
131
132 Token* ft=ftItr->first;
133// uint64_t nbmicros=ft->countMicros();
134 std::ostringstream os;
135 os << ft->position() << " | ";
136 fout << os.str();
138 std::ostringstream os2;
139 for (std::set<LinguisticCode>::const_iterator catItr=ftItr->second.begin();
140 catItr!=ftItr->second.end();
141 catItr++)
142 {
143 os2 << " | " << m_microManager->getPropertySymbolicValue(*catItr);
144 }
145 fout << os2.str() << endl;
146
147 }
148
149 fout.close();
150 TimeUtils::logElapsedTime("DisambiguationLogger");
151 return SUCCESS_ID;
152}
153
154} // MorphologicAnalysis
155} // LinguisticProcessing
156} // Lima
#define LERROR
Definition LimaCommon.h:161
LinguisticGraph::vertex_iterator LinguisticGraphVertexIt
@ vertex_token
@ vertex_data
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
#define PTLOGINIT
Defines a Factory to create Object of type Base.
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
Holds linguistic data for one language.
const MediaData & mediaData(MediaId media) const
LinguisticCode readValue(const LinguisticCode &code) const
read a property in a coded int.
const std::string & getPropertySymbolicValue(const LinguisticCode &value) const
The coded property value can hold several property data.
const PropertyAccessor & getPropertyAccessor() const
give the corresponding PropertyAccessor
return a message when a 'param' was not found
A generic process unit to log information in files: contains some common informations such as : outpu...
bool openLogFile(std::ofstream &output, const std::string &sourceFile) const
std::set< LinguisticCode > allValues(const Common::PropertyCode::PropertyAccessor &propertyAccessor) const
virtual LimaStatusCode process(AnalysisContent &analysis) const override
Process on data in analysisContent.
virtual void init(Common::XMLConfigurationFiles::GroupConfigurationStructure &unitConfiguration, Manager *manager) override
initialize with parameters from configuration file.
static const MediaticData & single()
const singleton accessor
Definition Singleton.h:51
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
logger for checking chinese segmentation
#define DISAMBIGUATIONLOGGER_CLASSID
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, DisambiguationLogger > disambiguationLoggerFactory(DISAMBIGUATIONLOGGER_CLASSID)
NAUTITIA.
LimaStatusCode
Definition LimaCommon.h:236
@ SUCCESS_ID
Definition LimaCommon.h:237
@ MISSING_DATA
Definition LimaCommon.h:243
STL namespace.
bool operator()(const Token *t1, const Token *t2) const
launch exception related to the configuration file parsing