调用Keras Tokenizer的fit_on_texts时报'int'无lower属性错误如何解决
Keras Tokenizer处理文本时报错AttributeError: 'int' object has no attribute 'lower'解决方案
报错原因
报错的根本原因是
d['POS_words']列中存在整数(int)类型的元素,并非所有内容都是字符串。Tokenizer默认开启lower=True参数,会自动对输入文本调用lower()方法转小写,而整数类型没有该方法,因此触发报错。
解决步骤
- 第一步:将目标列统一转为字符串类型,再传入Tokenizer处理,修改后的代码如下:
tokenizer=Tokenizer(num_words=1000, split=' ') # 整列转字符串后再输入 tokenizer.fit_on_texts(d['POS_words'].astype(str).values) x = tokenizer.texts_to_sequences(d['POS_words'].astype(str).values)
- 第二步(可选优化):由于你的数据包含
C#、+91这类带特殊符号的内容,Tokenizer默认的filters参数会过滤掉#、+等符号,导致识别异常,可以自定义过滤规则保留需要的符号:
# 去掉默认过滤规则中的#、+符号,保留其他不需要的符号过滤逻辑 custom_filters = '!"$%&()*,-./:;<=>?@[\\]^_`{|}~\t\n' tokenizer=Tokenizer(num_words=1000, split=' ', filters=custom_filters)
- 第三步(可选排查):如果需要确认列中的非字符串内容,可以执行以下代码定位异常值:
for val in d['POS_words'].values: if not isinstance(val, str): print(f"异常值:{val},类型:{type(val)}")
内容的提问来源于stack exchange,提问作者10sha25
相关产品推荐
相关产品推荐

