python 自然语言处理NLP(Chapter 1)

本系列为学习《python 自然语言处理》这本书的笔记,其目的是便于以后查阅方便。

Chapter 1 语言处理与python

用的自然语言工具包是nltk,语言处理任务与相应NLTK模块以及功能描述如下:

语言处理任务 NLTK模块 功能描述
获取语料库 nltk.corpus 语料库和词典的标准化接口
字符串处理 nltk.tokenize,nltk.stem 分词、句子分解、提取主干
搭配研究 nltk.collocations  t-检验,卡方,点互信息PMI
词性标示符 nltk.tag  n-gram,backoff,Brill,HMM,TnT
分类 nltk.classify,nltk.cluster  决策树,最大熵,朴素贝叶斯,EM,k-means
分块 nltk.chunk 正则表达式,n-gram,命名实体
解析 nltk.parse 图标,基于特征,一致性,概率性,依赖项
语义解释  nltk.sem,nltk.inference λ演算,一阶逻辑,模型检验
指标评测  nltk.metrics 精度,召回率,协议系数
概率与估计 nltk.probability 频率分布,平滑概率分布
应用 nltk.app,nltk.chat 图形化的关键词排序,分析器,WordNet查看器,聊天机器人
语言学领域的工作 nltk.toolbox  处理SIL工具箱格式的数据
# NLTK入门
import nltk
nltk.download()
# 选择all,下载所有的资料

from nltk.book import *

## 1.1 搜索文本
text1.concordance("monstrous")
text1.similar("monstrous")  # 搜索相似词
text2.common_contexts(["monstrous","very"])  # 两个或两个以上的词共同的上下文
text4.dispersion_plot(["citizens", "democracy", "freedom", "duties", "America"])  # 获取词汇分布图
len(text3)  # text3的词汇数
sorted(set(text3))  # text3去重后排序输出
len(set(text3))  #text3不重复的词汇数
text3.count("smote") # 统计某个词出现的次数
100*text4.count('a')/len(text4)  # 计算一个特定词在文本中占据的百分比

def lexical_diversity(text):
    return len(text)/len(set(text))

def percentage(count,total):
    return 100*count/total

## 1.2 将文本当做词列表
sent1
text4.index('awaken')

## 1.3 简单的统计
fdist1 = FreqDist(text1)
vocabulary1 = list(fdist1.keys())  # 得到频数的key值
vocabulary1[:50]
fdist1['whom']  # 得到某个单词出现的频数
fdist1.plot(50, cumulative=True)  # 画出前50个词出现的频数图
fdist1.hapaxes()  # 获取文本中出现一次的词(低频词)

## 1.4 细粒度的选择词
"文本中的长词,即词汇表长度超过15个字符的词。"
V = set(text1)  # 获取text4中不重复的词
long_words = [w for w in V if len(w) > 15]  # 获取单词长度大于15个字母的词语
sorted(long_words)  # 顺序输出这些单词

fdist5 = FreqDist(text5)  # 获取text5的词频分布
sorted([w for w in set(text5) if len(w) > 7 and fdist5[w] > 7])  # 顺序输出单词长度大于7且出现次数大于7的单词


## 1.5 词语搭配和双连词(bigrams)
from nltk.util import bigrams  # 使用bigrams获取句子中双联词的搭配
list(bigrams(['more', 'is', 'said', 'than', 'done']))
text4.collocations()  # 使用collocations()函数找出常用的双联词

fdist = FreqDist([len(w) for w in text1])  # 计算不同长度的单词出现的频率分布
fdist.items()
fdist.max()
fdist.freq(3)  # 打印出3出现的频率

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

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

一些词比较运算符:

s.startswith(t) :测试 s是否以t开头
s.endswith(t): 测试 s是否以t结尾
tin s :测试 s是否包含t
s.islower() :测试 s中所有字符是否都是小写字母
s.isupper() :测试 s中所有字符是否都是大写字母
s.isalpha(): 测试 s中所有字符是否都是字母
s.isalnum() :测试 s中所有字符是否都是字母或数字
s.isdigit() :测试 s中所有字符是否都是数字
s.istitle() :测试 s是否首字母大写( s中所有的词都首字母大写)

 

 

你可能感兴趣的:(自然语言处理,python,自然语言处理,python)