这是一个基于hash字典树的高效中文分词工具(实际上支持所有utf-8编码的字符)
将词库放到vocab.txt
中
格式为每行一词,如下:
一心一意
一个
专心致志
三心二意
一天
将待分词的文本放到text.txt
中
编译运行main.cpp
在result.txt
中查看分词结果
这个库是用来处理utf-8编码的文件的,众所周知,中文字符无法直接读入存放到字符串中处理,因此写了这个库,将utf-8字符的编码以int形式存放为一个个独立元素。 使用方法如下:
直接用fgets
读入utf-8编码的内容存放到字符串char *buff
中,此时由于很多字符占了超过1个字节,因此无法直接处理buff
中的内容
包含下面两个接口:
int decode(char *buff,int *res);
将保存了字符串的buff
中的内容以字为单位存放到res
中,此时res
中每个元素都是一个完整utf-8字符的二进制编码,函数返回值为res
的长度
void encode(FILE *fout, const int *res, int res_L, int mode = CHARFORM);
将res
的[0,resL)部分的编码所代表的utf-8字符输出到fout
中,默认输出字符,如果mode = INTFORM
,则输出utf-8编码数值
这个库封装了支持utf-8字符集的字典树,字典树的结点为trieNode类:
namespace trieCH {
struct trieNode{ //trieNode类,表示字典树的一个节点
int cnt, code, isEnd, hashCreated, next;
int hashN, backupPoint;
trieNode* children;
trieNode();
trieNode* builtin_getChild(int code, int isBuild, int endFlag = 0);
trieNode* getChild(int code); //获取对应utf-8字符编码为code的子节点的地址
};
}
调用接口如下:
trieNode* trieCH::buildTrie(FILE *fin)
从fin
中读入词库,生成字典树,返回根节点的指针
trieNode* trieCH::trieNode::getChild(int code);
获取对应utf-8字符编码为code的子节点的地址