class Jieba: support default dictpath

This commit is contained in:
yanyiwu 2024-09-21 23:51:32 +08:00
parent 6339262755
commit 445c98387c

View File

@ -8,19 +8,24 @@ namespace cppjieba {
class Jieba { class Jieba {
public: public:
Jieba(const string& dict_path, Jieba(const string& dict_path = "",
const string& model_path, const string& model_path = "",
const string& user_dict_path, const string& user_dict_path = "",
const string& idfPath, const string& idf_path = "",
const string& stopWordPath) const string& stop_word_path = "")
: dict_trie_(dict_path, user_dict_path), : dict_trie_(getPath(dict_path, "jieba.dict.utf8")),
model_(model_path), model_(getPath(model_path, "hmm_model.utf8")),
mp_seg_(&dict_trie_), mp_seg_(&dict_trie_),
hmm_seg_(&model_), hmm_seg_(&model_),
mix_seg_(&dict_trie_, &model_), mix_seg_(&dict_trie_, &model_),
full_seg_(&dict_trie_), full_seg_(&dict_trie_),
query_seg_(&dict_trie_, &model_), query_seg_(&dict_trie_, &model_),
extractor(&dict_trie_, &model_, idfPath, stopWordPath) { extractor(&dict_trie_, &model_,
getPath(idf_path, "idf.utf8"),
getPath(stop_word_path, "stop_words.utf8")) {
if (!user_dict_path.empty()) {
dict_trie_.LoadUserDict(user_dict_path);
}
} }
~Jieba() { ~Jieba() {
} }
@ -115,6 +120,39 @@ class Jieba {
} }
private: private:
static string pathJoin(const string& dir, const string& filename) {
if (dir.empty()) {
return filename;
}
char last_char = dir[dir.length() - 1];
if (last_char == '/' || last_char == '\\') {
return dir + filename;
} else {
#ifdef _WIN32
return dir + '\\' + filename;
#else
return dir + '/' + filename;
#endif
}
}
static string getCurrentDirectory() {
string path(__FILE__);
size_t pos = path.find_last_of("/\\");
return (pos == string::npos) ? "" : path.substr(0, pos);
}
static string getPath(const string& path, const string& default_file) {
if (path.empty()) {
string current_dir = getCurrentDirectory();
string parent_dir = current_dir.substr(0, current_dir.find_last_of("/\\"));
string grandparent_dir = parent_dir.substr(0, parent_dir.find_last_of("/\\"));
return pathJoin(pathJoin(grandparent_dir, "dict"), default_file);
}
return path;
}
DictTrie dict_trie_; DictTrie dict_trie_;
HMMModel model_; HMMModel model_;