如何使用Python读取包含阿拉伯语、英语的txt格式标注数据集
问题原因
你当前报错的核心原因是trans.arff.txt是ARFF(Weka属性关系文件)格式,并非标准CSV结构,文件头部带有@attribute、@data等元数据定义行,直接用pd.read_csv解析会因为格式不匹配报错。
可行解决方案
方案1:用专用ARFF解析工具读取(推荐,适配性高)
使用scipy内置的ARFF解析模块直接读取,不需要手动处理格式:
from scipy.io import arff import pandas as pd import numpy as np # 读取ARFF文件及元信息 data, meta = arff.loadarff('trans.arff.txt', encoding='utf-8') df = pd.DataFrame(data) # 处理ARFF默认返回的bytes类型字符串,转成普通字符串 df = df.apply(lambda col: col.str.decode('utf-8') if col.dtype == object else col) # 按列拆分,假设第一列为阿拉伯语句子,第二列为英文标签 # 可以先打印meta.names查看实际列名调整索引 arabic_sentences = df.iloc[:, 0].tolist() en_labels = df.iloc[:, 1].values
方案2:手动过滤头部元数据读取(无需额外依赖)
ARFF格式的有效数据全部在@data标记行之后,可手动过滤头部后拆分:
import numpy as np arabic_sentences = [] en_labels = [] with open('trans.arff.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 定位数据段起始位置 data_start = 0 for idx, line in enumerate(lines): if line.strip().lower() == '@data': data_start = idx + 1 break # 遍历解析数据行 for line in lines[data_start:]: line = line.strip() if not line: continue # 按实际分隔符调整,常见为逗号、制表符 parts = line.split(',') arabic_sentences.append(parts[0].strip()) en_labels.append(parts[1].strip()) # 标签转numpy数组 en_labels = np.array(en_labels)
注意事项
- 如果出现编码报错,可尝试将
encoding参数替换为utf-8-sig适配带BOM头的文件 - 拆分数据行前可以先打印几行原始数据,确认实际分隔符后调整
split参数
内容的提问来源于stack exchange,提问作者Eng.sh
相关产品推荐
相关产品推荐

