"list index out of range" 嵌套循环结构内有错误,但外部没有

"list index out of range" error within nested loop structure but not outside of it

这是我在这里的第一个问题。

我试图从文本语料库中仅提取单词形式并将它们写入文本文件。

语料库 看起来像这样:

<corpus>
<text id="t0">
<s>
Computerlinguistik  NN  NOUN    Computerlinguistik
</s>
<s>
In  APPR    ADP In
der ART DET der
Computerlinguistik  NN  NOUN    Computerlinguistik
    _SP SPACE     
oder    KON CCONJ   oder
linguistischen  ADJA    ADJ linguistischen
Datenverarbeitung   NN  NOUN    Datenverarbeitung
...
</s>
...

所以

  1. 一个句子标有...
  2. 一个句子的 个单词 被分成换行符
  3. 每个都有单词形式(和一些制表符分隔的注释,例如词性标记)

我的做法

我的方法是:

  1. Making a list with all the sentences without xml tags
  2. Split each sentence of that list at '\n'
  3. Split each line at any whit space character
  4. Write the first element of that "line list" into a .txt file

问题

但是,我在尝试访问循环中的第一个元素时遇到 list index out of range 错误:

# getting the xml-like content:
soupWiki = BeautifulSoup(open('MeinWikiKorpus.vrt'))

# getting a list of all sentences (< s >...< /s >) without xml tags:
wikiSentences = [sentence.get_text() for sentence in soupWiki.find_all('s')]

for s in wikiSentences:
    # splitting each sentence by '\n'
    for line in (s.splitlines()):
        # splitting each line into it's elements (word form, POS-Tag, ...)
        lElements = line.split()
        print(lElements[0])

但是,当我尝试访问所有循环之外的第一个元素时,它起作用了。

我确定这只是一个愚蠢的错误,通过写这个问题我可能已经想通了,但我是如何被困在这里的。

提前致谢!

您正在执行:

        lElements = line.split()

这里发生了一些事情。

  1. 有些行是空白的,因此 .split() 找到零个元素。
  2. 我们反复赋值给 lElements -- 循环完成后它会保留最终值。
  3. 最后一行非空。

取消引用第 0 个元素之前 你会想和警卫核实一下。

详细地说:if len(lElements) > 0:

简明扼要:

        if lElements:
            print(lElements[0])