-
Franck Dary authoredFranck Dary authored
ReadingMachine.hpp 1.70 KiB
#ifndef READING_MACHINE__H
#define READING_MACHINE__H
#include <filesystem>
#include <memory>
#include "Classifier.hpp"
#include "Strategy.hpp"
#include "Dict.hpp"
class ReadingMachine
{
public :
static inline const std::string defaultMachineFilename = "machine.rm";
static inline const std::string defaultModelFilename = "{}.pt";
static inline const std::string lastModelFilename = "{}.last";
static inline const std::string defaultDictFilename = "{}.dict";
static inline const std::string defaultDictName = "_default_";
private :
std::string name;
std::filesystem::path path;
std::unique_ptr<Classifier> classifier;
std::unique_ptr<Strategy> strategy;
std::map<std::string, Dict> dicts;
std::set<std::string> predicted;
bool _dictsAreNew{false};
std::unique_ptr<TransitionSet> splitWordTransitionSet{nullptr};
private :
void readFromFile(std::filesystem::path path);
void save(const std::string & modelNameTemplate) const;
public :
ReadingMachine(std::filesystem::path path);
ReadingMachine(std::filesystem::path path, std::vector<std::filesystem::path> models, std::vector<std::filesystem::path> dicts);
TransitionSet & getTransitionSet();
TransitionSet & getSplitWordTransitionSet();
bool hasSplitWordTransitionSet() const;
Strategy & getStrategy();
Dict & getDict(const std::string & state);
std::map<std::string, Dict> & getDicts();
Classifier * getClassifier();
bool isPredicted(const std::string & columnName) const;
const std::set<std::string> & getPredicted() const;
void trainMode(bool isTrainMode);
void setDictsState(Dict::State state);
void saveBest() const;
void saveLast() const;
void saveDicts() const;
bool dictsAreNew() const;
};
#endif