NLTK的内置函数

1. 词语索引

(1) concordance函数    给出一个指定单词每一次出现,连同上下文一起显示。

>>>text1.concordance('monstrous')

(2) similar函数    查找文中上下文结构相似的词,如the___pictures 和 the___size 等。

>>> text1.similar("monstrous")

(3) common_contexts 函数    检测、查找两个或两个以上的词共同的上下文。

>>> text2.common_contexts(["monstrous", "very"])
                   be_glad am_glad a_pretty is_pretty a_lucky
           >>>

2. 词语离散图

判断词在文本中的位置:从文本开头算起在它前面有多少词。这个位置信息可以用离散图表示。

>>> text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])
           >>>

3. 词语计数

>>>len(text3)

44764

4. 文本-->词表 并排序

sorted(set(text3))

5. 词汇丰富度

>>> from __future__ import division
           >>> len(text3) / len(set(text3))
           16.050197203298673
           >>>

6. 词在文本中出现的次数和百分比

>>> text3.count("smote")
           5
           >>> 100 * text4.count('a') / len(text4)
           1.4643016433938312
           >>>

7. 索引列表

(1) 表示元素位置的数字叫做元素的索引。

>>> text1[50]
               'grammars'
               >>>

(2) 找出一个词第一次出现的索引。

>>> text1.index('grammars')
               50
               >>>

8. 切片    可以获取到文本中的词汇(文本片段)。

>>>text1[100:120]['and', 'to', 'teach', 'them', 'by', 'what', 'name', 'a', 'whale', '-', 'fish', 'is', 'to', 'be', 'called', 'in', 'our', 'tongue', 'leaving', 'out']
               >>>

9. NLTK 频率分布类中定义的函数

例子                                                        描述
   fdist = FreqDist(samples)                     创建包含给定样本的频率分布
   fdist.inc(sample)                                                 增加样本
   fdist['monstrous']                                     计数给定样本出现的次数
   fdist.freq('monstrous')                                     给定样本的频率
   fdist.N()                                                               样本总数
   fdist.keys()                                             以频率递减顺序排序的样本链表
   for sample in fdist:                                    以频率递减的顺序遍历样本
   fdist.max()                                                         数值最大的样本
   fdist.tabulate()                                                 绘制频率分布表
   fdist.plot()                                                        绘制频率分布图

fdist.plot(cumulative=True)                         绘制累积频率分布图
fdist1 < fdist2                                    测试样本在fdist1 中出现的频率是否小于fdist2

text1.concordance("monstrous") # 搜索单词,并显示上下文
text1.similar("monstrous") # 搜索具有相似上下文的单词
text2.common_context(["monstrous", "very"]) #两个或两个以上的词的共同的上下文
text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"]) # 将语料按时间顺序拼接,此命令即可画出这些单词在语料中的位置,可以用来研究随时间推移语言使用上的变化
text3.generate() # 根据语料3的词序列统计信息生成随机文本【计算机写SCI论文的原理?】

len(text3) / len(set(text3)) # 计算平均词频 或者叫 词汇丰富度
100* text3.count("smote") / len(text3) # 计算特定词在文本中的百分比
标识符: All words
类型:Unique words

FreqDist(text1).keys()[:50] # 查看text1中频率最高的前50个词,FreeDist([])用来计算列表中元素的频率
FreqDist(text1).hapaxes() # 查看频率为1的词
bigrams(['more', 'is', 'said', 'than', 'done']) # 构造双连词,即[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
text4.collocations() # 返回文本中的双连词

fdist = FreqDist(samples) 创建包含给定样本的频率分布
fdist.inc(sample) 增加样本
fdist['monstrous'] 计数给定样本出现的次数
fdist.freq('monstrous') 给定样本的频率
fdist.N() 样本总数
fdist.keys() 以频率递减顺序排序的样本链表
for sample in fdist: 以频率递减的顺序遍历样本
fdist.max() 数值最大的样本
fdist.tabulate() 绘制频率分布表
fdist.plot() 绘制频率分布图
fdist.plot(cumulative=True) 绘制累积频率分布图
fdist1 < fdist2 测试样本在 fdist1 中出现的频率是否小于 fdist2

nltk.Text(gutenberg.words("autsten-emma.txt') # 索引文本,下一步才能使用concordance等函数.
gutenberg.raw(fileid) # 给出原始文本内容
gutenberg.words(fileid) # 词数
gutenberg.sents(fileid) # 句数
wordlists = PlaintextCorpusReader(corpus_root, '.*') # 读入自己的语料库

cfdist= ConditionalFreqDist(pairs) 从配对链表中创建条件频率分布
cfdist.conditions() 将条件按字母排序
cfdist[condition] 此条件下的频率分布
cfdist[condition][sample] 此条件下给定样本的频率
cfdist.tabulate() 为条件频率分布制表
cfdist.tabulate(samples, conditions) 指定样本和条件限制下制表
cfdist.plot() 为条件频率分布绘图
cfdist.plot(samples, conditions) 指定样本和条件限制下绘图
cfdist1 < cfdist2 测试样本在 cfdist1 中出现次数是否小于在 cfdist2 中出现次数

条件概率的应用:

# -*- encoding: utf-8 -*-

import nltk

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

text = nltk.corpus.genesis.words('english-kjv.txt')
bigrams = nltk.bigrams(text)
cfd = nltk.ConditionalFreqDist(bigrams)

print cfd['living']

generate_model(cfd, 'living')

nltk.corpus.stopwords.words('english') # stop words, 停用词
nltk.corpus.names # 姓名

wordnet.synsets('car') # 同义词集
wordnet.lemmas('car') # 获取所有包含词car的词条

 
 下载、读取、处理网络文本
from urllib import urlopen
url = "http://www.gutenberg.org/files/2554/2554.txt"
raw = urlopen(url).read()

url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
html = urlopen(url).read()
raw = nltk.clean_html(html) # 清除html标记,但导航等内容还是无法清除

import feedparser
blog = feedparser.parse("http://languagelog.ldc.upenn.edu/nll/?feed=atom")
blog['feed']['title']
post = blog.entries[2]

tokens = nltk.word_tokenize(raw) # 分词
text = nltk.Text(tokens) # 下一步才能使用text.collocations()等函数

# 解码
import codecs
f = codecs.open(path, encoding='latin2')

# 正则
re.findall(r'^.*(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing') ==> ['ing']
re.findall(r'^.*(?:ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processing') ==> ['processing']

re.findall(r'^(.*)(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processes') ==> [('processe', 's')]
re.findall(r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)$', 'processes') ==> [('processe', 'es')]
re.findall(r'^(.*?)(ing|ly|ed|ious|ies|ive|es|s|ment)?$', 'language') ==> [('processe', '')]

# 查找上、下位词
hobbies_learned = nltk.Text(brown.words(categories=['hobbies', 'learned']))
hobbies_learned.findall(r"<\w*> <and> <other> <\w*s>")

将得到:
speed and other activities; water and other liquids; tomb and other
landmarks; Statues and other monuments; pearls and other jewels;
charts and other items; roads and other features; figures and other
objects; military and other areas; demands and other factors;

# 词干提取
tokens = nltk.word_tokenize(raw)
porter = nltk.PorterStemmer()
lancaster = nltk.LancasterStemmer()
[porter.stem(t) for t in tokens]

# 词形归并
wnl = nltk.WordNetLemmatizer()
[wnl.lemmatize(t) for t in tokens]

# 分词
nltk.regexp_tokenize()

# Python 过程风格与声明风格
# 找到文本中最长的词

maxlen = max(len(word) for word in text)
[word for word in text if len(word) == maxlen] # 熟悉并经常使用

lengths = map(len, nltk.corpus.brown.sents(categories="news"))
avg = sum(lengths) / len(lengths)

set() # 后台已经做了索引,集合成员地查找尽可能使用set

matplotlib # 绘图工具
NetworkX # 网络可视化

转--NLTK的内置函数的更多相关文章

  1. Entity Framework 6 Recipes 2nd Edition(11-12)译 -> 定义内置函数

    11-12. 定义内置函数 问题 想要定义一个在eSQL 和LINQ 查询里使用的内置函数. 解决方案 我们要在数据库中使用IsNull 函数,但是EF没有为eSQL 或LINQ发布这个函数. 假设我 ...

  2. Oracle内置函数:时间函数,转换函数,字符串函数,数值函数,替换函数

    dual单行单列的隐藏表,看不见 但是可以用,经常用来调内置函数.不用新建表 时间函数 sysdate 系统当前时间 add_months 作用:对日期的月份进行加减 写法:add_months(日期 ...

  3. python内置函数

    python内置函数 官方文档:点击 在这里我只列举一些常见的内置函数用法 1.abs()[求数字的绝对值] >>> abs(-13) 13 2.all() 判断所有集合元素都为真的 ...

  4. DAY5 python内置函数+验证码实例

    内置函数 用验证码作为实例 字符串和字节的转换 字符串到字节 字节到字符串

  5. python之常用内置函数

    python内置函数,可以通过python的帮助文档 Build-in Functions,在终端交互下可以通过命令查看 >>> dir("__builtins__&quo ...

  6. freemarker内置函数和用法

    原文链接:http://www.iteye.com/topic/908500 在我们应用Freemarker 过程中,经常会操作例如字符串,数字,集合等,却不清楚Freemrker 有没有类似于Jav ...

  7. set、def、lambda、内置函数、文件操作

    set : 无序,不重复,可以嵌套 .add (添加元素) .update(接收可迭代对象)---等于批量 添加 .diffrents()两个集合不同差 .sysmmetric difference( ...

  8. SQL Server 内置函数、临时对象、流程控制

    SQL Server 内置函数 日期时间函数 --返回当前系统日期时间 select getdate() as [datetime],sysdatetime() as [datetime2] getd ...

  9. Python-Day3知识点——深浅拷贝、函数基本定义、内置函数

    一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...

随机推荐

  1. 20145325张梓靖 实验四 "Andoid开发基础"

    20145325张梓靖 实验四 "Andoid开发基础" 实验内容 使用 Android Studio 设计"Hello" 设计过程 创建项目 选择.xml中的 ...

  2. ubuntu 18.04 64bit如何编译安装内核

    1.获取 wget http://mirrors.163.com/kernel/v4.x/linux-4.15.13.tar.gz 2.解压 tar xvf linux-4.15.13.tar.gz ...

  3. Knockout 模板使用

    html 代码: @using GreenWay.Models; @{ Model.Scripts = new string[] { "~/Scripts/paginationViewMod ...

  4. 【bzoj4972】小Q的方格纸 前缀和

    题目让O(1)预处理出来 类三角形边界及内部的和 根据这个图 就是一个大矩形-左边的绿色的矩形 - 蓝色的大三角形 + 右上角突出的蓝色的小三角形 #include<bits/stdc++.h& ...

  5. luogu P1605 迷宫

    https://www.luogu.org/problem/show?pid=1605 就很实在的深搜  我就是模拟的地图搜索  没想到竟然1A了   给了我很大的信心 #include<bit ...

  6. 【Mysql】修改mysql的字符集和默认存储引擎,解决数据入库乱码问题

    背景 在使用Python + Testlink做自动化的过程中,遇到了数据入库出现乱码的情况,后来通过修改字符集的方式解决了这个问题.下面的内容主要来自于一篇相关博文,博主做了细微的调整, 原文链接: ...

  7. 【转】IntelliJ IDEA的光芒会盖过Eclipse吗

    作为一个资深的Eclipse用户,我想对IntelliJ IDEA做一个更为严谨的审视.JetBrains的工作人员非常的友善,并为Podcastpedia.org和Codingpedia.org这两 ...

  8. angular 之路由

    1.用angular-cli建一个工程自带路由怎么做? 命令:ng new  项目名 --routing 2.怎么使用路由器和路由器的一些基本使用. //html页面 <a routerLink ...

  9. MQ是什么 RabbitMQ

    一.rabbitMQ是什么: RabbitMQ,遵循AMQP协议,由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上. 学过websocket的来理解rabbitMQ应该是 ...

  10. 【Ubuntu14】Nginx+PHP5+Mysql记录

    这次因为工作原因,需要在Linux下进行开发.推荐的环境是Ubuntu14+Nginx+PHP+Mysql.环境搭建好之后,装上GIT,装上IDE,觉得Mysql命令界面麻烦又装了个Navicat.总 ...