tokenizer,请解释和翻译tokenizer和tokenization两个词
tokenizer,请解释和翻译tokenizer和tokenization两个词详细介绍
本文目录一览: 怎么理解token,tokenize,tokenizer.
在编写词法分析器(Lexer)或语法分析器(Parser)的时候,除了Lexer和Parser这两个词会经常使用外,tokenize和tokenizer也会经常出现,基本上所有涉及到词法解析的源码都会用到tokenize。
它的命名来源于使用英文的开发者,否则让我这个习惯使用中文的人去想这个命名,我可能会用其它简单的词来代替,不会这么形象化,所以啊,语言文化的不同,可能会导致思维方式的不同啊,所以中国人的思维方式和西方人的思维方式肯定是不同的,让他们来理解我们的语言可能也很费解。
不管怎么说,好的东西是应该学习和借鉴的,tokenize这个词使用得如此频繁,肯定有它的意义,那到底这个词怎么翻译?怎么理解?在邱仲潘译的《Mastering Java 2》有这儿一段:
StreamTokenizer类根据用户定义的规则,从输入流中提取可识别的子串和标记符号,这个过程称为令牌化 ([i]tokenizing[/i]),因为流简化为了令牌符号。令牌([i]token[/i])通常代表关键字、变量名、字符串、直接量和大括号等 语法标点。
参考邱仲潘的这段译文,可以这样翻译:
token:令牌
tokenize:令牌化
tokenizer:令牌解析器
而我看到的另一种翻译是:token可以翻译为“标记”,tokenize可以翻译为“标记解析”或“解析标记”,tokenizer可以翻译为“标记解析器”
我的理解是tokenize是负责把代码解析为一个个的“串”,而Paser是根据这些“串”的前后序列关系来生成相应的语法结构。用令牌好像更形象一些,不过总觉得听起来很生硬,而翻译成“标记”,范围又狭窄了一些。我也找不到一个更适合的词来翻译了,总之理解意思最重要。
不知道各位是怎么理解的,怎么翻译的。
1、一种解释
token:令牌tokenize:令牌化tokenizer:令牌解析器
2、另一种翻译是:token可以翻译为“标记”,tokenize可以翻译为“标记解析”或“解析标记”,tokenizer可以翻译为“标记解析器”。
在编写词法分析器(Lexer)或语法分析器(Parser)的时候,除了Lexer和Parser这两个词会经常使用外,tokenize和tokenizer也会经常出现,基本上所有涉及到词法解析的源码都会用到tokenize。
在邱仲潘译的《Mastering Java 2》有这儿一段:
StreamTokenizer类根据用户定义的规则,从输入流中提取可识别的子串和标记符号,这个过程称为令牌化 ([i]tokenizing[/i]),因为流简化为了令牌符号。令牌([i]token[/i])通常代表关键字、变量名、字符串、直接量和大括号等 语法标点。
请解释和翻译tokenizer和tokenization两个词
tokenizer:编译器
tokenization:标志化、符号化过程
tokenizer:编译器
tokenization:标志化、符号化过程
ES中的分词器
全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干 Token(词元) , 这些算法称为 Tokenizer(分词器) , 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为 Token Filter(词元处理器) ,被处理后的结果被称为 Term(词) , 文档中包含了几个这样的Term被称为 Frequency(词频) 。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为 Character Filter(字符过滤器) , 这整个的分析算法被称为 Analyzer(分析器) 。
整个分析过程,如下图所示:
从第一部分内容可以看出:Analyzer(分析器)由Tokenizer(分词器)和Filter(过滤器)组成。
ES允许用户通过配置文件elasticsearch.yml自定义分析器Analyzer,如下:
上面配置信息注册了一个分析器myAnalyzer,在次注册了之后可以在索引或者查询的时候直接使用。该分析器的功能和标准分析器差不多,tokenizer: standard,使用了标准分词器 ;filter: [standard, lowercase, stop],使用了标准过滤器、转小写过滤器和停用词过滤器。
ElasticSearch默认使用的标准分词器在处理中文的时候会把中文单词切分成一个一个的汉字,所以在很多时候我们会发现效果并不符合我们预期,尤其在我们使用中文文本切分之后本该为一个词语却成了单个的汉字,因此这里我们使用效果更佳的中文分词器es-ik。
ik 带有两个分词器:
区别:
下面我们来创建一个索引,使用 ik。创建一个名叫 iktest 的索引,设置它的分析器用 ik ,分词器用 ik_max_word,并创建一个 article 的类型,里面有一个 subject 的字段,指定其使用 ik_max_word 分词器。
批量添加几条数据,这里我指定元数据 _id 方便查看,subject 内容为我随便找的几条新闻的标题
查询 “希拉里和韩国”
这里用了高亮属性 highlight,直接显示到 html 中,被匹配到的字或词将以红色突出显示。若要用过滤搜索,直接将 match 改为 term 即可。
bert tokenizer
有 BertTokenizerFast 和 BertTokenizer, BertTokenizerFast 更快,因为使用了 tokenizer 库。
因为 tokenizer 库基于 RUST 所以多线程更好。而 BertTokenizer 基于 python 的。
所以,我们使用 BertTokenizerFast
from transformers import BertTokenizerFast
如果是做分类等问题,那么,tokenizer 并不会带来什么问题。但是如果做 ner 这种 span 抽取,会带来问题,就是
WordPiceTokenizer 对句子的切分并非是一一对应的。那么,如果对应这个位置会是很繁琐的一个问题。
4. stringtokenizer类的主要用途是什么? 该类有哪几个重要的方法?
StringTokenizer 是一个Java的类,属于 java.util 包,用来分割字符串和枚举类型。
StringTokenizer 构造方法:
1. StringTokenizer(String str) :构造一个用来解析 str 的 StringTokenizer 对象。使用默认的分隔符:空格("")、制表符(\t)、换行符(\n)、回车符(\r)。
2. StringTokenizer(String str, String delim) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符。
3. StringTokenizer(String str, String delim, boolean returnDelims) :构造一个用来解析 str 的 StringTokenizer 对象,并提供一个指定的分隔符,同时,指定是否返回分隔符。
StringTokenizer 常用方法:
1. int countTokens():返回nextToken方法被调用的次数。可以用来计算字符串分割单元的个数。
2. boolean hasMoreTokens():返回是否还有分隔符。可以用来判断,字符串分割有没有处理完。
3. boolean hasMoreElements():判断枚举 (Enumeration) 对象中是否还有数据。用来判断枚举类型有没有处理完。
4. String nextToken():返回从当前位置到下一个分隔符的字符串。
5. Object nextElement():返回枚举 (Enumeration) 对象的下一个元素。
6. String nextToken(String delim):与 4 类似,以指定的分隔符返回结果。
lexer是什么意思 lexer的中文翻译、读音、例句?
lexer的中文解释是”法”,其次还有”法科大学生”的意思,单词读音音标为[leks?],lexer常被用作名词,在《英国拉丁词典》中,共找到88个与lexer相关的释义和例句lexer的中文翻译1.法例句:A good lexer example can help a lot with learning how to write a tokenizer.翻译:一个好的 lexer 例子会非常有助于学习如何编写断词器(tokenizer) 来源:在线英语词典2.法科大学生例句:A good lexer example can help a lot with learning how to write a tokenizer.翻译:一个好的lexer例子会非常有助于学习如何编写断词器(tokenizer)来源:在线英语词典用法及短语示例lexer一般作为名词使用,在常见短语或俚语中出现较多英语例句1. CHiNESE_VGRAM: a lexer for extracting tokens from Chinese text.翻译:CHINESE_VGRAM:一个从Chinese文本在中提取标记的lexer 2. KOREAN_LEXER: a lexer for extracting tokens from Korean text.翻译:KOREAN_LEXER:一个从Korean文本在中提取标记的lexer 3. A listing of supported lexer types follows.翻译:下面是一个支持lexer类型的清单 4. Additionally there is implemented a iDL lexer, which allows to use the preprocessor library as the lexing component of a iDL oriented tool.翻译:此外还实现了一个IDLlexer,允许将预处理器库用作某个面向IDL的工具的lexing组件自考/成考有疑问、不知道自考/成考考点内容、不清楚当地自考/成考政策,点击底部咨询官网老师,免费领取复习资料:https://www.87dh.com/xl/
Python分割字符串 有无和c++中的tokenizer同样功能的用法?
回楼主。
在tokenize里,
这里有英文的参考文档
import tokenize
import StringIO
s = StringIO.StringIO( '21.3e-5*-.1234/81.7' )
g = tokenize.generate_tokens( s.readline )
for tokenum, tokeval, _, _, _ in g:
if tokenum == tokenize.NUMBER and '.' in tokeval:
result.extend( [( tokenize.NAME, 'Decimal' ),
( tokenize.OP, '(' ),
( tokenize.STRING, repr( tokeval ) ),
( tokenize.OP, ')' )] )
else:
result.append( ( tokenum, tokeval ) )
print result
这是我临时照抄的一个例子
import re
str="a = f1(`MAX(b, 0.0, 1.0) + 0.5);"
print re.split('[ ()+=;]+',str)
这样会多出一个'',可以把最后一个字符串去掉:
print re.split('[ ()+=;]+',str)[:-1]
BERT add tokens后tokenizer一直加载中...
情况是: 我用 add_tokens()方法 添加自己的新词后,BertTokenizer.from_pretrained(model)一直处于加载中。
原因: 有说是词典太大,耗时hours才加载出来(我也没有真的等到过)
暂时的解决办法:
参考于: https://github.com/huggingface/tokenizers/issues/615#issuecomment-821841375
java swing 小程序 求改错
因为input为空
StringTokenizer
public StringTokenizer(String str,
String delim)
为指定字符串构造一个 string tokenizer。delim 参数中的字符都是分隔标记的分隔符。分隔符字符本身不作为标记。
注意,如果 delim 为 null,则此构造方法不抛出异常。但是,尝试对得到的 StringTokenizer 调用其他方法则可能抛出 NullPointerException。
参数:
str - 要分析的字符串。
delim - 分隔符。
抛出:
NullPointerException - 如果 str 为 null。
----
StringTokenizer
public StringTokenizer(String str)
为指定字符串构造一个 string tokenizer。tokenizer 使用默认的分隔符集合 " \t\n\r\f",即:空白字符、制表符、换行符、回车符和换页符。分隔符字符本身不作为标记。
参数:
str - 要分析的字符串。
抛出:
NullPointerException - 如果 str 为 null。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhrmghl/archive/2006/07/20/948685.aspx
在第70行 加一个if()非空判断
就ok了
不过说实在的你问问题能不能写明白点
alist小雅如何替换token
alist小雅替换token如下:1、首先,我们使用tokenizer的encode方法将句子转换为一个token序列,其中add_special_tokens=False表示不添加特殊的起始和结束标记。2、然后,我们使用tokenizer的convert_tokens_to_ids方法将新的token转换为其对应的ID,然后将其插入到序列的第3个位置。3、最后,我们使用tokenizer的decode方法将序列转换回文本形式。