引言

在做中文分词的项目中,需要重复读取词库中的数据。因此如果简单得将词库中的词语读取到列表中会降低会降低每次扫描的效率。于是采用Trie(字典树)的数据结构来进行存储。

在这篇博文中,已经对Trie的原理做了比较清楚的解释。相比于英文,中文其实是可以通过utf-8编码存储的,把一个汉字分成三个字节,每个字节存储在一个节点里。

在此就不多说了,直接上代码。

class TrieNode(object):def __init__(self):self.value = Noneself.children = {}class Trie(object):def __init__(self):self.root = TrieNode()def add(self, words):"""Add a string to this trie."""words = words.encode("utf-8")p = self.rootn = len(words)i = 0for word in words:if word not in p.children:new_node = TrieNode()p.children[word] = new_nodep = new_nodeelse:p = p.children[word]# endi += 1if i == n:p.value = wordsdef search(self, words):"""Judge whether s is in this trie."""words = words.encode("utf-8")p = self.rootn = len(words)i =0for word in words:if word not in p.children:return Falsep = p.children[word]i += 1if i == n:if p.value:return p.valueelse:return Falsereturn Falseif __name__ == '__main__':trie = Trie()trie.add('中文')trie.add("abcde")end1 = trie.search("中文")end2 = trie.search("abcde")print(end1.decode())print(end2.decode())

输出为:

中文
abcde

由于仅用于存储,所以就写了addsearch两个功能,仅做参考。

用于存储中文字符的字典树相关推荐

  1. MySQL数据库与Oracle数据库在存储中文字符以字节或字符存储的区别

    一.Oracle数据库存储中文字符 Oracle数据库可以以字节或者字符来存储字符串的,一般来说默认是存储字节,你可以查看数据库NLS_LENGTH_SEMANTICS的值. 可以看到Oracle数据 ...

  2. 计算机如何存储中文字符

    计算机如何存储中文字符: 1:计算机如何存储英文字符:ASCLL:对英文字母和符号进行了编码,总计28个LATIN-1:兼容ASCLL,同时对欧洲符号进行编码,总共有256个 2:计算机如何存储中文字 ...

  3. c语言怎么储存字母,c语言怎么用变量存储中文字符?书本上面没有的秘密

    很多学习者做一开始学习c语言的时候都会有想过处理中文的想法,但找不到方法而放弃,但其实方法十分简单.我们下面进入正题吧. 所有学习C语言的学习者都知道ASCII码,甚至很多初学者都认为C语言所用的就只 ...

  4. tire字符统计(字典树)

    共有 N 个操作,所有输入的字符串总长度不超过 105,字符串仅包含小写英文字母. 输入格式 第一行包含整数 N,表示操作数. 接下来 N 行,每行包含一个操作指令,指令为 I x 或 Q x 中的一 ...

  5. 中文字符存储 mysql_中文字符的存储

    主要分析下面内容 在数据库:oracle,mysql下,对字符集:gbk,utf-8的处理 Oracle 如果字符集为gbk,gb2312,Varchar类型的数据库字段长度/2为存储中文字符长度 G ...

  6. 字典树实现_trie 字典树的实现方法

    trie 字典树 (前缀树) 什么是字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文 ...

  7. 分门别类刷leetcode——高级数据结构(字典树,前缀树,trie树,并查集,线段树)

    目录 Trie树(字典树.前缀树)的基础知识 字典树的节点表示 字典树构造的例子 字典树的前序遍历 获取字典树中全部单词 字典树的整体功能 字典树的插入操作 字典树的搜索操作 字典树的前缀查询 字典树 ...

  8. Trie树 -- 高效的字典树

    文章目录 简介 原理 构造一棵Trie树 使用Trie树进行查询 实现 模拟(瞎暴力)实现 空间优化 简介 Trie树是一种数据结构,它有一个好听的中文名字,叫"字典树".顾名思义 ...

  9. [转载]Unicode中对中文字符的编码

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

最新文章

  1. 干货分享 | 阿里PB级Kubernetes日志平台建设实践
  2. 没有学过功夫能否练神功
  3. java 并发编程视频教程_全面深入学习java并发编程,视频教程下载
  4. unix dos mac 文件格式不同导致问题
  5. 企业实战(Jenkins+GitLab+SonarQube)_11_Jenkins权限的划分
  6. 利用高阶函数map和reduce将字符串转化成浮点数
  7. 前端程序员:月薪 5K 到 5 万
  8. 全网首发:JAVA中的+=,会直接把float赋值给int变量,编译器不报错
  9. js中url的对象化管理
  10. activiti6.0通过bpmn.js展示高亮流程图(前端绘制流程图)
  11. Qt入门教程【硬件编程】串口基础知识
  12. win10修改保存的git用户名和密码
  13. win10无法msi文件的解决方法
  14. mysql忘记密码win10,如何巧妙解决处理深度技术Win10系统忘记Mysql密码
  15. stm32实现波形发生器
  16. Unity3D学习记录——NGUI Sprit
  17. ThreeJS之让一个模型围绕自己的轴心旋转
  18. 最新最全的中国手机号码正则表达式
  19. android.nfc.tech圈存,荣耀7使用nfc功能教程及注意事项,亲测可以刷公交卡
  20. 助力提升研发效能的“黄金三角”

热门文章

  1. python怎么学精_python笔记 对比式学习
  2. Linux shell脚本练习题汇总
  3. 12.5亿美金 联想收购IBM PC业务
  4. 【华为云分享】软件工程的迷途与沉思
  5. 密码模块安全技术要求GMT0028-2012
  6. OPNET仿真陈敏教程第6章报错解决方法
  7. Jmeter之参数化函数助手_randomstring
  8. 多文章栏目易企CMS模板的使用
  9. 计算机考试文件命名,2010年职称计算机考试:文件的命名
  10. Ethercat学习-从站FOE固件更新(TwinCAT主站)