#pragma once #if !defined(ARCADIA_BUILD) # include "config_core.h" #endif #if USE_NLP #include #include #include #include #include #include #include namespace DB { class ISynonymsExtension { public: using Synset = std::vector; virtual const Synset * getSynonyms(std::string_view token) const = 0; virtual ~ISynonymsExtension() = default; }; class SynonymsExtensions { public: using ExtPtr = std::shared_ptr; explicit SynonymsExtensions(const Poco::Util::AbstractConfiguration & config); ExtPtr getExtension(const String & name); private: struct Info { String path; String type; }; using ExtContainer = std::unordered_map; using InfoContainer = std::unordered_map; std::mutex mutex; ExtContainer extensions; InfoContainer info; }; } #endif