NLTK之词频

使用Python+NLTK实现英文单词词频统计 使用Python+NLTK实现英文单词词频统计使用PythonNLTK实现英文单词词频统计 应用场景 Fork Me 参考运行环境 流程步骤图 详细步骤 读取文件 过滤特殊符号以及还原常见缩写单词 分词 词形还原 NLTK 单词的TAG 词形还原 统计词频 结果写入文件应用场景本人近来想要提高英语水平,决定从直接看英文书籍开始做起,在选择英文书的时候,我需要了解这本书的词汇量以及词频,这样在遇到生词 阅读详情

我的原文:http://blog.hijerry.cn/p/45749.html

FreqDist类

官方文档:nltk.probability.FreqDist

介绍:词的概率分布类,包含一些概率学的方法。

所在文件:probability.py ,大约在63~427行

创建

定义:__init__(self, samples=None)

import nltk
from nltk.book import *
fdist = FreqDist(gutenberg.words('chesterton-thursday.txt'))
print fdist

outputs:
<FreqDist with 6807 samples and 69213 outcomes>

上面的69213 outcomes是指有69213个词,而6807 samples是指有6807个不重复的词。

通过下述命令可以确认这一点:

len(wds)
len(set(wds))

outputs:
69213
6807

词数量

fdist.N()

outputs:
69213

### 不重复词的数量(样本数量)

fdist.B()

outputs:
6807

生成副本

fdist2 = fdist
fdist3 = fdist.copy() #make copy
fdist == fdist2
fdist == fdist3
fdist is fdist2
fdist is fdist3

outputs:
True
True
True
False

词频率

定义:freq(sample)

sample是词,返回值∈[0, 1]

fdist.freq('the')

outputs:
0.04754887087685839

可见,the的词频是0.0475,也就是4.75%

词频度(出现次数)

fdist['the']

outputs:
3291

词和词频的对

items = fdist.items()
print items[:5]

outputs:
[(u'yellow', 16), (u'four', 18), (u'Does', 6), (u'conjuring', 2), (u'marching', 4)]

只出现一次的词

会一次性全部返回,下面只展示前5个。

hapaxes = fdist.hapaxes()
print hapaxes[:5]

outputs:
[u'disturb', u'buttonhole', u'himselves', u'woods', u'wavered']

出现次数最多的词

fdist.max()

outputs:
u','

u是unicode的标志,说明,出现的最多。

这明显不符合预期,因为,不应该被算作一个词,这会干扰我们分析文本,所以在我们创建FreqDist实例的时候,应该要把词集进行过滤,剔除掉标点符号。

词频分布介绍

定义:pformat(maxlen=10)

返回一个可以代表本FreqDist类的字符串,其实就是把高频词和频度列出来了。

maxlen 表示打印多少个高频词

fdist.pformat()

outputs:
u'FreqDist({u\',\': 3488, u\'the\': 3291, u\'.\': 2717, u\'a\': 1713, u\'of\': 1710, u\'and\': 1568, u\'"\': 1336, u\'to\': 1045, u\'in\': 888, u\'I\': 885, ...})'

频率分布图

定义:plot(*args, **kwargs)

可以指定的参数有

  • title 表示图像的标题
  • cumulative 是否累计频度

如果第一参数是整数的话,它表示展示词的数量

fdist.plot(50)

这样看起来是不是别扭呢,因为曲线肯定会下降(频度越高的词越显示在左边)

所以有时候我们需要看这些高频词加起来占了多少,所以:

fdist.plot(50, cumulative=True)

可以发现,曲线越到后面越平缓。

频率分布表

fdist.tabulate(10)

outputs:
   ,  the    .    a   of  and
3488 3291 2717 1713 1710 1568

累计表:

fdist.tabulate(10,cumulative=True)

outputs:
    ,   the     .     a    of   and
 3488  6779  9496 11209 12919 14487

FreqDist的应用

前面已经介绍了Text,结合本次的FreqDist类,我们已经可以做一些基础的NLP研究了。

理解文本的主题或风格

高频词

text1 变量保存的是《白鲸记》Text类实例,高频词是否可以帮助我们理解呢?

打印出它前50个词的频率分布图可以发现:

fdist1 = text1.vocab()
fdist1.plot(50, cumulative=True)

相比the、of 这类助词,whale的频率相对靠后,而这个词恰恰是《白鲸记》中比较重要的词,可以体现出文本的主题。

低频词

既然高频率词没啥帮助,那只出现一次的词呢?

len(fdist1.hapaxes())

outputs:
9002

emmm,貌似低频词太多了,如果不看上下文,我们也很难借助低频词来理解文本主题。

细粒度的选择词

或许长词包含的信息比较多,是否有帮助呢?

我们考虑以下哪些成都大于15的词:

samples = set(text1)
print [w for w in samples if len(w) > 15]

outputs:
[u'hermaphroditical', u'subterraneousness', u'uninterpenetratingly', 
u'irresistibleness', u'responsibilities', u'comprehensiveness', 
u'uncompromisedness', u'superstitiousness', u'uncomfortableness', 
u'supernaturalness', u'circumnavigating', u'cannibalistically', 
u'circumnavigations', u'indispensableness', u'preternaturalness', 
u'apprehensiveness', u'CIRCUMNAVIGATION', u'simultaneousness', 
u'undiscriminating', u'characteristically', u'Physiognomically', 
u'physiognomically', u'circumnavigation', u'indiscriminately']

似乎比低频词的数量要少很多了,可以发现的是,长词 大多也是 低频词,所以从这个角度来说我们忽略了短高频词和大部分低频词,也许寻找那些长高频词会比较有帮助。

长高频词

下面将选择出那些长度大于7,且出现的频度也大于7的词:

print [w for w in samples if len(w) > 7 and fdist1[w] > 7]

outputs:
[u'uncertain', u'bringing', u'substance', u'cannibal', u'therefore', u'violently', u'whalebone' ...]

其实得到的结果数量还是很多,但我们已经看到了whalebone 这个词,可以大致确定下来《白鲸记》的主题了,所以寻找长高频词可以有效的帮助我们理解文本的主题。

搭配词

文中出现的搭配词能非常明确的体现文本的类型。

下面寻找搭配词:

text1.collocations()

outputs:
Sperm Whale; Moby Dick; White Whale; old man; Captain Ahab; sperm
whale; Right Whale; Captain Peleg; New Bedford; Cape Horn; cried Ahab;
years ago; lower jaw; never mind; Father Mapple; cried Stubb; chief
mate; white whale; ivory leg; one hand

可以看到第一个词就是Sperm Whale 。

计算其他东西

词长分布

也就是计算每个长度的词出现的次数

lens = [len(w) for w in text1]
fdistw = FreqDist(lens)
fdistw.keys()

outputs:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20]

可以看到text1中的词,最短长度是1,最长长度是20

fdistw.plot()

可以发现长度大于8和之后的的词出现的频度已经很小了

fdistw.max()

outputs:
3

可以发现,最频繁出现的词长度是3。

ConditionalFreqDist类

官方文档:nltk.probability.ConditionalFreqDist

介绍:条件频率分布类

所在文件:probablity.py,大约在1734~2003

创建

定义:__init__(cond_samples=None):

import nltk
from nltk.book import *
from nltk.probability import ConditionalFreqDist
cond_samples = [(len(w), w) for w in text1]
cfdist = ConditionalFreqDist(cond_samples)
print cfdist

outputs:
<ConditionalFreqDist with 19 conditions>

cond_samples参数是元组集合,元组是(条件, 词),上述代码的条件是词长,下面看看效果你就懂了:

cfdist[3]

outputs:
FreqDist({u'the': 13721, u'and': 6024, u'his': 2459, u'was': 1632, u'all': 1462, u'for': 1414, u'but': 1113, u'not': 1103, u'him': 1058, u'one': 889, ...})

这列出了所有长度为3的词,这意味着元组的第一个元素条件被作为了cfdist的键,而它值是一个FreqDist对象。

查看所有条件

cfdist.conditions()

outputs:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20]

条件频率

cfdist[3].freq('but')

outputs:
0.02216116122095454

在长度为3的条件下,but出现的频率是0.02216

条件频率分布图

定义:plot(*args, **kwargs)

可以指定的参数有

  • samples list 要显示的样本集合
  • title str 标题
  • conditions list 要显示的条件,默认是全部

为了便于理解,下面把cfdist换成以文本为条件:

from nltk.corpus import brown
cond_samples = [
  (genre, word)
  for genre in ['news', 'romance']
  for word in brown.words(categories=genre)
]
cfdist = ConditionalFreqDist(cond_samples)
print cfdist

outputs:
<ConditionalFreqDist with 2 conditions>

这里我们取了两个文体:news 和 romance,看看两者中情态动词的频率分布吧:

cfdist.plot(samples=['would', 'will', 'could', 'can', 'might', 'may', 'should'])

哈哈,大致符合预期呢,新闻中的will频率异常的高。

条件频率分布表

定义:tabulate(*args, **kwargs)

可以指定的参数有

  • samples list 要显示的样本集合
  • title str 标题
  • conditions list 要显示的条件,默认是全部
cfdist.tabulate(samples=['would', 'will', 'could', 'can', 'might', 'may', 'should'])

outputs:
         would   will  could    can  might    may should
   news    244    389     86     93     38     66     59
romance    244     43    193     74     51     11     32

ConditionalFreqDist的应用

用词分析

之前对比了news、romance两个文体中,情态动词的频率分布,发现了news 的will词用的频率很高。

生成随机文本

如果知道了一个词如living,也知道了living这个词的条件频率分布,那么可以找到最有可能出现在living后面的那个词,这样迭代的进行计算,可以获得一个随机文本。根据上述方法,可以定义一个函数用来生成随机文本:

def random_text(cfdist, word, num=15):
    for i in range(num):
        print word,
        word = cfdist[word].max()

我们导入《创世纪》文本:

from nltk.corpus import genesis
text = genesis.words('english-kjv.txt')

为创建条件概率分布类,我们需要cond_samples,所以我们可以构造一些双连词,bigrams 可以从数组 生成 双连词:

from nltk import bigrams
cond_samples = bigrams(text)
cfdist = ConditionalFreqDist(cond_samples)
random_text(cfdist, 'living')

outputs:
living creature that he said , and the land of the land of the land

可以发现。。效果不怎么好,因为后面无限循环了。。

我们试试其他词:

random_text(cfdist, 'I')

outputs:
I will not be a son , and the land of the land of the

哈哈,最后还是无限循环了,不过挺有趣的!

Python 利用nltk,jieba库统计词频并导入csv文件 利用Python的nltk模块进行词频统计: 示例的negreview.txt 链接见: 链接:https://pan.baidu.com/s/10XJiJtzjhVauGJ8vtyxDIQ 提取码:g65t 这是一段女装差评文本,我们需要统计词频并写入csv文件: import nltk import jieba from nltk.corpus import stopwords import ... 阅读详情

相关推荐

Sentinel-1 Burst数据处理避坑实录:从aria2c报错到wget脚本救场

本文详细介绍了Sentinel-1 Burst数据处理的完整解决方案,从下载困境到高效处理技巧。针对aria2c报错等常见问题,提供了增强版wget脚本和智能分组方法,显著提升下载成功率和处理效率,特别适合科研机构和企业级网络环境下的哨兵数据处理需求。

weixin_42641998的博客 284

nltk中的FreqDist,ConditionalFreqDist和Bigram

1. FreqDist的使用:接受参数words后, 会统计words中每个word的频数,并返回一个字典,key是word,value是word在words中出现的频数。   sentences = '异响严重,副驾门异响,不知不觉就到了3000公里首保' sentences2 = '我的小悦也有异响了!' words = jieba.lcut(sentences) words1 = ji...

zhuzuwei的博客 6442

STM32H743 ADC校准失败排查:HAL_ADCEx_Calibration_Start()的正确调用时机

本文深入剖析了STM32H743 ADC校准失败的核心原因,即错误地在ADC使能状态下调用HAL_ADCEx_Calibration_Start()函数,导致读数漂移。文章详细解释了校准必须在ADC禁用状态下进行的硬件原理,列举了典型错误场景,并提供了上电初始化与周期性重校准的正确代码实践,帮助开发者彻底解决ADC精度问题。

ik678901的博客 1177

nltk学习之统计词频和分词nltk.word_tokenize nltk.FreqDist

分词 (1)可以使用split()函数 import nltk import numpy as np import re from nltk.corpus import stopwords #1 分词1 text = "Sentiment analysis is a challenging subject in machine learning.\ People express thei...

机器学习初学者必看,关注我,一起了解机器学习 3369

使用Java实现CRC16 MODBUS 格式校验

CRC16校验,测试如下 String str = "a5 98 03 00 00 5f c6 0f 7c 40 78 06 09 46 dc 6e db 00 16 3e 12 5c 98 00 19 98 0e 10 03 06 09 46 dc 6e db 03 0b bf 5f c6 0f 7c 43 bd b9 61 ee 96 76 99"; 校验规则: /** * CRC16_CCITT:多项式x16+x12+x5+1(0x1021),初始值0x0000,低位在前,高位在后,结

weixin_45063710的博客 1316

Codex 团队如何用自己的产品构建产品——整个 Spec 只有 10 个要点

OpenAI Codex团队采用极简产品开发模式,整个产品规格仅10个要点。团队50-100人长期仅1名PM,设计师代码量已超过工程师。产品负责人Alexander Embiricos透露,团队几乎不写详细文档,仅在需要协调时写简短要点。OpenAI采用独特规划哲学:只做8周内短期或长期方向性规划,拒绝中期路线图。2025年GPT-5.2 Codex发布后,模型能力突破催生了桌面应用开发。团队强调"让离代码最近的人做决策",PM角色转变为"填空者",设计师与工程师界限

348

nltk(2)——频率分布&词操作

频率分布 函数FreqDist 函数FreqDist方法获取在文本中每个出现的标识符的频率分布。通常情况下,函数得到的是每个标识符出现的次数与标识符的map映射 标识符 出现次数 are 209 the 660 people 550 fdist = FreqDist(text1) fdist FreqDist的常用函

wang735019的专栏 7003

YOLOv8独家原创改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4684

自然语言处理学习4:nltk词频统计FreqDist,ConditionalFreqDist和tabulate 结合汽车评论实例

1. 加载函数和准备数据 import nltk import jieba import numpy as np import pandas as pd import re # 读取评价数据 def load_comments(filename): df = pd.read_csv(filename, encoding='gbk') pos_comments = list(df...

zhuzuwei的博客 6395

成功解决AttributeError: ‘ImageDraw‘ object has no attribute ‘textsize‘

​ 成功解决AttributeError: 'ImageDraw' object has no attribute 'textsize' 目录 解决问题 解决思路 解决方法 解决问题 AttributeError: 'ImageDraw' object has no attribute 'textsize' 解决思路 属性错误:'ImageDraw'对象没有属性'textsize' 解决方法 最新的Pillow 10.0.0 版本已经删除了这个函数,导致两个库(Pillow 、wordc

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4780

TriCore架构-基于TC397的启动流程

TC397芯片的启动流程分为三个关键阶段:固件启动(BootFirmware)、Bootloader引导和应用程序启动。BootFirmware作为硬件信任根,包含SSW基础初始化、CHSW自检和BSL应急刷写通道。Bootloader承担安全验证和程序引导功能,支持双分区(AB-SWAP)和双引导方案(PBL/SBL)。安全启动通过校验机制确保软件完整性,提供三种可选技术方案。应用程序启动阶段实现软件双分区管理,支持SOTA更新。整个流程体现了汽车电子系统的安全设计理念,通过硬件级保护与软件验证相结合确保

xiandang8023的博客 987

NLTK(FreqDist)

本系列博客为学习《用Python进行自然语言处理》一书的学习笔记。 1.3节 P17 FreqDist继承自dict,所以我们可以像操作字典一样操作FreqDist对象。 在本例中,FreqDist中的键为单词,值为单词的出现总次数。 实际上FreqDist构造函数接受任意一个列表,它会将列表中的重复项给统计起来, 在本例中我们传入的其实就是一个文本的单词列表。我们可以看看每个单词对...

csdn_lzw的博客 1万+

【算能】TPU(张量处理单元)的深度解析

算能(SOPHGO)作为国产AI芯片领域的核心企业,其TPU(张量处理单元)以高能效比与全场景覆盖能力为核心竞争力,专注于边缘计算与行业垂直领域的AI推理加速。

浩瀚之水的专栏 1549

我应该如何使用 Python 的 NLTK 库进行词频统计?

这是一个基本的流程,你可以根据需要调整分词、清洗和统计的步骤。例如,你可能需要根据你的语言环境调整停用词列表,或者添加额外的文本预处理步骤,如词干提取(stemming)或词形还原(lemmatization)。在Python脚本或交互式环境中,导入NLTK库中的。

youyouxiong的博客 996

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

使用NLTK进行英文文本的分词和统计词频

目录分词分词后词干提取和词形归一Stemming词干提取 分词 先将文档读入,然后全部变为小写 txt=open("English.txt","r").read() txt = txt.lower()#将英文全部变为小写 中文分词需要专门的方法: 英文分词就可以直接使用word_tokenize()进行分词 text="This is a text for test.And I want to learn how to use nltk." words = nltk.word_token

苣篛 6004

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NLTK 统计词频

import nltk Freq_dist_nltk = nltk.FreqDist(list) for k,y in Freq_dist_nltk: print str(k),str(y) 转载于:https://www.cnblogs.com/pxfb/p/9430466.html

weixin_30684743的博客 538

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NLTK统计中文词频并输出

# -*- coding: utf-8 -*- ''' 使用NLTK对中文进行词频统计并输出 ''' from nltk import FreqDist def delblankline(infile, outfile): infopen = open(infile, 'r',encoding="utf-8") outfopen = open(outfile, 'w',enco...

为援不可图 2114

Python:使用nltk统计词频并绘制统计图

测试环境: mac python3.6.5 安装 pip install nltk 代码示例 # -*- coding: utf-8 -*- from nltk import FreqDist from matplotlib import rcParams # matplotlib 设置中文字体 rcParams["font.family"] = "STHeiti" rcParams["fo...

彭世瑜的博客 5978

[python]文本处理 pandas、nltk词频统计

先做好预处理和分词,word_list为处理好的列表 nltk的FreqDist方法 import nltk freqlist = nltk.FreqDist(word_list) #生成一个词频的字典 freqlist['词'] #查一个词的频率 freqlist.keys() #看里面所有的词 freqlist.tabulate(10) #前十个高频词,表显示 freqlist.most_common(5) #列表显示,列表中是元组 pandas import pandas as p

ShenZ的博客 2110

NLTK入门一:文本的信息统计、搜索和词频统计概览

为什么80%的码农都做不了架构师?>>> ...

weixin_34283445的博客 1579

词频统计排序的几种方法(手写 pandas NLTK)

#在list中词频统计小程序分析 ''' 利用dict将list中的词频统计一kv的形式展现出来 ''' ls = ["综合", "理工", "综合", "综合", "综合", "综合", "综合", "综合", \ "综合", "综合", "师范", "理工", "综合", "理工", "综合", "综合", \ "综合", "综合", "综合", "理工", "理工"...

4378

python使用nltk进行中文语料库的词频分布统计

python使用nltk进行中文语料库的词频分布统计,

qq_48068259的博客 2995

Python 3.6 利用NLTK 统计多个文本中的词频

#!/usr/bin/env python # encoding: utf-8""" @author: wg @software: PyCharm @file: word_frequency_statistics.py @time: 2017/3/16 0016 10:46 """import os import nltk''' 利用NLTK 统计多个文本中的词频 '''dirs = os.list

大泡泡的专栏 7938

【NLTK基础教程】01-02 利用nltk统计词频

在上篇中,简单的介绍了三种获取有效文本的方法,那么接下来就利用nltk来统计这些文本中出现的次数。 我们首先来看下传统统计词频的方法: import operator freq_dis={} for tok in tokens: if tok in freq_dis: freq_dis[tok]+=1 else: freq_dis[tok

山不过来,我就过去 4678

NLTK自然语言处理实战:3.1 词频统计与分析

本文介绍了NLTK库中的词频统计与分析功能,面向NLP初学者。主要内容包括:词频统计的基本概念与应用场景,NLTK中的FreqDist和ConditionalFreqDist工具的使用方法,以及词频统计的注意事项(如预处理、大小写处理等)。文章提供了完整代码示例,展示如何对英文文本进行分词、去停用词等预处理后,使用FreqDist统计词频、分析高频词和低频词,并计算累积频率等指标。通过学习可以掌握基础的文本分析方法,为后续NLP任务打下基础。

AI 题库 —— 软件编程老兵专属分享阵地,聚焦青少年编程等级考、Python/C++ 信息学奥赛、机器人技术等级考试备考干货,依托智能题库资源,用 5 年一线教学经验助力编程学习高效备考! 1342
上一篇: NLTK常用操作和语料库
下一篇: NLTK之词性标注
爆浆大鸡排
博客等级 码龄11年 65粉丝 66原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值