使用python进行字频统计和词频统计

这篇具有很好参考价值的文章主要介绍了使用python进行字频统计和词频统计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

  1. 读取给定的语料库,根据制表符’\t’划分其文本与标签,将获得的文本仅保留汉字部分,并按字划分,保存在列表中,至少使用一种方法,统计所有汉字的出现次数,并按照从高到低的顺序排序;至少使用一种方法,统计所有字频,按照从高到低的顺序排序;至少使用一种方法,计算累计频率,按照从高到低的顺序排序
  2. 读取给定的语料库,根据制表符’\t’划分其文本与标签,将获得的语料使用jieba分词工具进行分词并保存至列表中,使用停用词表过滤停用词,保留非停用词, 至少使用一种方法,统计所有汉字词的出现次数,并按照从高到低的顺序排序;至少使用一种方法,统计所有词频,按照从高到低的顺序排序;至少使用一种方法,计算累计频率,按照从高到低的顺序排序

对给定的语料库对其进行字频和词频统计


字频统计

处理步骤与思路

1、这个实验所用到的数据是按行保存的数据,所以可以使用python中的readline函数进行读取文件,这样得到的每一行数据就是对应的一条新闻,这些新闻又是以制表符/t来分割的,所以制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中,所以这里使用到python的split函数进行分割得到对应新闻的标签和内容

2、将文本内容只保留汉字部分,去除标点符号以及空格,在这里我使用到的是python中的正则表达式,对文本中出现的各种标点符号比如中英文下的逗号、句号、感叹号等一系列标点符号进行去除,同时使用到\d和\s分别匹配数字和空格,使用正则表达式re的sub函数进行去除这些相应的符号。将文本处理好之后再使用list函数,将处理好的字符串合并成列表,完成实验要求。

file = open(file='data.txt', mode='r', encoding='utf-8')
lines = file.readlines()
lables = []             # 保存每条新闻的标签
contents = []           # 保存每条新闻的内容
i = 0
words = []              # 用来保存所有的汉字
strs = ''               # 用于保存保留下的所有汉字
# 将文本文件中的内容进行分割,制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中
for line in lines:                  # 我分析文本内容得知,每条新闻是按行存放的,所以使用python的读取行的函数就可以分离出每条新闻
    lable = line.split('\t')[0]
    lables.append(lable)
    content = line.split('\t')[1]
    contents.append(content)

    # 将文本内容只保留汉字部分,去除标点符号以及空格
    content = re.sub(r'\d', "", content)
    content = re.sub(r'\s', "", content)
    content = re.sub(pattern='[,,\-<>'《》・|~()>&\*-+"%{}=-、。.—!!??"::;;\/\.【】()\']', repl='', string=content)
    strs = strs + content
    # print(content)
    words.extend(list(content))

3、然后是统计所有汉字的出现次数,并按照从高到低的顺序排序,这里我使用到了两种方法,分别使用字典的方式以及字符串自带的内置函数完成每个词出现的次数。字典方式的实现是遍历之前获得的关于语句中每个词的列表,创建一个字典,键是汉字,值是对应出现的次数,然后当前遍历的字如果出现在字典中就修改当前键对应的值,如果没出现在字典中就要将其放到字典中。使用字符串的方式时使用到的函数是count函数,这个可以直接统计字符串中某一个汉字出现的次数。然后将统计好的次数按降序排列,使用到的函数为sorted函数,然后在参数选择的时候将reverse设置为True,然后就可以实现按降序排列了。

# 统计每一个汉字的出现次数,使用字典的形式进行统计
result = {}
for word in words:
    res = result.get(word, 0)
    if res == 0:
        result[word] = 1
    else:
        result[word] = result[word] + 1

result = sorted(result.items(),  key=lambda kv:(kv[1], kv[0]), reverse=True)
result = dict(result)
print("使用字典的形式进行统计的词数结果:")
new_a = {}
for i, (k, v) in enumerate(result.items()):
    new_a[k] = v
    if i == 9:
        print(new_a)
        break
new_a.clear()

# 统计每一个汉字的出现次数,使用字符串的内置函数
# print(strs)
result2 = []
# print('使用字符串的内置函数统计的所有的汉字数为:', end="  ")
# print(len(strs))
for w in set(strs):
    num = strs.count(w)
    tem = [w, num]
    result2.append(tem)
result2 = sorted(result2, key=lambda x:x[1], reverse=True)

4、然后统计所有字频,也就是使用每个单词出现的频数除以所有汉字出现的频数可以得到每个汉字出现的字频,这里我也用了两张方法,一种使用的是上一问得到的排序好的汉字,得到一个N行2列的二维列表,每一行的第一列是汉字,第二列是这个汉字出现的次数,然后对这个二维列表进行操作,让第二列除以所有汉字出现的次数,就可以得到每个汉字出现的频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值除以所有汉字的次数即可。

# 统计词频,使用上一步得到二维列表
fre = []
for item in result2:
    item[1] = item[1] / len(words)
    fre.append(item)
print('使用二维列表得到的字频结果:')
print(fre[:10])

5、然后统计每个汉字的累计频率,也就是使用每个单词出现的频率加上之前的汉字的频率可以得到每个汉字出现的累计频率,这里我也用了两张方法,一种使用的是上一问得到的排序好的汉字的字频列表,这是一个N行2列的二维列表,每一行的第一列是汉字,第二列是这个汉字出现的频率,然后对这个二维列表进行操作,让第二列加上之前汉字的频率,就可以得到每个汉字出现的累计频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值加上之前汉字的频率即可。

# 统计词频累计,使用上一问得到二维列表
cum = []
sum = 0
for item in fre:
    sum = sum + item[1]
    item[1] = sum
    cum.append(item)
print('使用二维列表得到的累计字频结果:')
print(cum[:10])


结果展示

首先是新闻类别的截图

使用python进行字频统计和词频统计

截取处理之后的汉字截图
使用python进行字频统计和词频统计

对字数统计的截图

使用python进行字频统计和词频统计

对字频统计的截图:

使用python进行字频统计和词频统计

对词频累计统计的截图

使用python进行字频统计和词频统计


词频统计

处理步骤与思路:

1、这个实验所用到的数据是按行保存的数据,所以可以使用python中的readline函数进行读取文件,这样得到的每一行数据就是对应的一条新闻,这些新闻又是以制表符/t来分割的,所以制表符前面的内容当作标题,制表符后面的符号当做内容,将这两部分内容放到列表中,所以这里使用到python的split函数进行分割得到对应新闻的标签和内容,最后得到的新闻的种类为3种,分别为科技, 财经和体育类的新闻,所涉及到共计新闻的总数为300条,这里使用列表的形式进行保存

file = open(file='data.txt', mode='r', encoding='utf-8')
lines = file.readlines()
lables = []                         # 保存每条新闻的标签
contents = []                       # 保存每条新闻的内容
for line in lines:                  # 分析文本内容得知,每条新闻是按行存放的,所以使用python的读取行的函数就可以分离出每条新闻
    lable = line.split('\t')[0]
    lables.append(lable)
    content = line.split('\t')[1]
    contents.append(content)

2使用jieba分词,jieba有三种不同的分词模式:精确模式、全模式和搜索引擎模式,精确模式是最常用的分词方法,全模式会将句子中所有可能的词都列举出来,搜索引擎模式则适用于搜索引擎使用。在这里不对新闻的内容进行处理直接进行分词,然后对分完之后的词也不做任何的处理得到的单词的列表是单纯进行分词之后的结果,这里的结果包含很多的没有用的信息,包括一些字符和一些空格或者是没有实际意义的词,这里得到的单词数为161724

words = []
for sentence in contents:
	# 使用jieba进行分词,使用精确模式
    devision_words = jieba.cut(sentence, cut_all=False)     
    # 将分词后的结果转化为列表,然后添加到分词列表中                            
    words.extend(list(devision_words))                                                  

3、然后根据上一问得到的单词列表进行相应的处理,这里使用的是停用词表进行判断,如果分词之后得到的单词列表的单词在停用词表中,那么就会将这个单词进行去除,另外我还加了一些处理,将一些数字、字母和空格的字符进行了去除,如果是这种单词那么也将不会添加到最终的单词列表中,最后经过停用词表进行相应的过滤之后得到的单词的数目为76650

stop_path = r"stopwords.txt"           # 停用词表的位置
stop_list = []
no_stop_words = []
for line in open(stop_path, 'r', encoding='utf-8').readlines():
    stop_list.append(line.strip())

for word in words:                                                          # 使用分词后的结果然后用空格进行分割,得到每个分词
    if word not in stop_list:                                               # 如果这个分词不在停用词表中并且不是换行或者制表符就将其加入到最后的字符串中,然后加一个空格
        word = re.sub(r'\d', "", word)                                     # 去除单词中的数字
        word = re.sub(r'\s', "", word)                                     # 去除单词中的空格
        word = re.sub(r'\W', "", word)                                     # 去除单词中的字母
        if word:
            no_stop_words.append(word)

4、然后是统计所有单词的出现次数,并按照从高到低的顺序排序,这里我使用到了两种方法,分别使用字典的方式以及列表自带的内置函数完成每个单词出现的次数。字典方式的实现是遍历之前获得的关于语句中每个词的列表,创建一个字典,键是单词,值是对应出现的次数,然后当前遍历的单词如果出现在字典中就修改当前键对应的值,如果没出现在字典中就要将其放到字典中。使用列表的方式时使用到的函数是count函数,这个可以直接统计列表中某一个单词出现的次数。然后将统计好的次数按降序排列,使用到的函数为sorted函数,然后在参数选择的时候将reverse设置为True,然后就可以实现按降序排列了。

# 统计每一个单词的出现次数,使用字典的形式进行统计
result = {}
for word in no_stop_words:
    res = result.get(word, 0)
    if res == 0:
        result[word] = 1
    else:
        result[word] = result[word] + 1

result = sorted(result.items(),  key=lambda kv:(kv[1], kv[0]), reverse=True)
result = dict(result)
print("使用字典的形式进行统计的词数结果:")
new_a = {}
for i, (k, v) in enumerate(result.items()):
    new_a[k] = v
    if i == 9:
        print(new_a)
        break
new_a.clear()

5、然后统计所有单词出现的频率,也就是使用每个单词出现的频数除以所有单词出现的频数可以得到每个单词出现的词频,这里我也用了两张方法,一种使用的是上一问得到的排序好的单词,得到一个N行2列的二维列表,每一行的第一列是单词,第二列是这个单词出现的次数,然后对这个二维列表进行操作,让第二列除以所有单词出现的次数,就可以得到每个单词出现的频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值除以所有单词的次数即可。

# 统计词频,使用上一问得到的字典
cum2 = {}
sum = 0
new_a.clear()
for i, (k, v) in enumerate(fre2.items()):
    sum = sum + v
    new_a[k] = sum
cum2 = new_a.copy()

6、然后统计每个单词的累计频率,也就是使用每个单词出现的频率加上之前的单词的频率可以得到每个单词出现的累计频率,这里我也用了两张方法,一种使用的是上一问得到的排序好的单词的字频列表,这是一个N行2列的二维列表,每一行的第一列是单词,第二列是这个单词出现的频率,然后对这个二维列表进行操作,让第二列加上之前单词的频率,就可以得到每个单词出现的累计频率了。第二种方式是使用之前得到的字典,对字典的值进行修改,让每一个字典项的值加上之前单词的频率即可。

# 使用字典得到的累计词频结果:
for i, (k, v) in enumerate(cum2.items()):
    new_a[k] = v
    if i == 9:
        print(new_a)
        break


结果展示

这里是统计的新闻的结果,共涉及3类新闻,共计300条。
然后显示分词之后在没有进行停用词的过滤前后的对比结果

使用python进行字频统计和词频统计

然后进行词数统计的结果

使用python进行字频统计和词频统计

进行词频统计的结果

使用python进行字频统计和词频统计

进行词频累计统计的结果

使用python进行字频统计和词频统计文章来源地址https://www.toymoban.com/news/detail-457264.html


到了这里,关于使用python进行字频统计和词频统计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 文本分析-使用Python做词频统计分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 前言 前面我们已经介绍了文本分析中的中文分词和去除停用词,这篇文章将详细介绍分词后

    2024年02月10日
    浏览(33)
  • 使用python统计《三国演义》人物词频,看看罗贯中笔下谁的出场次数最多

    “滚滚长江东逝水,浪花淘尽英雄”。近来读《三国演义》,忽然想看看到底哪位英雄在书中提到的最多,于是就想用分词算法实现一下。 网上也确实有相关的案例,作为参考,自己又重写并优化了一遍。 思路 下载《三国演义》txt文档 使用jieba分词算法对文档进行分词处理

    2024年02月06日
    浏览(30)
  • Python统计词频的几种方法

    本文介绍python统计词频的几种方法,供大家参考 目录 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 说明:运用集合对文本字符串列表去重,这样统计词汇不会重复,运用列表的counts方法统计频数,将每个词汇和其出现的次数打包成一个列表加入到

    2024年02月13日
    浏览(32)
  • Python英文词频统计(哈姆雷特)程序示例

    今天继续给大家介绍Python相关知识,本文主要内容是Python英文词频统计程序示例,主要是对英文文本——《哈姆雷特》进行分词。 想要对《哈姆雷特》进行英文单词词频统计,那么我们首先需要拿到《哈姆雷特》的原文,将之存储为本地的txt文档,然后使用Python打开该文件,

    2024年02月04日
    浏览(59)
  • 统计文本词频的几种方法(Python)

    目录 1. 单句的词频统计 2. 文章的词频统计 方法一:运用集合去重方法 方法二:运用字典统计 方法三:使用计数器 词频统计是自然语言处理的基本任务,针对一段句子、一篇文章或一组文章,统计文章中每个单词出现的次数,在此基础上发现文章的主题词、热词。 思路:首

    2024年02月04日
    浏览(33)
  • Python统计中文词频的四种方法

    统计中文词频是Python考试中常见的操作,由于考察内容较多,因此比较麻烦,那么有没有好的方法来实现呢?今天,我们总结了四种常见的中文词频统计方法,并列出代码,供大家学习参考。 中文词频统计主要是通过open()打开文本,然后read()方法读取后,采用结巴分词(jieb

    2024年02月11日
    浏览(41)
  • Python读取Word统计词频输出到Excel

    1.安装依赖的包 ``` \\\"# 读取docxn\\\",     \\\"!pip install python-docxn\\\",     \\\"!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docxn\\\",     \\\"# 中英文分词n\\\",     \\\"!pip install jieban\\\",     \\\"!pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieban\\\",     \\\"# 输出到exceln\\\",     \\\"!pip install pandas\\\"     \\\"!pip

    2024年02月13日
    浏览(35)
  • 字典类型操作、jieba库使用及文本词频统计

    字典的定义 理解“映射” 映射是一种键(索引)和值(数据)的对应 字典类型是“映射”的体现 键值对:键是数据索引的扩展 字典是键值对的集合,键值对之间无序 采用大括号{}和dict()创建,键值对用冒号: 表示 {键1:值1,键2:值3} 可以通过键拿到值 我们在之前的的集合中说声明

    2024年02月01日
    浏览(34)
  • python处理Excel Pandas xlwings numpy, jupyter,docx,jieba 词频统计 flash

    顺序不变,是可以的 如果李四和王五两行换一下,就不对了, 结果 pandas的nlargest(n,“排序的列”),只能求最大N个值 同比 df[‘昨日’] = df[“销售金额”].shift() shift() 会把销售金额放入昨日 python 在网页上显示Excel Excel 修改数据,网页只有刷新就可以了。 python 制作网页查询

    2024年02月10日
    浏览(36)
  • 常用【描述性统计指标】含义(by python)

    统计学有时候会被误解,好像必须有大量的样本数据,才能使统计结果有意义。 这会让我们觉得统计学离我们的日常生活很遥远。 其实,如果数据的准确度高的话,少量的样本数据同样能反映出真实的情况。 比如,很多国家选举时不断做的民意调查,一般做到有效样本160

    2024年02月05日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包