Google Colab环境加载NLTK comtrans模块触发LookupError问题求助
NLTK Comtrans 语料Colab加载失败解决方案
根因说明
Colab环境的NLTK默认语料索引未覆盖comtrans这类小众对齐语料的路径,即便下载成功也无法通过nltk.corpus.comtrans直接调用,和语料本身、下载过程无关,stopwords属于基础语料所以不受影响。
方案一:原生NLTK接口加载(无需上传文件)
直接手动调用NLTK内置的ComtransCorpusReader指定下载路径加载即可,用法和原接口完全一致:
import nltk from nltk.corpus.reader import ComtransCorpusReader # 强制重新下载确保文件完整 nltk.download('comtrans', force=True) # Colab环境下comtrans默认下载路径 corpus_path = "/root/nltk_data/corpora/comtrans/" comtrans_reader = ComtransCorpusReader(corpus_path, r"alignment-en-fr\.txt") # 调用方式和原接口完全相同 data = comtrans_reader.aligned_sents() print(data[0]) print(len(data))
如果运行提示路径不存在,可先执行单元格命令!ls /root/nltk_data/corpora/确认comtrans目录是否存在。
方案二:本地上传文件自定义解析
如果上述方案失效,可将本地正常使用的alignment-en-fr.txt上传到Colab,通过以下代码解析为标准AlignedSent对象:
from nltk.translate import AlignedSent def parse_comtrans_file(file_path: str) -> list[AlignedSent]: res = [] with open(file_path, "r", encoding="utf-8") as f: for line in f: line = line.strip() if not line: continue # comtrans文件每行格式:英文文本 ||| 法文文本 ||| 对齐索引 en_text, fr_text, align_str = line.split(" ||| ") en_words = en_text.split() fr_words = fr_text.split() # 解析对齐索引为元组列表 alignment = [tuple(map(int, pair.split("-"))) for pair in align_str.split()] res.append(AlignedSent(en_words, fr_words, alignment)) return res # 替换为你上传的文件实际路径 data = parse_comtrans_file("./alignment-en-fr.txt") print(data[0]) print(len(data))
内容的提问来源于stack exchange,提问作者Eric H
相关产品推荐
相关产品推荐

