27#include <boost/algorithm/string/replace.hpp>
34using namespace boost::tuples;
44namespace LinguisticProcessing
47namespace AnalysisDumpers
81 if (m_graph==
"AnalysisGraph") {
90 m_verbTenseFlag=string(
"False");
111 if (str==
"1" || str==
"true" || str==
"yes") {
121 m_propertyAccessor=&codeManager.getPropertyAccessor(m_property);
122 m_propertyManager=&codeManager.getPropertyManager(m_property);
126 m_timeManager=&codeManager.getPropertyManager(timeCode.toUtf8().constData());
127 m_timeAccessor=&codeManager.getPropertyAccessor(timeCode.toUtf8().constData());
134 auto metadata = std::dynamic_pointer_cast<LinguisticMetaData>(analysis.
getData(
"LinguisticMetaData"));
136 LERROR <<
"no LinguisticMetaData ! abort";
142 map<Token*,vector<MorphoSyntacticData*>,
lTokenPosition > categoriesMapping;
144 auto tokenList = std::dynamic_pointer_cast<AnalysisGraph>(analysis.
getData(m_graph));
146 LERROR <<
"graph " << m_graph <<
" has not been produced: check pipeline";
157 std::queue<LinguisticGraphVertex> toVisit;
158 std::set<LinguisticGraphVertex> visited;
159 toVisit.push(tokenList->firstVertex());
162 while (!toVisit.empty()) {
165 if (v == tokenList->lastVertex()) {
169 for (boost::tie(outItr,outItrEnd)=out_edges(v,*graph); outItr!=outItrEnd; outItr++)
172 if (visited.find(next)==visited.end())
174 visited.insert(next);
181 categoriesMapping[ft].push_back(get(
vertex_data,*graph,v));
187 boost::tie(vxItr,vxItrEnd) = vertices(*graph);
188 for (;vxItr!=vxItrEnd;vxItr++)
193 categoriesMapping[ft].push_back(get(
vertex_data,*graph,*vxItr));
198 for (map<
Token*,vector<MorphoSyntacticData*>,
lTokenPosition >::const_iterator ftItr=categoriesMapping.begin();
199 ftItr!=categoriesMapping.end();
202 outputVertex(dstream->out(),ftItr->first,ftItr->second,sp,metadata->getStartOffset());
209void TextDumper::outputVertex(std::ostream& out,
211 const vector<MorphoSyntacticData*>& data,
213 uint64_t offset)
const
219 std::ostringstream os;
220 uint64_t position=ft->
position() + offset;
221 os << position << m_sep;
224 for (vector<MorphoSyntacticData*>::const_iterator dataItr=data.begin(),
225 dataItr_end=data.end(); dataItr!=dataItr_end; dataItr++)
228 sort(data->begin(),data->end(),sorter);
229 StringsPoolIndex norm(0),curNorm(0);
231 for (MorphoSyntacticData::const_iterator elemItr=data->begin();
232 elemItr!=data->end();
235 curNorm=elemItr->normalizedForm;
236 curMicro=m_propertyAccessor->
readValue(elemItr->properties);
237 curTense=m_timeAccessor->
readValue(elemItr->properties);
238 if ((curNorm != norm) || (curMicro != micro)) {
243 std::ostringstream os2;
247 std::ostringstream os3;
251 if(m_verbTenseFlag ==
"True"){
252 std::ostringstream os4;
253 bool wordIsVerb =
false;
255 if (subStrPos != std::string::npos){
258 if (wordIsVerb ==
true){
277void TextDumper::outputString(std::ostream& out,
const std::string& str)
const
280 boost::replace_all(newstr,
"\n",
"\n");
A graph structure for linguistic analysis.
LinguisticGraph::vertex_iterator LinguisticGraphVertexIt
LinguisticGraph::vertex_descriptor LinguisticGraphVertex
LinguisticGraph::out_edge_iterator LinguisticGraphOutEdgeIt
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, LinguisticVertexProperties > LinguisticGraph
Property to identify the chains in the graph.
Defines a Factory to create Object of type Base.
#define TEXTDUMPER_CLASSID
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
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.
std::string & getParamsValueAtKey(const std::string &key)
return a message when a 'param' was not found
Manage initialization of InitializableObjects using configuration module and parameters.
const InitializationParameters & getInitializationParameters() const
get Initialization 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) override
initialize with parameters from configuration file.
LimaStatusCode process(AnalysisContent &analysis) const override
Process on data in analysisContent.
Holds morphosyntactic informations.
holds surface data of a token
uint64_t position() const
const LimaString & stringForm() const
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.
SimpleFactory< MediaProcessUnit, TextDumper > textDumperFactory(TEXTDUMPER_CLASSID)
PUGI__FN void sort(I begin, I end, const Pred &pred)
launch exception related to the configuration file parsing