这个系列的博客是基于《Python自然语言处理》这本书的学习笔记.

关于整本书的内容中,Python部分和有关机器学习部分的内容我会酌情略过,
(以后有机会整理Python和机器学习相关知识的话再补上引用连接)

关于代码会完整的整理到我的github代码仓库中,并且会做一定的修改以方便复用或展示
所有代码已修改为python3版本,代码运行结果和书中的相关示例结果有可能会不一致,多为训练的随机性造成

在最前面会陆续整理出学习过程中发现的错误,如果有朋友发现任何其他错误或问题欢迎留言告知,谢谢

Python自然语言处理勘误笔记

FreqDist对象的inc方法报错

1
2
3
4
5
6
7
8
9
10
11
from nltk.corpus import brown
import nltk

suffix_fdist = nltk.FreqDist()

# 找出最常见的后缀
for word in brown.words():
word = word.lower()
suffix_fdist.inc(word[-1:])
suffix_fdist.inc(word[-2:])
suffix_fdist.inc(word[-3:])

错误信息为:
AttributeError: 'FreqDist' object has no attribute 'inc'

可以修改为:
suffix_fdist[word[-1:]] += 1

FreqDist对象通常像这样使用:
fd = FreqDist(my_text)

对字典的keys()进行切片保存

1
2
3
4
5
from nltk.corpus import movie_reviews
import nltk

all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
word_feature = list(all_words.keys())[:2000]

错误信息为:
TypeError: 'dict_keys' object is not subscriptable

这是因为字典的keys对象不支持切片,转换成list即可

可以修改为: word_feature = list(all_words.keys())[:2000]

方法不存在

  1. nltk.sem.show_raw_rtuple(rel)
    修改为
    nltk.sem.relextract.rtuple(rel)
  2. nltk.sem.show_clause(r, relsym="VAN")
    修改为
    nltk.sem.relextract.clause(r, relsym="VAN")

    未解决问题汇总

  3. 继承nltk.ChunkParserI的类有波浪线提示,应该是超类中有为实现的方法
    Class BigramChunker must implement all abstract methods
  4. P296 使用连续分类器对名词短语分块(需要安装oCaml 和 maxnet,安装尚未解决)
    NLTK was unable to find the megam file!
  5. P302 递归遍历树状图报错
    TypeError: Tree: Expected a node value and child list
    NotImplementedError: Use label() to access a node label.

最后更新: 2019年05月09日 17:26

原始链接: https://ice-melt.github.io/2019/05/06/Python_NLP_00/

× 您的支持是我原创的动力
打赏二维码