chinese-journal/rudict/rudict/noun.h
2014-11-26 13:11:46 +00:00

74 lines
1.6 KiB
C++

#ifndef NOUN_H_INCLUDED
#define NOUN_H_INCLUDED
#include <string>
#include <map>
#include <set>
#include <vector>
#include <fstream>
#include <codecvt>
#include "boost/algorithm/string.hpp"
enum NounDeclencion
{
ND_1_HARD, // Ïàïà (ïàïû)
ND_1_SOFT, // Äîñêà (äîñêè)
ND_2_HARD_MALE, // Òðàêòîð (òðàêòîðû)
ND_2_SOFT_MALE, // Òîïîëü (òîïîëè)
ND_2_NEUTER_O, // Áðåâíî (áð¸âíà)
ND_2_NEUTER_E, // Ïîëå (ïîëÿ)
ND_3 // Ëîøàäü
};
enum NounGrammaticalCase
{
NGC_P1_NOMINATIVE,
NGC_P2_GENITIVE,
NGC_P3_DATIVE,
NGC_P4_ACCUSATIVE,
NGC_P5_INSTRUMENTAL,
NGC_P6_PREPOSITIONAL
};
enum NounNumber
{
NPF_SINGULAR,
NPF_PLURAL
};
typedef std::tuple<NounDeclencion, NounGrammaticalCase, NounNumber> NounTuple;
std::vector<std::wstring> GetAllNounEndingArr();
std::map<NounTuple, std::wstring> getNounEndingTable();
bool NounIsInDictionary(std::wstring nounNominative);
std::set<NounDeclencion> GetPossibleNounDeclencionSet(std::wstring nounNominative);
bool charIsConsolant(wchar_t c);
bool charIsVowel(wchar_t c);
struct NounStruct
{
NounTuple nounTuple;
std::wstring noun;
};
std::vector<std::pair<std::wstring, std::wstring>> getPossibleNounEndingDivisionArr(std::wstring noun);
std::vector<NounTuple> GetPossibleNounTupleArr(std::wstring nounEnding);
//std::vector<NounTuple> FilterNounTupleArrByNounDeclentionSet(std::vector<NounTuple> nounTupleArr, std::set<NounDeclencion> filter);
std::wstring RestoreNounByTuple(std::wstring nounBase, NounTuple nounTuple);
std::vector<NounStruct> RecognizeNoun(std::wstring noun);
void LoadFrequentWordSet();
#endif //NOUN_H_INCLUDED