cat writebug.cn/history

一个开发者的技术博客。

python3 nltk chapter 2

获得文本语料和词汇资源

1.获取文本语料库

1.1 古腾堡语料库
import nltk
nltk.corpus.gutenberg.fileids()

nltk.corpus.gutenberg.words('austen-emma.txt')

emma = nltk.Text(nltk.corpus.gutenberg.words('austen-emma.txt'))
emma.concordance("surprize")

nltk.corpus.gutenberg.raw('austen-emma.txt')
nltk.corpus.gutenberg.cents('austen-emma.txt')
1.2 网络和聊天文本
from nltk.corpus import webtext
webtext.fileids()

from nltk.corpus import nps_chat
nps_chat.postsi('10-19-20s_706posts.xml')
1.3 布朗语料库
from nltk.corpus import brown
brown.categories()
brown.words(categories='news')
brown.words(fileids=['cg22'])
brown.sents(categories=['news', 'editorial', 'reviews'])
1.4 路透社语料库
from nltk.corpus import reuters
reuters.fileids()
reuters.categories()
reuters.categories('training/9865')
reuters.categories(['training/9865', 'training/9880'])
reuters.fileids('barley')
reuters.fileids(['barley', 'corn'])
1.5 就职演说语料库
from nltk.corpus import inaugural
inaugural.fileids()
1.6 标注文本语料库

http://nltk.org/data http://nltk.org/howto

1.7 其他语言的语料库

nltk.corpus.udhr # 超过300种语言的世界人权宣言

1.8 文本语料库的结构
NLTK 中定义的基本语料库函数, 使用help(nltk.corpus.reader)可以找到更多的文档
示例                       描述                          
fileids()                  语料库中的文件                
fileids([categories])      这些分类对应的语料库中的文件  
categories()               语料库中的分类                
categories([fileids])      这些文件对应的语料库中的分类  
raw()                      语料库的原始内容              
raw(fileids=[f1,f2,f3])    指定文件的原始内容            
raw(categories=[c1,c2])    指定分类的原始内容            
words()                    整个语料库中的词汇            
words(fileids=[f1,f2,f3])  指定文件中的词汇              
words(categories=[c1,c2])  指定分类中的词汇              
sents()                    整个语料库中的句子            
sents(fileids=[f1,f2,f3])  指定文件中的句子              
sents(categories=[c1,c2])  指定分类中的句子              
abspath(fileid)            指定文件在磁盘上的位置        
encoding(fileid)           文件的编码如果知道的话    
open(fileid)               打开指定语料库文件的文件流    
root                       本地安装的语料库根目录的路径  
readme()                   语料库的README文件的内容
1.9 加载你自己的语料库
from nltk.corpus import PlaintextCorpusReader
corpus_root = '/usr/share/dict' [1]
wordlists = PlaintextCorpusReader(corpus_root, '.*') [2]
wordlists.fileids()
from nltk.corpus import BracketParseCorpusReader
corpus_root = r"C:\corpora\penntreebank\parsed\mrg\wsj" [1]
file_pattern = r".*/wsj_.*\.mrg" [2]
ptb = BracketParseCorpusReader(corpus_root, file_pattern)
ptb.fileids()

2 条件频率分布

2.1 条件和事件
2.2 按文体计数词汇
from nltk.corpus import brown
cfd = nltk.ConditionalFreqDist(
          (genre, word)
          for genre in brown.categories()
          for word in brown.words(categories=genre))

cfd  # <ConditionalFreqDist with 2 conditions>
cfd.conditions()  # ['news', 'romance']

print(cfd['news'])
# <FreqDist with 14394 samples and 100554 outcomes>

print(cfd['romance'])
<FreqDist with 8452 samples and 70022 outcomes>

cfd['romance'].most_common(20)

cfd['romance']['could']
# 193
2.3 绘制分布图和分布表
cfd.tabulate(conditions=['English', 'German_Deutsch'],
             samples=range(10), cumulative=True)

cfd.plot(conditions=['English', 'German_Deutsch'],
         samples=range(10), cumulative=True)
2.4 使用双连词生成随机文本

条件频率分布是一个对许多NLP 任务都有用的数据结构。2.1总结了它们常用的方法。

示例                                 描述
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中出现次数

3 更多关于Python:代码重用

4 词汇资源