You need to enable JavaScript to run this app. 处理乌尔都语文本时触发TypeError: expected string or bytes-like object报错求解
优惠活动
大模型
产品
解决方案
定价
更多

处理乌尔都语文本时触发TypeError: expected string or bytes-like object报错求解

问题解决方法

报错原因

你遇到的TypeError: expected string or bytes-like object错误不是乌尔都语本身导致的,核心诱因有两点:

  1. Excel的Text列存在空值(NaN)、数字等非字符串类型的单元格内容,直接传入nltk.word_tokenize触发类型校验报错
  2. NLTK默认的word_tokenize是为拉丁字母语言设计的,既不能正确拆分乌尔都语词汇,也对阿拉伯系字母的兼容性不好

适配后的完整代码

方案1:仅解决报错,保留原有代码逻辑(分词结果不符合乌尔都语规则)

import collections
import pandas as pd
import nltk

counter = collections.Counter()
maxlen = 0
c=0
df=pd.read_excel(INPUT_FILE)
df.columns=['Text','label']
# 新增预处理:空值替换为空字符串,强制转字符串类型
df['Text'] = df['Text'].fillna('').astype(str)

for index, row in df.iterrows():
    # 去掉了无用的lower(),乌尔都语无大小写区分
    words = [x for x in nltk.word_tokenize(row['Text'])]
    if len(words) > maxlen:
        maxlen = len(words)
        c=c+1
    for word in words:
        counter[word] += 1
print (len(counter))
print (maxlen)

方案2:完整适配乌尔都语,获得正确分词结果

先安装乌尔都语处理依赖:
pip install urduhack
修改后代码:

import collections
import pandas as pd
import urduhack
# 下载乌尔都语处理模型(首次运行执行一次即可)
urduhack.download()
from urduhack.tokenization import word_tokenizer

counter = collections.Counter()
maxlen = 0
c=0
df=pd.read_excel(INPUT_FILE)
df.columns=['Text','label']
df['Text'] = df['Text'].fillna('').astype(str)

for index, row in df.iterrows():
    # 使用乌尔都语专用分词器
    words = word_tokenizer(row['Text'])
    if len(words) > maxlen:
        maxlen = len(words)
        c=c+1
    for word in words:
        counter[word] += 1
print (len(counter))
print (maxlen)

修改说明

  • 新增Text列预处理逻辑,从根源避免非字符串值传入分词函数的报错
  • 移除了无意义的lower()调用,乌尔都语采用阿拉伯字母书写,不存在大小写区分
  • 方案2替换了默认分词器为乌尔都语专用分词工具,分词结果符合乌尔都语的语法规则

内容的提问来源于stack exchange,提问作者Ali Shan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:18:02