资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: 计算机考试归档 最新发布

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

  • 本文来自《基于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-mastertextsge.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] += 1
    else:
        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()
  • 结果如下图(局部):
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/982411.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【语料库数据处理个案实例(分词和分句、词频统计、排序)】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2