boost库之tokenizer的使用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:
    在tokenizer出现之前,如果我们要对一个字符串进行分割,可能要自己封装一个函数。如果有n种不同的分割规则,那么你
要封装n个不同的分割函数……太麻烦了!现在好了,Boost库的tokenizer封装了统一的语法来分割字符串,并且提供了三
种常用的分割方式,足以满足我们的绝大多数编程需求。
    tokenizer主要由分割器和迭代器两部分组成。分割器用于指定字符串的分割规则,如果不指定任何分割器,则tokenizer
默认将字符串以空格和标点(键盘上除26个字母(包括大小写)和数字外的其他可打印字符)为边界进行分割。迭代器用于
保存字符串分割后的结果。下面着重介绍tokenizer的三种分割器。
char_separator是默认的分隔器,它以一组特定的字符来分隔字符串,其构造函数为:
explicit char_separator(); (默认构造函数)
explicit char_separator(const Char* dropped_delims, const Char* kept_delims = "", empty_token_policy
empty_tokens = drop_empty_tokens);
其参数的详细说明如下:
dropped_delimskept_delims:是两个字符数组,这两个数组中的每个字符都是一个分割符。不同的是,
dropped_delims中的分割符本身被丢弃,而kept_delims中的分割符本身作为一个单独的记号被保留在迭代器中。默认构
造函数的dropped_delims为空格符,kept_delims为标点符号。
empty_tokens:是否保留长度0的记号。它有两个可选值,keep_empty_tokens表示要保留空记号,而默认的
drop_empty_tokens表示丢弃空记号。默认构造函数的empty_tokensdrop_empty_tokens
offset_separator主要用于解析长度和格式都固定的字符串,如身份证或电话号码等。其构造函数为:
template<typename Iter> offset_separator(Iter begin,Iter end,bool bwrapoffsets = true, bool
breturnpartiallast = true);
其参数的详细说明如下:
beginend:指向一个整数容器开始和末尾的迭代器,其中每个元素表示要分割的字段的字符数。
bwrapoffsets: 如果字符串长度大于整数容器中所有字段长度的和,是否重复解析字符串。
breturnpartiallast: 当字符串解析到末尾剩余部分的长度(注意:包括结尾的空字符)小于字段长度时,是保留还是丢
弃剩余部分。
escaped_list_separator主要用于解析包含转义符、分隔符和引号的字符串。其构造函数为:
explicit escaped_list_separator(Char e = '\\', Char c = ',',Char q = '\"');
explicit escaped_list_separator(string_type e, string_type c, string_type q);
其参数的详细说明如下:
e:为单个转义符或包含多个转义符的串。转义符后跟引号表示引号,转义符后跟n表示换行,连续两个转义符表示作为普
通字符的转义符本身。
c:为单个分割符或包含多个分割符的串,字符串以该分隔符为边界进行分割。
q:为单个引号或包含多个引号的串,两个引号中间出现的分隔符不再作为分割标志,而是作为普通字符处理。
最后给出一组简单的测试题,大家既可以借此看看tokenizer的语法,也可以根据回答结果来考察一下你对tokenizer的用

法有没有理解透彻。稍后我会在评论中给出正确答案。

a) string s = "hello, crearo-sw blog";
tokenizer<> tok(s);
for (tokenizer<>::iterator beg=tok.begin(); beg!=tok.end(); ++beg)
{c
out << *beg <<endl;
} b
) string str = ";!!;miaocl|zhangwh ||-hujian--terry|";
typedef tokenizer<char_separator<char> > tokenizers;
char_separator<char> sep("-;", "|", keep_empty_tokens);
tokenizers tokens(str, sep);
for (tokenizers::iterator tok_iter = tokens.begin(); tok_iter != tokens.end(); ++tok_iter)
{c
out << "<" << *tok_iter << "> ";
}
c) string s = "20090321";
int offsets[] = {4,2,3};
offset_separator f(offsets, offsets+3, true, false);
tokenizer<offset_separator> tok(s,f);
for(tokenizer<offset_separator>::iterator beg=tok.begin();
beg!=tok.end(); ++beg)
{c
out << *beg << endl;
}



目录
相关文章
|
1月前
|
自然语言处理 算法 搜索推荐
NLTK模块使用详解
NLTK(Natural Language Toolkit)是基于Python的自然语言处理工具集,提供了丰富的功能和语料库。本文详细介绍了NLTK的安装、基本功能、语料库加载、词频统计、停用词去除、分词分句、词干提取、词形还原、词性标注以及WordNet的使用方法。通过示例代码,帮助读者快速掌握NLTK的核心功能。
230 1
|
2月前
|
存储 人工智能 安全
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
LangChain-23 Vector stores 向量化存储 并附带一个实际案例 通过Loader加载 Embedding后持久化 LangChain ChatOpenAI ChatGLM3对话
94 0
|
4月前
|
机器学习/深度学习 存储 算法
HanLP — 感知机(Perceptron) -- Python
HanLP — 感知机(Perceptron) -- Python
46 0
|
6月前
|
Java
java工具bases64与文件互转
java工具bases64与文件互转
|
7月前
|
机器学习/深度学习 自然语言处理
GPT Tokenizer的工作原理
【2月更文挑战第4天】GPT Tokenizer的工作原理
199 4
GPT Tokenizer的工作原理
|
7月前
|
自然语言处理 Python
python实现分词器
python实现分词器
|
数据采集 机器学习/深度学习 自然语言处理
Huggingface Transformers各类库介绍(Tokenizer、Pipeline)
Huggingface Transformers各类库介绍(Tokenizer、Pipeline)
gensim安装
gensim安装
370 0
gensim安装
编译onnx-tensorrt产生libnvonnxparser.so
编译onnx-tensorrt产生libnvonnxparser.so
98 0
sentence_transformers模型无法直接下载的解决方案
本文介绍使用sentence_transformers包(官网:https://huggingface.co/sentence-transformers)时,直接调用模型名称无法下载模型的解决方案。 其实跟transformers包差不多,都是把文件下载到本地然后直接使用路径加载模型。