LIMA
Libre Multilingual Analyzer — C++ API
Loading...
Searching...
No Matches
costFunctions.h
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#ifndef LIMA_POSTAGGER_COSTFUNCTION_H
7#define LIMA_POSTAGGER_COSTFUNCTION_H
8
9#include "ngramMatrices.h"
10
11namespace Lima
12{
13namespace LinguisticProcessing
14{
15namespace PosTagger
16{
17
18
19template<typename Cost>
21{
22 public:
23
25 const TrigramMatrix* trigrams,
26 const BigramMatrix* bigrams,
27 Cost trigramCost,
28 Cost bigramCost,
29 Cost unigramCost,
30 Cost minimumCost,
31 Cost maximumCost) :
32 m_trigrams(trigrams),
33 m_bigrams(bigrams),
34 m_trigramCost(trigramCost),
35 m_bigramCost(bigramCost),
36 m_unigramCost(unigramCost),
37 m_minimumCost(minimumCost),
38 m_maximumCost(maximumCost)
39 {}
40
42
43 Cost operator()(uint64_t cat1,uint64_t cat2,uint64_t cat3) const;
44
45 inline Cost getMinimumCost() const { return m_minimumCost; }
46
47 inline Cost getMaximumCost() const { return m_maximumCost; }
48
49 private:
50
51 const TrigramMatrix* m_trigrams;
52 const BigramMatrix* m_bigrams;
53
54 Cost m_trigramCost;
55 Cost m_bigramCost;
56 Cost m_unigramCost;
57 Cost m_minimumCost;
58 Cost m_maximumCost;
59
60};
61
62template<typename Cost>
63Cost SimpleCostFunction<Cost>::operator()(uint64_t cat1,uint64_t cat2,uint64_t cat3) const
64{
65 if (m_trigrams->exists(cat1,cat2,cat3))
66 {
67 return m_trigramCost;
68 }
69 if (m_bigrams->exists(cat2,cat3))
70 {
71 return m_bigramCost;
72 }
73 return m_unigramCost;
74}
75
76template<typename Cost>
78{
79 public:
80
82 const TrigramMatrix* trigrams,
83 const BigramMatrix* bigrams,
84 float trigramThreshold,
85 Cost goodTrigramCost,
86 Cost badTrigramCost,
87 Cost bigramCost,
88 Cost unigramCost,
89 Cost minimumCost,
90 Cost maximumCost) :
91 m_trigrams(trigrams),
92 m_bigrams(bigrams),
93 m_trigramThreshold(trigramThreshold),
94 m_goodTrigramCost(goodTrigramCost),
95 m_badTrigramCost(badTrigramCost),
96 m_bigramCost(bigramCost),
97 m_unigramCost(unigramCost),
98 m_minimumCost(minimumCost),
99 m_maximumCost(maximumCost)
100 {}
101
103
104 Cost operator()(uint64_t cat1,uint64_t cat2,uint64_t cat3) const;
105
106 inline Cost getMinimumCost() const { return m_minimumCost; }
107
108 inline Cost getMaximumCost() const { return m_maximumCost; }
109
110 private:
111
112 const TrigramMatrix* m_trigrams;
113 const BigramMatrix* m_bigrams;
114
115 float m_trigramThreshold;
116 Cost m_goodTrigramCost;
117 Cost m_badTrigramCost;
118 Cost m_bigramCost;
119 Cost m_unigramCost;
120 Cost m_minimumCost;
121 Cost m_maximumCost;
122
123};
124
125template<typename Cost>
126Cost ThresholdCostFunction<Cost>::operator()(uint64_t cat1,uint64_t cat2,uint64_t cat3) const
127{
128 float f=m_trigrams->freq(cat1,cat2,cat3);
129 if (f!=0)
130 {
131 float b=m_bigrams->freq(cat1,cat2);
132 if ( (b>0) && ((f/b)>m_trigramThreshold))
133 {
134 return m_goodTrigramCost;
135 }
136 else
137 {
138 return m_badTrigramCost;
139 }
140 }
141 if (m_bigrams->exists(cat2,cat3))
142 {
143 return m_bigramCost;
144 }
145 return m_unigramCost;
146}
147
148
149}
150}
151}
152
153#endif
float freq(LinguisticCode cat1, LinguisticCode cat2) const
SimpleCostFunction(const TrigramMatrix *trigrams, const BigramMatrix *bigrams, Cost trigramCost, Cost bigramCost, Cost unigramCost, Cost minimumCost, Cost maximumCost)
Cost operator()(uint64_t cat1, uint64_t cat2, uint64_t cat3) const
Cost operator()(uint64_t cat1, uint64_t cat2, uint64_t cat3) const
ThresholdCostFunction(const TrigramMatrix *trigrams, const BigramMatrix *bigrams, float trigramThreshold, Cost goodTrigramCost, Cost badTrigramCost, Cost bigramCost, Cost unigramCost, Cost minimumCost, Cost maximumCost)
NAUTITIA.
Defines Bigrams and Trigrams matrices *.