LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
ViterbiPosTagger.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 ***************************************************************************/
10
11#include "ViterbiPosTagger.h"
12
17#include "integerCost.h"
18
19using namespace std;
20using namespace Lima::Common::MediaticData;
21
22namespace Lima
23{
24namespace LinguisticProcessing
25{
26namespace PosTagger
27{
28
29std::unique_ptr< ViterbiPosTaggerFactory > ViterbiPosTaggerFactory::s_instance=std::unique_ptr< ViterbiPosTaggerFactory >(new ViterbiPosTaggerFactory(VITERBIPOSTAGGER_CLASSID));
30
31
32ViterbiPosTaggerFactory::ViterbiPosTaggerFactory(const std::string& id) :
34{}
35
36std::shared_ptr<MediaProcessUnit> ViterbiPosTaggerFactory::create(
38 MediaProcessUnit::Manager* manager) const
39{
40
42 MediaId language=manager->getInitializationParameters().media;
43 const LanguageData& ldata = static_cast<const Common::MediaticData::LanguageData&>(MediaticData::single().mediaData(language));
45
46 // setting default category
47 LinguisticCode defaultCategory;
48 try
49 {
50 std::string id=unitConfiguration.getParamsValueAtKey("defaultCategory");
51 defaultCategory=microManager.getPropertyValue(id);
52 }
54 {
55 LWARN << "No default microcateg category ! use category PONCTU_FORTE";
56 defaultCategory=microManager.getPropertyValue("PONCTU_FORTE");
57 }
58
59 std::string trigramsFile;
60 std::string bigramsFile;
61 string resourcesPath=MediaticData::single().getResourcesPath();
62 try
63 {
64 trigramsFile = Common::Misc::findFileInPaths(resourcesPath.c_str(), unitConfiguration.getParamsValueAtKey("trigramFile").c_str()).toUtf8().constData();
65 bigramsFile=Common::Misc::findFileInPaths(resourcesPath.c_str(), unitConfiguration.getParamsValueAtKey("bigramFile").c_str()).toUtf8().constData();
66 }
68 {
69 LERROR << "No param 'trigramFile' or 'bigramFile' in ViterbiPosTagger group for language " << (int)language;
71 }
72
73 string costFunction;
74 try
75 {
76 costFunction=unitConfiguration.getParamsValueAtKey("costFunction");
77 }
79 {
80 LERROR << "No param 'costFuntion' in ViterbiPosTagger group for language " << (int)language;
82 }
83
84 std::shared_ptr<MediaProcessUnit> posTagger;
85
86 LINFO << "ViterbiPosTagger cost function is" << costFunction;
87 if (costFunction == "IntegerCost")
88 {
89
90 uint64_t trigramCost=0;
91 uint64_t bigramCost=1;
92 uint64_t unigramCost=3;
93 try
94 {
95 trigramCost=atoi(unitConfiguration.getParamsValueAtKey("trigramCost").data());
96 bigramCost=atoi(unitConfiguration.getParamsValueAtKey("bigramCost").data());
97 unigramCost=atoi(unitConfiguration.getParamsValueAtKey("unigramCost").data());
98 }
100 {
101 LWARN << "can't read all parameters for IntegerCost function ! use defaults";
102 }
103
104 LINFO << "ViterbiPosTagger use ViterbiIntegerCost with trigramCost = " << trigramCost << "; bigramCost = " << bigramCost << "; unigramCost = " << unigramCost;
105
106 ViterbiCostFunction<uint64_t,SimpleIntegerCostFactory<uint64_t> > costFunction(language, &microManager, SimpleIntegerCostFactory<uint64_t>(trigramCost,bigramCost,unigramCost), trigramsFile, bigramsFile);
107
108 posTagger = std::make_shared<ViterbiPosTagger< uint64_t, ViterbiCostFunction< uint64_t, SimpleIntegerCostFactory<uint64_t> > >>(costFunction);
109
110 }
111 else if (costFunction == "FrequencyCost")
112 {
113 ViterbiCostFunction<FrequencyCost,FrequencyCostFactory> costFunction(language,&microManager,FrequencyCostFactory(),trigramsFile,bigramsFile);
114 posTagger = std::make_shared<ViterbiPosTagger<FrequencyCost,ViterbiCostFunction<FrequencyCost,FrequencyCostFactory> >>(costFunction);
115 }
116 else
117 {
118 LERROR << "unknown costFuntion : " << costFunction << " ! ";
119 throw InvalidConfiguration();
120 }
121
122 posTagger->init(unitConfiguration,manager);
123
124 return posTagger;
125}
126
127} // PosTagger
128
129} // LinguisticProcessing
130
131} // Lima
#define LWARN
Definition LimaCommon.h:160
#define LINFO
Definition LimaCommon.h:158
#define LERROR
Definition LimaCommon.h:161
#define PTLOGINIT
#define VITERBIPOSTAGGER_CLASSID
Holds linguistic data for one language.
const PropertyCode::PropertyCodeManager & getPropertyCodeManager() const
const PropertyManager & getPropertyManager(const std::string &propertyName) const
Get the PropertyManager associated to a property.
Provide tools to manage a specific property.
LinguisticCode getPropertyValue(const std::string &symbolicValue) const
Get the coded property value from the symbolic value.
return a message when a 'param' was not found
Defines Factory for an Initializable Object.
Manage initialization of InitializableObjects using configuration module and parameters.
const InitializationParameters & getInitializationParameters() const
get Initialization Parameters
Use this exception to signal an error in one of the configuration files.
Definition LimaCommon.h:345
NAUTITIA.
STL namespace.
launch exception related to the configuration file parsing