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

如何用Dask将带URL的双换行分隔TXT读为两列DataFrame

Dask读取纽约时报TXT文本构建双列DataFrame的适配方案

原有读取逻辑的问题定位

  • 之前使用的dd.read_csv(filename,sep="\n\n",header=None,engine='python')代码无法生效的核心原因:文件结构中,单篇文章内部URL与正文的空行分隔、不同文章之间的空行分隔使用了完全相同的\n\n换行规则。直接把\n\n当成分隔符时,会把单篇文章拆成两个独立的文本块,完全无法建立URL和对应正文的绑定关系,最终只会得到无结构的单列文本,甚至会把正文内的单换行段落识别为独立行。

可直接落地的实现步骤

  • 第一步:按文章的URL起始标记拆分独立文本块
    绕开read_csv的固定分隔逻辑,用Dask的文本读取接口,以每行开头的URL:标记为拆分边界,确保每一个文本块完整包含某篇文章的URL链接和对应全部正文内容,不会被中间的空行拆散。
    参考代码:

    import dask.dataframe as dd
    import re
    
    # 加载原始文本并按URL起始标记拆分独立文章块
    raw_ddf = dd.read_text(
        file_path,
        include_path=False,
        blocksize="100MB" # 大文件场景下设置分块大小,利用Dask并行能力
    )
    # 用正向前瞻正则,在每个URL行之前做切分,保证块内结构完整
    article_blocks = raw_ddf.str.cat(sep="\n").str.split(r'(?=^URL:)', flags=re.M).explode().str.strip()
    
  • 第二步:对每个文章块拆分出URL、正文两列
    利用块内的固定结构(URL行开头、后续紧跟空行、之后是带单换行段落的正文),通过正则捕获分别提取两个字段,过程中保留正文内部的单换行格式,不做额外拆分:

    # 提取URL字段:匹配“URL:”前缀后的链接内容
    url_col = article_blocks.str.extract(
        r'^URL:\s*(.*?)\n', 
        flags=re.M
    )[0].rename("article_url")
    
    # 提取正文字段:跳过URL行和紧跟的空行,保留后续所有正文内容
    content_col = article_blocks.str.extract(
        r'^URL:.*?\n\s*\n(.*)', 
        flags=re.M | re.S # 支持换行匹配,保留正文段落格式
    )[0].str.strip().rename("article_content")
    
    # 合并为目标双列DataFrame,清理空块
    final_ddf = dd.concat([url_col, content_col], axis=1).dropna(how="all")
    

关键注意事项

  • 不要用read_csv的固定换行分隔做拆分,两层相同的分隔符规则会直接破坏单篇文章的块结构
  • 提取正文时必须配合re.S正则标记,确保换行符可以被正则匹配,避免只提取到第一段正文
  • 单换行分隔的正文段落属于同一条记录的内容,不要在提取过程中做拆分,否则会出现行错位

内容的提问来源于stack exchange,提问作者yacine Acheroufkebir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:45:01