#ifndef READING_MACHINE__H #define READING_MACHINE__H #include <filesystem> #include <memory> #include "Classifier.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"; private : std::string name; std::filesystem::path path; std::unique_ptr<Classifier> classifier; std::vector<std::string> strategyDefinition; std::vector<std::string> classifierDefinition; std::string classifierName; std::set<std::string> predicted; 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); TransitionSet & getTransitionSet(); TransitionSet & getSplitWordTransitionSet(); bool hasSplitWordTransitionSet() const; const std::vector<std::string> & getStrategyDefinition() const; 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; void loadDicts(); void loadLastSaved(); void setCountOcc(bool countOcc); void removeRareDictElements(float rarityThreshold); void resetClassifier(); }; #endif