2021SC@SDUSC

一、gen_pfdict函数
在初始化的过程中,会构建前缀词典。构建前缀词典的入口函数是gen_pfdict(self, f),解析离线统计词典文本文件,每一行分别对应着词、词频、词性,将词和词频提取出来,以词为key,以词频为value,加入到前缀词典中。对于每个词,再分别获取它的前缀词,如果前缀词已经存在于前缀词典中,则不处理;如果该前缀词不在前缀词典中,则将其词频置为0,便于后续构建有向无环图。

 def gen_pfdict(f):lfreq = {}ltotal = 0f_name = resolve_filename(f)for lineno, line in enumerate(f, 1):try:line = line.strip().decode('utf-8')word, freq = line.split(' ')[:2]freq = int(freq)lfreq[word] = freqltotal += freqfor ch in xrange(len(word)):wfrag = word[:ch + 1]if wfrag not in lfreq:lfreq[wfrag] = 0except ValueError:raise ValueError('invalid dictionary entry in %s at Line %s: %s' % (f_name, lineno, line))f.close()return lfreq, ltotal

为什么jieba没有使用trie树作为前缀词典存储的数据结构?
参考jieba中的issue–不用Trie,减少内存加快速度;优化代码细节 #187,本处直接引用该issue的comment,如下,
对于get_DAG()函数来说,用Trie数据结构,特别是在Python环境,内存使用量过大。
二、initialize函数
如果cache缓存中存在词库,就不会进入initialize。
利用get_DAG(sentence)函数获得待切分句子的DAG,首先检测(check_initialized)进程是否已经加载词库,若未初始化词库则调用Tolenizer中的initialize函数进行初始化,initialize中判断有无已经缓存的前缀词典cache_file文件,若有相应的cache文件则直接使用 marshal.load 方法加载前缀词典,若无则通过gen_pfdict对指定的词库dict.txt进行计算生成前缀词典,到jieba进程的初始化工作完成后就调用get_DAG获得句子的DAG;

    def initialize(self, dictionary=None):default_logger.debug("Building prefix dict from %s ..." % (abs_path or 'the default dictionary'))t1 = time.time()if self.cache_file:cache_file = self.cache_file# default dictionaryelif abs_path == DEFAULT_DICT:cache_file = "jieba.cache"# custom dictionaryelse:cache_file = "jieba.u%s.cache" % md5(abs_path.encode('utf-8', 'replace')).hexdigest()cache_file = os.path.join(self.tmp_dir or tempfile.gettempdir(), cache_file)# prevent absolute path in self.cache_filetmpdir = os.path.dirname(cache_file)load_from_cache_fail = Trueif os.path.isfile(cache_file) and (abs_path == DEFAULT_DICT oros.path.getmtime(cache_file) > os.path.getmtime(abs_path)):default_logger.debug("Loading model from cache %s" % cache_file)try:with open(cache_file, 'rb') as cf:self.FREQ, self.total = marshal.load(cf)load_from_cache_fail = Falseexcept Exception:load_from_cache_fail = Trueself.initialized = Truedefault_logger.debug("Loading model cost %.3f seconds." % (time.time() - t1))default_logger.debug("Prefix dict has been built successfully.")

三、中文分词器

class ChineseTokenizer(Tokenizer):def __call__(self, text, **kargs):words = jieba.tokenize(text, mode="search")token = Token()for (w, start_pos, stop_pos) in words:if not accepted_chars.match(w) and len(w) <= 1:continuetoken.original = token.text = wtoken.pos = start_postoken.startchar = start_postoken.endchar = stop_posyield token

jieba 的Tokenizer分词器相关推荐

  1. Pytorch transformers tokenizer 分词器词汇表添加新的词语和embedding

    目标: 在NLP领域,基于公开语料的预训练模型,在专业领域迁移时,会遇到专业领域词汇不在词汇表的问题,本文介绍如何添加专有名词到预训练模型. 例如,在bert预训练模型中,并不包含财经词汇,比如'市盈 ...

  2. Keras的Tokenizer分词器

    Tokenizer类 keras.preprocessing.text.Tokenizer(num_words=None, filters='!"#$%&()*+,-./:;< ...

  3. ElasticSearch之Tokenizer 分词器

    java学习讨论群:725562382 Tokenizer Standard Tokenizer curl -X POST "192.168.0.120:9200/_analyze" ...

  4. 基于Python的中英文分词基础:正则表达式和jieba分词器

    基于Python的中英文分词基础:正则表达式和jieba分词器 前言介绍 英文字符串处理 Python中的str 正则表达式 Python中的正则表达式模块 re 小练习 字符串中出现频次最多的字母 ...

  5. Python第三方库jieba(中文分词)入门与进阶(官方文档)

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式, ...

  6. es过滤html标签,Elasticsearch 分词器

    在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本.在原始文本中的开始和结束偏移量.以及数据类型等 ...

  7. ElasticSearch03_Mapping字段映射、常用类型、数据迁移、ik分词器、自定义分词器

    文章目录 ①. Mapping字段映射概述 ②. 常用类型如下 - text.keyword ③. 映射中对时间类型详解 ④. ES的keyword的属性ignore_above ⑤. 映射的查看.创 ...

  8. 商城项目18_esMapping字段映射、常用类型、数据迁移、ik分词器、自定义分词器

    文章目录 ①. Mapping字段映射概述 ②. 常用类型如下 - text.keyword ③. 映射中对时间类型详解 ④. ES的keyword的属性ignore_above ⑤. 映射的查看.创 ...

  9. 【ES实战】ES分词器介绍

    文章目录 ES分词器介绍 什么是分词器 分词器的组成 Character filters Tokenizers Token filters 分词的过程 写入时分词 搜索时分词 测试分词效果 分词器的分 ...

最新文章

  1. 1032 Sharing
  2. Android内容提供程序
  3. vue 打印出git提交信息_VUE项目构建打包生成Git信息(VERSION和COMMITHASH文件)
  4. 通过python来实现“语象观察“自动化进阶版
  5. 使用python生成文字视频
  6. 经纬恒润荣获海克斯康“最佳业绩奖”
  7. Business English-Unit 4 Memos -A
  8. 利用ChatGPT学习生物信息数据分析
  9. 学姐说 | 大学生如何自学短视频剪辑配音制作?
  10. word转pdf(docx4j)
  11. 敏捷开发,持续集成/交付/部署, DevOps总结
  12. 机器学习系列:误差分析(Bias and Variance)和模型调优
  13. Python爬虫-DAY5淘宝页面爬取
  14. 百度云的高速下载技巧系列2---多线程文件下载工具idm v6.28.1绿色免注册版(PC)
  15. 案例分享|方形锂电池铝壳外观缺陷检测
  16. 驭电之道-用示波器测量电阻的伏安特性曲线 模电实验 示波器 波形
  17. Python实现深度优先遍历和广度优先遍历
  18. android mm 版本,多项新功能 傲游MM 2.1Android版本发布
  19. 腾讯如何做 Code Review的?万字详解!
  20. Shell 编程入门步步高

热门文章

  1. ubuntu安装linux系统安装,教你成功安装Ubuntu系统
  2. 《Linux那些事儿之我是USB》我是U盘(8)总线、设备和驱动(上)
  3. Eclipse Project Explorer字体大小设置
  4. Interested Transaction List(ITL)
  5. 要么转型升级,要么躺平出局,IT人如何找到理想职场?
  6. MyEclipse Swing开发
  7. ChatGPT与网络安全
  8. League of Legends
  9. 磨刀霍霍向猪羊Android第一次
  10. 阿里实习offer成功上岸,这几点至关重要