|
1
2
3
4
5
6
7
8
|
/*
* File: MorphInterpretation.cpp
* Author: mlenart
*
* Created on November 14, 2013, 11:47 AM
*/
#include <string>
|
|
9
|
#include <sstream>
|
|
10
|
#include "MorphInterpretation.hpp"
|
|
11
|
#include "const.hpp"
|
|
12
13
14
|
using namespace std;
|
|
15
16
|
namespace morfeusz {
|
|
17
18
19
|
MorphInterpretation::MorphInterpretation(
int startNode,
int endNode,
|
|
20
21
|
const string& orth,
const string& lemma,
|
|
22
|
// const string& homonymId,
|
|
23
24
|
int tagnum,
int namenum,
|
|
25
26
27
28
29
30
|
int qualifiersNum,
const Environment& env)
: startNode(startNode),
endNode(endNode),
orth(orth),
lemma(lemma),
|
|
31
|
//homonymId(homonymId),
|
|
32
33
34
35
|
tagnum(tagnum),
namenum(namenum),
tag(env.getTagset().getTag(tagnum, env.getCharsetConverter())),
name(env.getTagset().getName(namenum, env.getCharsetConverter())),
|
|
36
|
qualifiers(&env.getQualifiersHelper().getQualifiers(qualifiersNum)) {
|
|
37
|
|
|
38
|
|
|
39
40
|
}
|
|
41
42
|
static const vector<std::string> emptyQualifiers;
|
|
43
44
45
46
47
48
49
50
51
52
|
MorphInterpretation::MorphInterpretation()
: startNode(),
endNode(),
orth(),
lemma(),
//homonymId(homonymId),
tagnum(),
namenum(),
tag(),
name(),
|
|
53
|
qualifiers(&emptyQualifiers){
|
|
54
55
56
|
}
|
|
57
58
59
|
MorphInterpretation::MorphInterpretation(
int startNode,
const std::string& orth,
|
|
60
61
62
63
64
|
const Environment& env)
: startNode(startNode),
endNode(startNode + 1),
orth(orth),
lemma(orth),
|
|
65
|
//homonymId(""),
|
|
66
67
68
69
70
|
tagnum(0),
namenum(0),
// qualifiersNum(0),
tag(env.getTagset().getTag(0, env.getCharsetConverter())),
name(env.getTagset().getName(0, env.getCharsetConverter())),
|
|
71
|
qualifiers(&emptyQualifiers) {
|
|
72
73
74
|
}
|
|
75
76
|
MorphInterpretation MorphInterpretation::createIgn(int startNode, const std::string& orth, const Environment& env) {
return MorphInterpretation(startNode, orth, env);
|
|
77
78
|
}
|
|
79
80
81
82
83
84
85
86
|
int MorphInterpretation::getStartNode() const {
return this->startNode;
}
int MorphInterpretation::getEndNode() const {
return this->endNode;
}
|
|
87
88
89
90
91
92
93
94
|
const std::string& MorphInterpretation::getOrth() const {
return this->orth;
}
const std::string& MorphInterpretation::getLemma() const {
return this->lemma;
}
|
|
95
96
97
98
99
100
101
|
static inline bool hasEnding(const string &fullString, const string &ending) {
if (fullString.length() >= ending.length()) {
return (0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending));
}
else {
return false;
}
|
|
102
103
|
}
|
|
104
105
106
107
108
109
110
111
112
113
114
|
bool MorphInterpretation::hasHomonym(const string& homonymId) const {
size_t homonymSeparatorIdx = this->lemma.length() - homonymId.length() - 1;
return homonymSeparatorIdx > 0
&& this->lemma[homonymSeparatorIdx] == HOMONYM_SEPARATOR
&& hasEnding(this->lemma, homonymId);
}
//const std::string& MorphInterpretation::getHomonymId() const {
// return this->homonymId;
//}
|
|
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
int MorphInterpretation::getTagnum() const {
return this->tagnum;
}
int MorphInterpretation::getNamenum() const {
return this->namenum;
}
const std::string& MorphInterpretation::getTag() const {
return this->tag;
}
const std::string& MorphInterpretation::getName() const {
return this->name;
}
|
|
131
|
const vector<string>& MorphInterpretation::getQualifiers() const {
|
|
132
|
return *this->qualifiers;
|
|
133
134
135
136
137
138
139
140
141
142
143
144
145
|
}
static inline string getQualifiersStr(const MorphInterpretation& mi) {
string res;
for (unsigned int i = 0; i < mi.getQualifiers().size(); i++) {
res += mi.getQualifiers()[i];
if (i + 1 < mi.getQualifiers().size()) {
res += "|";
}
}
return res;
}
|
|
146
147
148
149
150
151
|
std::string MorphInterpretation::toString(bool includeNodeNumbers) const {
std::stringstream res;
if (includeNodeNumbers) {
res << startNode << "," << endNode << ",";
}
res << orth << ",";
|
|
152
|
|
|
153
|
res << lemma;
|
|
154
155
156
|
// if (!this->homonymId.empty()) {
// res << ":" << homonymId;
// }
|
|
157
|
res << ",";
|
|
158
|
|
|
159
160
161
162
|
res << tag;
if (!name.empty()) {
res << "," << name;
}
|
|
163
|
if (!qualifiers->empty()) {
|
|
164
165
|
res << "," << getQualifiersStr(*this);
}
|
|
166
167
|
return res.str();
}
|
|
168
169
|
}
|