nltk.data.load('tokenizers/punkt/english.pickle')详解

对于初学者,在kaggle上做电影评论情感文本分析的时候,会碰到这么一句nltk.data.load('tokenizers/punkt/english.pickle')

想看最后结果的,直接拉到页面最后。。。

从整个的函数,可以隐约感觉到,是对一段文本进行分句,分成各个句子组成的列表。

我们先看个例子:

import nltk.data
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
data = 'Sadly, more downs than ups.The plot was pretty decent.'
for row in tokenizer.tokenize(data):
    print(row)

运行出的结果:

Sadly, more downs than ups.The plot was pretty decent.

这还是一段文本,说好的分成句子呢?

几经折磨,终于知道是为什么了。

再看一下:

import nltk.data
tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')
data = 'Sadly, more downs than ups. The plot was pretty decent.'
for row in tokenizer.tokenize(data):
    print(row)

结果:

Sadly, more downs than ups.
The plot was pretty decent.

这又出现了正常的结果,瞪大眼睛,仔细瞧,终于发现,在句子结束后的‘.’之后要留空格。

也就是说句子结束的标点!. ?,在写下一句的时候,老外都留了一个空格,这是划分句子的一个依据。

nltk.data里面封装了好多训练好的模型,tokenizer = nltk.data.load('tokenizers/punkt/english.pickle')

这个是英文的模型。按照加载模型的路径,我找了其他的训练好的模型,如下图:

nltk.data.load('tokenizers/punkt/english.pickle')详解_第1张图片

可以看到,里面有法国,德国,西班牙等训练好的模型。

然而没有中国的。。。

总结:

  1. nltk.data.load('tokenizers/punkt/english.pickle')加载英文的划分句子的模型
  2. 自己写的英文文本,没有出结果,因为在句子结束没有留空格,这是中英文书写习惯造成的
  3. tokenizers/punkt/ 这里面有好多训练好的模型,只能划分成句子,不能划分成单词

题外话:

老外写文字,单词之间都留空格,split()函数默认是空格,python是他们自己设计的,都是方便了他们。





你可能感兴趣的:(nltk,nltk.data.load,nltk,nlp)