对多语言推特数据集仅处理德语内容时出现KeyError: 'lang'问题
解决KeyError: 'lang'问题
错误原因
KeyError: 'lang' 说明你的DataFrame test 中不存在名为lang的列,或者列名拼写有偏差(比如大小写、额外空格、别名如language/lang_code等)。
分步解决方案
1. 先确认DataFrame的列名
运行以下代码查看所有列名,找到存储语言标识的正确列名:
print(test.columns.tolist())
如果输出中有类似language、Lang、language_code的列,把代码里的s['lang']替换成对应的列名即可。
2. 如果没有语言标识列,先添加语言检测
如果数据集本身没有标注语言,用langdetect库自动检测:
- 先安装依赖:
pip install langdetect
- 添加语言检测代码:
from langdetect import detect def detect_lang(text): try: return detect(text) # 返回语言代码(如德语返回'de') except: return None # 处理无法检测的文本 # 生成lang列 test['lang'] = test['text'].apply(detect_lang)
完成后再运行原预处理代码即可。
原代码的额外小问题修正
原preprocess函数存在几处语法/正则错误,修正后的版本:
def preprocess(sentence): sentence = str(sentence) sentence = sentence.lower() sentence = sentence.replace('{html}', '') # 移除HTML标签 cleanr = re.compile('<.*?>') cleantext = re.sub(cleanr, '', sentence) # 移除URL(支持http/https) rem_url = re.sub(r'https?://\S+', '', cleantext) # 移除数字 rem_num = re.sub('[0-9]+', '', rem_url) # 分词(修正正则转义) tokenizer = RegexpTokenizer(r'\w+') tokens = tokenizer.tokenize(rem_num) # 过滤停用词和短词 filtered_words = [w for w in tokens if len(w) > 2 and w not in stopwords.words('german')] return " ".join(filtered_words)
内容的提问来源于stack exchange,提问作者Daniel AG
相关产品推荐
相关产品推荐

