1. '''
  2. 文本序列化
  3. '''
  4.  
  5. class WordSequence():
  6. UNK_TAG = "<UNK>"
  7. PAD_TAG = "<PAD>"
  8. UNK = 1
  9. PAD = 0
  10.  
  11. def __init__(self):
  12. self.dict = {
  13. self.UNK_TAG:self.UNK,
  14. self.PAD_TAG:self.PAD
  15. }
  16. self.count = {}
  17.  
  18. def fit(self,sentence):
  19. '''
  20. 统计词频
  21. :param sentence:
  22. :return:
  23. '''
  24. for word in sentence:
  25. self.count[word] = self.count.get(word,0)+1
  26.  
  27. def build_vocab(self,min_count=0,max_count = None,max_features = None):
  28. """
  29. 根据条件构建 词典
  30. :param min_count:最小词频
  31. :param max_count: 最大词频
  32. :param max_features: 最大词语数
  33. :return:
  34. """
  35. if min_count is not None:
  36. self.count = {word:count for word,count in self.count.items() if count >min_count}
  37. if max_count is not None:
  38. self.count = {word:count for word,count in self.count.items() if count<max_count}
  39. if max_features is not None:
  40. #排序
  41. self.count = dict(sorted(self.count.items(),lambda x:x[-1],reverse=True)[:max_features])
  42.  
  43. for word in self.count:
  44. self.dict[word] = len(self.dict) #每次word对应一个数字
  45.  
  46. #把dict进行翻转
  47. self.inverse_dict = dict(zip(self.dict.values(),self.dict.keys()))
  48.  
  49. def transform(self,sentence,max_len =None):
  50. '''
  51. 把句子转化为数字序列
  52. :param sentence:
  53. :return:
  54. '''
  55. if len(sentence) > max_len:
  56. sentence = sentence[:max_len]
  57. else:
  58. sentence = sentence + [self.PAD_TAG]*(max_len-len(sentence))
  59. return [self.dict.get(i,1) for i in sentence]
  60.  
  61. def inverse_transform(self,incides):
  62. """
  63. 把数字序列转化为字符
  64. :param incides:
  65. :return:
  66. """
  67. return [self.inverse_dict.get(i,"<UNK>") for i in incides]
  68.  
  69. def __len__(self):
  70. return len(self.dict)
  71.  
  72. if __name__ == '__main__':
  73. sentences = [["今天","天气","很","好"],
  74. ["今天","去","吃","什么"]]
  75.  
  76. ws = WordSequence()
  77. for sentence in sentences:
  78. ws.fit(sentence)
  79.  
  80. ws.build_vocab(min_count=0)
  81. print(ws.dict)
  82. ret = ws.transform(["好","热","呀","呀","呀","呀","呀","呀","呀"],max_len=5)
  83. print(ret)
  84. ret = ws.inverse_transform(ret)
  85. print(ret)

  语料序列化并保存

  1. from word_sequence import WordSequence
  2. from dataset import get_dataloader
  3. import pickle
  4. from tqdm import tqdm
  5.  
  6. if __name__ == '__main__':
  7. ws = WordSequence()
  8. train_data = get_dataloader(True)
  9. test_data = get_dataloader(False)
  10. for reviews,labels in tqdm(train_data,total=len(train_data)):
  11. for review in reviews:
  12. ws.fit(review)
  13. for reviews,labels in tqdm(test_data,total=len(test_data)):
  14. for review in reviews:
  15. ws.fit(review)
  16. print("正在建立...")
  17. ws.build_vocab()
  18. print(len(ws))
  19. pickle.dump(ws,open("./models/ws.pkl","wb"))

  模型加载

  1. import pickle
  2.  
  3. train_batch_size = 128
  4. test_batch_size = 500
  5.  
  6. ws = pickle.load(open("./models/ws.pkl","rb"))

  

  

文本序列化【通用】word2sequence,文本序列字典保存的更多相关文章

  1. Java 读取Word文本框中的文本/图片/表格

    Word可插入文本框,文本框中可嵌入文本.图片.表格等内容.对文档中的已有文本框,也可以读取其中的内容.本文以Java程序代码来展示如何读取文本框,包括读取文本框中的文本.图片以及表格等. [程序环境 ...

  2. C# 读取Word文本框中的文本、图片和表格(附VB.NET代码)

    [概述] Word中可插入文本框,在文本框中可添加文本.图片.表格等内容.本篇文章通过C#程序代码介绍如何来读取文本框中的文本.图片和表格等内容.附VB.NET代码,有需要可作参考. [程序环境] 程 ...

  3. 文本溢出text-overflow和文本阴影text-shadow

    前面的话 CSS3新增了一些关于文本的样式,其中text-overflow文本溢出和text-shadow文本阴影有些特别.因为它们有对应的overflow溢出属性和box-shadow盒子阴影属性. ...

  4. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  5. Selenium常用API用法示例集----下拉框、文本域及富文本框、弹窗、JS、frame、文件上传和下载

    元素识别方法.一组元素定位.鼠标操作.多窗口处理.下拉框.文本域及富文本框.弹窗.JS.frame.文件上传和下载 元素识别方法: driver.find_element_by_id() driver ...

  6. javaScript识别网址文本并转为链接文本

    最近项目有个需求:用户之间发送消息时,如果发送者输入的信息中含有网址文本,要在接受者界面中显示网址链接,点击该链接直接跳转到网页.这个功能和 QQ 发送网址文本的效果非常像,可以说是一模一样的. 思路 ...

  7. Lodop文本项相对于文本框居中 两端对齐

    Lodop中ADD_PRINT_TEXT默认内容是相对于文本框居左的,如果想要设置相对于文本框居中,可用如下语句.还有一种是两端对齐,可以让内容的两端阿和文本框的最左和最右端对齐,文本项内容布满文本框 ...

  8. input文本框禁止修改文本——disabled和readonly属性的作用及区别

    1.input文本框禁止修改文本 disabled属性:<input type="text" name="name" value="xxx&qu ...

  9. Python基本序列-字典

    Python 基本序列-字典 字典(dict)是"键-值 对"的无序可变序列,字典中的每个元素包含两部分,"键"和"值". 字典中的&quo ...

随机推荐

  1. 深入理解JavaScript中的堆与栈 、浅拷贝与深拷贝

    JavaScript中的浅拷贝与深拷贝  学了这么长时间的JavaScript想必大家对浅拷贝和深拷贝还不太熟悉吧,今天在项目中既然用到了,早晚也要理清一下思路了,在了解之前,我们还是先从JavaSc ...

  2. CSS3 - 新单位vw、vh、vmin、vmax使用详解

    参考文章出自:https://www.hangge.com/blog/cache/detail_1715.html

  3. Mac OSX安装 Django MySQL mysqlclient

    Python3.6 $ brew install mysql-connector-c # 如果没有安装brew,先安装:# 安装可以查看:https://www.cnblogs.com/Jokergu ...

  4. JSP学习笔记(二)

    JSP内置对象 request对象 response对象 session对象 application对象 out对象 有些对象不用声明就可以在JSP页面的Java程序片和表达式部分使用,这就是JSP的 ...

  5. 模块 string 常用序列字符

    自从知道string模块后再也不用abcd了 >>> string.digits #数字 '0123456789' >>> string.ascii_letters ...

  6. WPF使用 Gmap.NET 绘制极坐标运动轨迹

    大家好,已经很久没有更新了,今天写一篇关于WPF 使用 Gmap.NET 相关的,网上很多Winform的很**,所以我给Wpf进行一些补充.虽然它已经很久没有更新了,但是也只能用这个了.没别的好选择 ...

  7. Linux操作系统及调用接口

    Linux操作系统包含以下各子系统: 系统调用子系统:操作系统的功能调用同一入口: 进程管理子系统:对执行程序进行生命周期和资源管理: 内存管理子系统:对系统的内存进行管理.分配.回收.隔离: 文件子 ...

  8. 学习 Flex 布局

    Flex 是 CSS3 推出的一种布局方式,至今有超过十年时间了 要实现 Flex 布局很容易,只需要给一个元素的 display 属性设置为 flex 就行 .box { display: flex ...

  9. 数据挖掘 决策树 Decision tree

    数据挖掘-决策树 Decision tree 目录 数据挖掘-决策树 Decision tree 1. 决策树概述 1.1 决策树介绍 1.1.1 决策树定义 1.1.2 本质 1.1.3 决策树的组 ...

  10. 打造一款 刷Java 知识的小程序(二)

    学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...