在基于 Boost 的正倒排索引搜索引擎项目中,我们将高频使用的底层功能封装为通用工具模块,以便在其他组件中复用。主要包括文件读取与中文分词两个核心部分。
文件读取工具 (FileUtil)
该类负责从指定路径读取文件内容,支持按行追加至目标字符串。采用二进制输入模式打开文件,确保读取过程中不会修改原文件数据。若路径错误或无法打开,将输出错误信息并返回 false。
class FileUtil {
public:
static bool ReadFile(const std::string &file_path, std::string *out) {
// 使用 ifstream 关联特定文件路径,二进制只读模式
std::ifstream in(file_path, std::ios::in | std::ios::binary);
if (!in.is_open()) {
std::cout << "open file " << file_path << ": error" << std::endl;
return false;
}
std::string line;
// getline 重载了 bool 转换操作符,可直接用于循环条件
while (std::getline(in, line)) {
*out += line;
}
in.close();
return true;
}
};
中文分词工具 (JiebaUsutl)
集成 cppjieba 库进行分词处理。由于词典初始化成本较高且通常只需单例实例,我们采用静态成员变量管理 Jieba 对象。这样既避免了重复创建对象的资源消耗,也保证了分词逻辑的一致性。静态成员函数允许直接通过类名调用,无需实例化对象。
const char* const DICT_PATH = "test/cppjieba/dict/jieba.dict.utf8";
const char* const HMM_PATH = "test/cppjieba/dict/hmm_model.utf8";
const char* const USER_DICT_PATH = "test/cppjieba/dict/user.dict.utf8";
* IDF_PATH = ;
* STOP_WORD_PATH = ;
{
:
cppjieba::Jieba jieba;
:
{
jieba.(src, *out);
}
};
;


