(转)影评情感分析中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')加载英文的划分句子的模型
- 自己写的英文文本,没有出结果,因为在句子结束没有留空格,这是中英文书写习惯造成的
- tokenizers/punkt/ 这里面有好多训练好的模型,只能划分成句子,不能划分成单词
题外话:
老外写文字,单词之间都留空格,split()函数默认是空格,python是他们自己设计的,都是方便了他们。