nltk - 是否可以加速 Wordnet Lemmatizer?

标签 nltk wordnet lemmatization

我在 Brown Corpus 上通过 NLTK 使用 Wordnet Lemmatizer(以确定其中的名词是以单数形式还是复数形式更多地使用)。
from nltk.stem.wordnet import WordNetLemmatizerl = WordnetLemmatizer()
我注意到即使是最简单的查询(例如下面的查询)也需要很长时间(至少一两秒钟)。l("cats")
大概这是因为每个查询都必须与 Wordnet 建立网络连接?..
我想知道是否有办法仍然使用 Wordnet Lemmatizer 但它的执行速度要快得多?例如,将 Wordnet 下载到我的机器上对我有帮助吗?
或者有什么其他建议?

我试图弄清楚是否可以更快地制作 Wordnet Lemmatizer,而不是尝试不同的 lemmatizer,因为我发现它在像 Porter 和 Lancaster 这样的其他人中效果最好。

最佳答案

它不查询互联网,NLTK 从您的本地机器读取 WordNet。当您运行第一个查询时,NLTK 将 WordNet 从磁盘加载到内存中:

>>> from time import time
>>> t=time(); lemmatize('dogs'); print time()-t, 'seconds'
u'dog'
3.38199806213 seconds
>>> t=time(); lemmatize('cats'); print time()-t, 'seconds'
u'cat'
0.000236034393311 seconds

如果您必须对数千个短语进行词形还原,则速度会相当慢。但是,如果您正在执行大量冗余查询,则可以通过缓存函数的结果来获得一些加速:
from nltk.stem import WordNetLemmatizer
from functools32 import lru_cache
wnl = WordNetLemmatizer()
lemmatize = lru_cache(maxsize=50000)(wnl.lemmatize)

lemmatize('dogs')

关于nltk - 是否可以加速 Wordnet Lemmatizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181419/

相关文章:

python - 标记与单词相邻的表情符号

java - java ws4j 库的文档

python - 如何使用 pywsd.utils 对 .txt 文件而不是句子进行词形还原?

python - 如何使用 nltk 去除 ptb 解析树中的 -NONE- 和 *T*-i?

nlp - 使用 NLP 进行句子压缩

python - 获取 Lambda 演算表达式中的谓词

installation - 在 ubuntu 上安装 Wordnet-3.0 时出错 : Can't find Tcl configuration definitions

java - 词网关系

python - spaCy NLP 管道操作顺序

perl - 如何找到基本的、未变形的词进行搜索?