#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