如何在Python中将NLTK路透社语料库转为字符串生成N-Gram?
解决NLTK路透社语料库生成N-Gram耗时问题
你之前用本地小文本测试N-Gram的代码逻辑可行,但切换到路透社语料库时,直接调用reuters.words()生成unigram耗时过长,核心原因是reuters.words()返回的是懒加载的迭代器对象,而非可快速处理的序列或字符串。下面是将其转为字符串变量并生成N-Gram的具体方法:
步骤1:将路透社语料库转为字符串
通过join()方法把语料库的所有词汇拼接成完整字符串,词汇间用空格分隔:
import nltk from nltk.corpus import reuters # 首次运行需下载路透社语料库 nltk.download('reuters') # 将语料库所有词拼接为字符串 corpus_str = ' '.join(reuters.words())
步骤2:基于字符串生成N-Gram
使用NLTK的ngrams工具,先把字符串拆分为词汇列表,再生成指定长度的N-Gram:
from nltk.util import ngrams # 生成unigram unigrams = list(ngrams(corpus_str.split(), 1)) # 生成bigram示例 bigrams = list(ngrams(corpus_str.split(), 2)) # 生成trigram示例 trigrams = list(ngrams(corpus_str.split(), 3))
补充优化方案
如果不需要严格转为字符串,直接将reuters.words()转为列表再生成N-Gram会更高效(省去字符串拼接与拆分的额外开销):
corpus_words = list(reuters.words()) unigrams = list(ngrams(corpus_words, 1))
内容的提问来源于stack exchange,提问作者Swapnil
相关产品推荐
相关产品推荐

