今天上来的第一个坑出现在使用nltk的tokensize,终端报出了如下错误
LookupError:
**********************************************************************
Resource ?[93mpunkt?[0m not found.
Please use the NLTK Downloader to obtain the resource:
?[31m>>> import nltk
>>> nltk.download('punkt')
?[0m
Searched in:
- 'C:\\Users\\Admin/nltk_data'
- 'C:\\nltk_data'
- 'D:\\nltk_data'
- 'E:\\nltk_data'
- 'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python35\\nltk_data'
- 'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python35\\share\\nltk_data'
- 'C:\\Users\\Admin\\AppData\\Local\\Programs\\Python\\Python35\\lib\\nltk_data'
- 'C:\\Users\\Admin\\AppData\\Roaming\\nltk_data'
- ''
**********************************************************************
直接按照指令
import nltk
nltk.download('punkt')
进行下载操作,然后就搞定了。如果出现连接时间过长,可以直接访问网页:https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/tokenizers/punkt.zip
然后使用迅雷或其他下载工具进行下载,然后将文件保存于
C:\Users\你的用户名\AppData\Roaming\nltk_data\tokenizers
并选择解压到punkt\
,关于隐藏文件如何查看等文件夹选项,在这里不再赘述。
发现结果也稍有不同,应该nltk库自己内部更新过了
[' This is an example sent.', 'The sentence splitter will split on sent markers.', 'Ohh really !', '!']
书上的叹号应该是多打了几个……
Snowball这个库变成了小写
from nltk.stem.snowball import SnowballStemmer
在使用wordnet的时候,同样出现了今天遇到的第一个错误,也同样用相同的方法来解决。
仍然放一个URL
https://raw.githubusercontent.com/nltk/nltk_data/gh-pages/packages/corpora/wordnet.zip
如果直接按照书上24-25页的代码,我们发现结果仍然是ate
,个人认为这同样也是因为库的更新,在lemmatize中多了另外一个argument:pos
,用来衡量喂进去的单词是动词名词等,参考网页:https://stackoverflow.com/questions/25534214/nltk-wordnet-lemmatizer-shouldnt-it-lemmatize-all-inflections-of-a-word
所以我们把pos设为动词,如下代码,就可以得到eat
了
wlem = WordNetLemmatizer()
print(wlem.lemmatize('ate', pos='v'))
同样因为库的更新,停用词移除的结果也发生了改变,如下
['This', 'test']
不过调整开头字母大小写之后,结果变成了只有['test']
一些开放性的答案挺令人仔细琢磨的:
在完成停用词一处之后,我们还可以执行其他NLP操作吗?
答案是否定的,这是不可能的。所有典型的NLP应用,如词性标注、断句处理等,都需要根据上下文语境来为既定文本生成相关的标签。一单我们移除了停用词,其上下文环境也就不存在了。
为什么在印度语、中文这样的语言中,词干提取器会变得难以实现?
因为印度语的词法很丰富,而中文则是标识化的难度很高,它们都在符号的标准化上遇到了一定的挑战,因此词干提取器实现起来要困难得多。