专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
51好读  ›  专栏  ›  Python开发者

Python 自然语言处理入门

Python开发者  · 公众号  · Python  · 2017-05-01 20:13

正文

请到「今天看啥」查看全文


nltk . corpus import gutenberg

>>> from nltk import FreqDist

# 作图需要 matplotlib(可以从 NLTK 下载页获得)

>>> import matplotlib

>>> import matplotlib . pyplot as plt

# 统计 Gutenberg 中每个词例数量

>>> fd = FreqDist ()

>>> for text in gutenberg . fileids () :

... for word in gutenberg . words ( text ) :

... fd . inc ( word )

# 初始化两个空列表来存放词序和词频

>>> ranks = []

>>> freqs = []

# 生成每个词例的(词序,词频)点并且将其添加到相应列表中,

# 注意循环中的 fd 会自动排序

>>> for rank , word in enumerate ( fd ) :

... ranks . append ( rank + 1 )

... freqs . append ( fd [ word ])

...

# 在 log-log 图中展示词序和词频的关系

>>> plt . loglog ( ranks , freqs )

>>> plt . xlabel ( frequency ( f ) , fontsize = 14 , fontweight = bold )

>>> plt . ylabel ( rank ( r ) , fontsize = 14 , fontweight = bold )

>>> plt . grid ( True )

>>> plt . show ()



图 1: 齐普夫定律在古登堡语料库中适用吗?


3.4 任务 2:预测单词


现在我们已经探索过语料库了,让我们定义一个任务,能够用上之前探索的结果。


任务:训练和创建一个单词预测器,例如:给定一个训练过语料库,写一个能够预测给定单词的一下个单词的程序。使用这个预测器随机生成一个 20 个词的句子。


要创建单词预测器,我们首先要在训练过的语料库中计算两个词的顺序分布,例如,我们需要累加给定单词接下来这个单词的出现次数。一旦我们计算出了分布,我们就可以通过输入一个单词,得到它在语料库中所有可能出现的下一个单词列表,并且可以从列表中随机输出一个单词。为了随机生成一个 20 个单词的句子,我只需要给定一个初始单词,利用预测器来预测下一个单词,然后重复操作指导直到句子满 20 个词。清单 2 描述了怎么利用 NLTK 提供的模块来简单实现。我们利用简奥斯丁的 Persuasion 作为训练语料库。


清单 2:利用 NLTK 预测单词


>>> from nltk . corpus import gutenberg

>>> from nltk import ConditionalFreqDist

>>> from random import choice

# 分布实例化

>>> cfd = ConditionalFreqDist ()

# 对于每个实例,统计给定词的下一个词数量

>>> prev_word = None

>>> for word in gutenberg . words ( austen - persuasion . txt ) :

... cfd [ prev_word ]. inc (







请到「今天看啥」查看全文