如何从SemEval 2017文本文件中读取标签列与文本列?
解决方案:从特殊格式文件中提取标签和文本
这个文件的问题在于文本部分包含空格甚至引号,直接用read_csv指定普通分隔符会把文本拆成多列,导致读取失败。根据你提供的示例,每行的结构是ID + 空格 + 标签(positive/neutral/negative) + 空格 + 文本内容,我们可以用两种方式正确拆分:
方法1:原生文件读取 + 正则表达式(最稳妥)
正则能精准匹配每行的结构,不管文本里有多少特殊字符都能正确捕获标签和文本:
import re import pandas as pd label_text_list = [] # 正则匹配:数字ID、标签、剩余所有内容作为文本 line_pattern = re.compile(r'^(\d+)\s+(positive|neutral|negative)\s+(.*)$', re.MULTILINE) with open('你的文件名.txt', 'r', encoding='utf-8') as file: full_content = file.read() # 批量匹配所有行的内容 all_matches = line_pattern.findall(full_content) for match in all_matches: _, label, text = match # 如果文本首尾有引号,去掉(可选,根据实际情况调整) clean_text = text.strip('"') label_text_list.append({"label": label, "text": clean_text}) # 转成DataFrame方便后续预处理 df = pd.DataFrame(label_text_list)
方法2:用Pandas配合正则分隔符(更简洁)
利用Pandas的read_csv支持正则分隔符的特性,避开文本内部的空格:
import pandas as pd # 正则分隔符:匹配空格,但确保不在引号内部(处理带引号的文本) df = pd.read_csv( '你的文件名.txt', sep=r'\s+(?=(?:[^"]*"[^"]*")*[^"]*$)', # 关键:只匹配引号外的空格 header=None, names=['id', 'label', 'text'] ) # 可选:去掉文本首尾的引号 df['text'] = df['text'].str.strip('"')
两种方法都能处理你提供的示例内容,比如第二行带引号的文本会被完整提取为一列,不会被拆分。之后你就可以像之前一样遍历DataFrame,调用preprocess_text处理文本了。
内容的提问来源于stack exchange,提问作者Tripti Agrawal
相关产品推荐
相关产品推荐

