MorphInterpretation.cpp 2.99 KB
/* 
 * File:   MorphInterpretation.cpp
 * Author: mlenart
 * 
 * Created on November 14, 2013, 11:47 AM
 */

#include <string>
#include <sstream>
#include "MorphInterpretation.hpp"
#include "EncodedInterpretation.hpp"

using namespace std;

MorphInterpretation::MorphInterpretation(
        int startNode,
        int endNode,
        const string& orth,
        const string& lemma,
        const string& homonymId,
        int tagnum,
        int namenum,
        int qualifiersNum,
        const Environment& env)
: startNode(startNode),
endNode(endNode),
orth(orth),
lemma(lemma),
homonymId(homonymId),
tagnum(tagnum),
namenum(namenum),
tag(env.getTagset().getTag(tagnum, env.getCharsetConverter())),
name(env.getTagset().getName(namenum, env.getCharsetConverter())),
qualifiers(env.getQualifiersHelper().getQualifiers(qualifiersNum)) {

}

MorphInterpretation::MorphInterpretation(
        int startNode,
        const std::string& orth,
        const Environment& env)
: startNode(startNode),
endNode(startNode + 1),
orth(orth),
lemma(orth),
homonymId(""),
tagnum(0),
namenum(0),
//        qualifiersNum(0),
tag(env.getTagset().getTag(0, env.getCharsetConverter())),
name(env.getTagset().getName(0, env.getCharsetConverter())),
qualifiers() {

}

MorphInterpretation MorphInterpretation::createIgn(int startNode, const std::string& orth, const Environment& env) {
    return MorphInterpretation(startNode, orth, env);
}

int MorphInterpretation::getStartNode() const {
    return this->startNode;
}

int MorphInterpretation::getEndNode() const {
    return this->endNode;
}

const std::string& MorphInterpretation::getOrth() const {
    return this->orth;
}

const std::string& MorphInterpretation::getLemma() const {
    return this->lemma;
}

const std::string& MorphInterpretation::getHomonymId() const {
    return this->homonymId;
}

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;
}

const vector<string>& MorphInterpretation::getQualifiers() const {
    return this->qualifiers;
}

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;
}

std::string MorphInterpretation::toString(bool includeNodeNumbers) const {
    std::stringstream res;
    if (includeNodeNumbers) {
        res << startNode << "," << endNode << ",";
    }
    res << orth << ",";

    res << lemma;
    if (!this->homonymId.empty()) {
        res << ":" << homonymId;
    }
    res << ",";

    res << tag;
    if (!name.empty()) {
        res << "," << name;
    }
    if (!qualifiers.empty()) {
        res << "," << getQualifiersStr(*this);
    }
    return res.str();
}