You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:12:42