You need to enable JavaScript to run this app. 解析语料提取词形时 嵌套循环内报list index out of range错误
优惠活动
大模型
产品
解决方案
定价
更多

解析语料提取词形时 嵌套循环内报list index out of range错误

索引越界问题根因

list index out of range 报错的核心原因是:当遍历到完全空白的行(无任何有效字符,或整行只有空格/换行)时,line.split() 方法会返回长度为0的空列表,此时访问列表第0个元素就会触发越界。
这类空白行的来源通常是VRT文件的结构本身:<s>标签前后、块内容首尾的换行符会被BeautifulSoup的get_text()方法一并提取,拆分行时就会生成无实际词条的空行。在循环外部手动测试时因为选取的都是有实际内容的样本行,不会碰到空列表的情况,所以不会触发报错。

解决方案
  • 遍历每行时增加空列表判断,直接跳过无有效内容的行
  • 优化文件读取逻辑,使用with上下文管理器避免文件句柄泄漏,指定编码兼容不同系统的文件格式
  • 匹配VRT的制表符分隔规则拆分字段,避免按任意空白拆分导致的词形被误切的问题

修正后可直接运行的代码

from bs4 import BeautifulSoup

# 读取VRT源文件
with open('MeinWikiKorpus.vrt', 'r', encoding='utf-8') as source_f:
    soup = BeautifulSoup(source_f.read(), 'html.parser')

# 提取所有句子块的纯文本
sentence_blocks = [block.get_text() for block in soup.find_all('s')]

# 输出提取到的所有词形
with open('extracted_wordforms.txt', 'w', encoding='utf-8') as output_f:
    for block in sentence_blocks:
        for line in block.splitlines():
            # 先去除行首尾的空白,再按制表符拆分列
            columns = line.strip().split('\t')
            # 跳过空行
            if not columns or not columns[0].strip():
                continue
            output_f.write(f"{columns[0].strip()}\n")

补充说明:如果你的VRT语料存在换行缩进、标签属性换行的情况,上述拆分逻辑会自动过滤掉无有效内容的行,不会再触发索引越界报错;如果后续需要保留词性标注信息,只需要从拆分后的columns列表中取对应索引的字段即可。

内容的提问来源于stack exchange,提问作者Emanuel K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 04:45:00