这是我第一个问题。
我正试图从文本语料库中提取单词形式,并将它们写入文本文件。
语料库如下所示:
<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>
...
- 句子使用标记& lt; s>……& lt;/s> 单词
- 一个句子的换行符 每个<<li> strong>行具有字形式(以及一些tab分隔的注释,例如,词性标记)
我的方法我的方法是:
- 创建列表所有没有xml标记的句子
- 拆分每个句子在'n'
- 拆分行
写入第一个元素在那个"行列表"中转换成。txt文件
然而,当试图访问循环中的第一个元素时,我得到一个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()
这里发生了一些事情。
- 有些行是空白的,所以
.split()
找到零元素。 - 我们反复赋值给lElements——它将在循环完成后保留最终值。
- 最后一行非空。
在取消引用第0个元素之前你需要和警卫确认一下。
:if len(lElements) > 0:
简洁:
if lElements:
print(lElements[0])