C++使用cppjieba分词的时候如何使用停词表
时间: 2023-07-20 20:28:42 浏览: 291
对中国四大名著-红楼梦 使用jieba进行分词处理 排除去停词 统计完整词频并按降序排列 前20词绘制词云图
5星 · 资源好评率100%
在使用cppjieba分词时,可以通过设置停用词表来过滤掉一些常用的无意义词汇,例如标点符号、虚词等。停用词表是一个文本文件,里面包含了需要过滤的单词或字符,每行一个。
具体步骤如下:
1. 创建停用词表文件,例如命名为`stopwords.txt`。
2. 打开文件,将需要过滤的单词或字符写入文件中,每行一个。例如,可以过滤掉标点符号、数字和一些常用的虚词等。
3. 在代码中加载停用词表文件,例如:
```cpp
cppjieba::Jieba jieba("./dict/jieba.dict.utf8", "./dict/hmm_model.utf8", "./dict/user.dict.utf8", "./dict/idf.utf8", "./dict/stop_words.utf8"); // 加载字典和模型文件,并设置停用词表文件路径
jieba.SetLogLevel(cppjieba::LogLevel::WARN); // 设置日志级别,可选值:DEBUG、INFO、WARN、ERROR、FATAL,默认为INFO
std::vector<std::string> words;
std::string text = "这是一段需要分词的文本";
jieba.CutForSearch(text, words); // 对文本进行分词
std::vector<std::string> filtered_words;
for (const auto& word : words) {
if (std::find(stopwords.begin(), stopwords.end(), word) == stopwords.end()) { // 判断单词是否在停用词表中
filtered_words.push_back(word);
}
}
// 处理过滤后的单词
```
在上面的代码中,`stopwords`是一个`std::vector<std::string>`类型的变量,存储了从停用词表中读取的所有单词。在处理分词结果时,遍历分词结果中的每个单词,如果该单词不在停用词表中,则将其添加到`filtered_words`中,最终处理的结果就是过滤了停用词后的单词列表。
另外,cppjieba还提供了一些默认的停用词表,可以通过以下代码进行使用:
```cpp
cppjieba::Jieba jieba("./dict/jieba.dict.utf8", "./dict/hmm_model.utf8", "./dict/user.dict.utf8", "./dict/idf.utf8", cppjieba::Config(jieba::FLAGS).set_stop_word("./dict/stop_words.utf8")); // 加载字典和模型文件,并设置停用词表文件路径
```
在上面的代码中,`cppjieba::Config(jieba::FLAGS)`用于获取默认的配置,然后通过`set_stop_word`方法设置停用词表文件路径,这样就可以在使用分词器的时候自动过滤停用词了。
阅读全文