• 本文来自《基于Python的语料库处理》_雷蕾著。

7.1 分句和分词

7.1.1 分句

  • 分句(sentence splitting)就是将字符串按自然句子的形式进行切分。假设我们有如下代码的一个字符串,该字符串包含两个句子。如果我们对该字符串进行分句处理,就是将该字符串切分成两个元素(分别为一个句子)构成的列表。NLTK库提供了专门的分句处理模块。使用NLTK库前必须首先引入NLTK库。请看下面的代码:
import nltk
string = "My father's name being Pririp,and my Christian name Philip,my infant tongue could make of both names nothing longer or more explicit than Pip. So,I called myself Pip,and came to be called Pip."
# 载入和定义分词器(sentence splitter) sent_tokenizer
sent_tokenizer = nltk.load('tokenizers/punkt/english.pickle')
# 利用分词器中的sent_tokenizer.tokenize()函数来分句
sents = sent_tokenizer.tokenize(string)
sents
  • 打印的结果如下:
["My father's family name being Pirrip, and my Christian name Philip, my infant tongue could make of both names nothing longer or more explicit than Pip.", 'So, I called myself Pip, and came to be called Pip.']

7.1.2 分词

  • 我们在前面几章作词表的时候,通过将句子中所有标点符号替换成空格、基于空格将句子切分单词的过程,就是分词(word tokenization)的过程。简单地说,分词就是抽取出句子中的单词,或者说,分词就是将句子转换成一组单词的过程。NLTK库也提供了分词的模块。请看下面的代码示例。
#%%
import nltk
string = "My father's name being Pririp,and my Christian name Philip,my infant tongue could make of both names nothing longer or more explicit than Pip. So,I called myself Pip,and came to be called Pip."
# 载入和定义分词器(sentence splitter) sent_tokenizer
string_tokenized = nltk.word_tokenize(string)
string_tokenized
  • 上面代码中的string是Great Expectations正文的第一段。打印结果如下:
['My','father',"'s",'name','being','Pririp',',','and','my','Christian','name','Philip',',','my','infant','tongue','could','make','of','both','names','nothing','longer','or','more','explicit','than','Pip','.','So',',','I','called','myself','Pip',',','and','came','to','be','called','Pip','.']
  • 从上面的打印结果可见,nltk.word_tokenize()函数将分词后的结果保存为一个列表,列表的每个元素为原字符串中的单词和标点符号。

7.1.3 制作词表

  • 我们可以将上述分句和分词的方法,使用nltk.word_tokenize()函数先进行分句和分词处理。另外,我们将词频表按词频由大到小排序。请看下面的代码。

(1)分句处理

import nltk
file_in = open(r"D:\works\文本分析\leopythonbookdata-master\texts\ge.txt",'r')
file_out = open("D:\works\文本分析\ge_worldlist4.txt","a")
# 下面对文本进行分词处理
# 结果存储到all_sentences列表中
all_sentences = []
sent_tokenizer = nltk.load('tokenizers/punkt/english.pickle')
for line in file_in.readlines():sents = sent_tokenizer.tokenize(line) #笔者在实际操作中发现,这个函数可以自动过滤掉空行for sent in sents:all_sentences.append(sent) #结合上一条注释,all_sentences列表中没有空行
  • 实际上,sent_tokenizer.tokenize是将英文“.”切分的,如果便利的一行中存在“.”,那就进行切分。如果这一行中没有“.”号,那就把这一行作为一个被切分的句子。

(2)分词处理

# 下面对分词后列表中的字符串进行分词处理
# 结果存储到all_words 列表中
all_words = []
for sent in all_sentences:sent_tokenized = nltk.word_tokenize(sent)for word in sent_tokenized:all_words.append(word.lower()) #word.lower是将所有单词都用小写模式

(3)词频统计

# 下面对分词后列表中的字符串进行词频统计
# 结果存储在wordlist_freq字典中
wordlist_freq = {}
for word in all_words:'''下面的if——else语句的功能是:判断这个word是否在字典中,如果word已经是字典的一个key值,那么就将这个key值对应的values值增加1;如果word不是字典的一个key值,那么就将这个word作为新的一个key值,并将对应的values赋值为1'''if word in wordlist_freq.keys():wordlist_freq[word] += 1else:wordlist_freq[word] = 1
  • 第10行中的wordlist_freq.keys()得到的是一个dict_keys类型,如果想将其变成可迭代的list类型,可以使用list(wordlist_freq.keys())方法。

对词频字典按词频逆序排序

# 下面对词频字典按词频逆序排序
# 结果储存到pairs_reversed列表中
pairs_reversed = []
for p in wordlist_freq.items():pairs_reversed.append([p[1],p[0]])pairs_reversed_sorted = sorted(pairs_reversed,reverse=True)# 将逆序词频表写入到file_out中
for p in pairs_reversed_sorted:file_out.write(p[1] + '\t' + str(p[0]) + '\n') #对于逆序表中的每一个列表,p[1]是字符串,p[0]是数字
file_in.close()
file_out.close()
  • 结果如下图(局部):

语料库数据处理个案实例(分词和分句、词频统计、排序)相关推荐

  1. 语料库数据处理个案实例(计算机搭配强度、删除表中的停用词、词料检索的KWIC实现)

    7.5 计算机搭配强度 搭配是语言地道与否的标志,是区分本族语言和非本族语言的重要指标,因此,语料库语言学和语言教学都非常重视搭配的研究.比如,汉语的"吃饭"是动词与名词搭配,动词 ...

  2. Python实例10:文本词频统计

    Python实例10:文本词频统计 6.6.1 问题分析 在英文中文中,出现哪些词,出现多少次? 6.6.2 hamlet英文词频统计 CalHamletV1.py 6.6.3 三国演义人物出场统计 ...

  3. python 对excel文件进行分词并进行词频统计_教你背单词 | 利用python分析考研英语阅读并生成词频降序表...

    作为一名19考研er 距离我考研结束已经过去大半年 想和大家分享一下当初背单词的骚操作 众所周知 考研英语"得阅读者得天下" 提升词汇量又是提高阅读的关键 那么问题来了? 大家都是 ...

  4. python 对excel文件进行分词并进行词频统计_python 词频分析

    python词频分析 昨天看到几行关于用 python 进行词频分析的代码,深刻感受到了 python 的强大之处.(尤其是最近自己为了在学习 c 语言感觉被它的语法都快搞炸了,python 从来没有 ...

  5. python jieba分词及中文词频统计

    这篇博客用来记录一下自己学习用python做词频统计的过程,接上篇的英文词频统计 上篇:python词频统计并按词频排序 参考资料:jieba参考文档 目录 一.jieba库简介 二.一些准备工作 三 ...

  6. 中英文分词后进行词频统计(包含词云制作)

    文章目录 1.英文词频统计和词云制作 2.中文词频统计和词云制作 2.1 错误发现 2.2 错误改正  在之前的分词学习后,开始处理提取的词语进行词频统计,因为依据词频是进行关键词提取的最简单方法: ...

  7. 自然语言分词处理,词频统计

    目标:将一段文字做分词处理,并统计分词中出现频度最高的五组词. 代码: ToAnalysis.java package com.test;import java.io.Reader; import j ...

  8. Python大数据:jieba分词,词频统计

    实验目的 学习如何读取一个文件 学习如何使用DataFrame 学习jieba中文分词组件及停用词处理原理 了解Jupyter Notebook 概念 中文分词 在自然语言处理过程中,为了能更好地处理 ...

  9. python分词和词频统计

    Python大数据:jieba分词,词频统计  黑冰中国 关注 0.1 2018.03.21 11:39* 字数 1717 阅读 7553评论 6喜欢 45赞赏 1 实验目的 学习如何读取一个文件 学 ...

最新文章

  1. SqlDataReader执行带输出参数存储过程 错误分析
  2. python爬虫如何从一个页面进入另一个页面-Python爬虫怎么获取下一页的URL和网页内容?...
  3. uml 工具_【推荐】灵活而丰富UML建模工具Enterprise Architect!
  4. sql 为什么要用where 1=1或者where 1 =0 ?
  5. 内网服务器时间修改,内网(无网络)搭建ntp时间同步服务
  6. html 图片防盗链,配置.htaccess文件实现图片防盗链
  7. 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
  8. NoSQL Manager for MongoDB 破解
  9. 32位程序如何在64位系统上运行_32位支持:使用 GCC 交叉编译 | Linux 中国
  10. 作为移动开发程序员,腾讯3轮面试都问了Android事件分发,分享PDF高清版
  11. java接口压力测试
  12. rpg存档修改网站_Switch上国宝级欧美版RPG游戏推荐
  13. java计算机毕业设计教务排课系统源码+mysql数据库+系统+lw文档+部署
  14. AI 诊断新算法,可提前十年查出老年痴呆症;济南酒店推行“人脸识别”,没带证件也可住店...
  15. 线性代数常用名词详解1
  16. Typora-PicGo-SMMS图床(Mac电脑和windows电脑)
  17. 【Python数据分析之pandas01】两个常用的数据结构
  18. quora 查看收藏的回答(bookmark)
  19. 知识付费海哥:知识变现三剑客
  20. 开发一款app软件需要什么样的服务器

热门文章

  1. hwd分别是长宽高_DS-2CD7A87HWD-XZS 海康威视800万AI人脸抓拍比对筒型网络摄像机
  2. 推荐系统基础之矩阵分解
  3. 学生证选课系统c语言大作业,学生选课管理系统c语言程序
  4. 课堂笔记(3) 假设检验 Hypothesis testing
  5. E. 新旧身份证(继承)
  6. js,jquery常用拼接html方法,js,jquery拼接字符串
  7. 视频号将成为大众的生活方式
  8. 一起学java!java环境搭建
  9. python爬歌词生成词云图_Python爬虫摇滚网易云音乐歌词生成词云图
  10. MATLAB--微分方程