Python-索引器错误:列表索引超出范围(主题建模)

Python-索引器错误:列表索引超出范围(主题建模),python,lda,topic-modeling,Python,Lda,Topic Modeling,我遇到过很多类似的问题。然而,提供的答案似乎对我没有帮助 我试图对一篇8000年左右的媒体文章进行主题建模分析。但我得到了一个错误: Traceback (most recent call last): File "extract.py", line 23, in <module> if re.compile('^(.*?) - \d{2} [a-zA-Z]{3}. \d{4}$').match(lines[1]): IndexError: list index out

我遇到过很多类似的问题。然而,提供的答案似乎对我没有帮助

我试图对一篇8000年左右的媒体文章进行主题建模分析。但我得到了一个错误:

Traceback (most recent call last):
  File "extract.py", line 23, in <module>
    if re.compile('^(.*?) - \d{2} [a-zA-Z]{3}. \d{4}$').match(lines[1]):
IndexError: list index out of range
有人能帮我忽略这个错误吗

完整代码
#/usr/bin/python
#-*-编码:utf-8-*-
导入操作系统
进口稀土
导入字符串
导入文本摘要
导入Unicode数据
从unidecode导入unidecode
如果不是os.path.isdir('./raw'):
os.mkdir(“./raw”)
名称=打开('./已删除的名称.txt',w')
containsMediaName=open('./包含媒体名称.txt',w')
对于os.listdir(“./data”)中的文件名:
article=unidecode(textract.process('./数据/'+文件名).decode('utf-8'))
第条=关于子条款(“第条”)
lines=article.split(“\n”)
如果重新编译('^(.*?)-\d{2}[a-zA-Z]{3}.\d{4}$')。匹配(行[1]):
媒体=行[1]。拆分('-')[0]。替换('*','')
article=article.replace('\n'+行[1],'')
如果文章。查找(媒体)>-1:
containsMediaName.write(文件名+'\n')
如果重新匹配(“^Pagina\d{1,5}$”,第[2]行):
article=article.replace('\n'+行[2],'')
article=re.sub('\n版权(.*)Alle rechten voorbehouden\n','\n',article)
article=re.sub('\n\(Foto:(.*)\)\n','\n',article)
article=re.sub('\n\(Fotograaf:(.*)\)\n','\n',article)
article=article.strip().rstrip('\t\r\n\0')
lines=article.split(“\n”)
name=lines.pop()

如果len(name.split(“”))失败的行正试图对输入到其中的某些文本执行匹配

其中的正则表达式代码希望匹配(可能)符合以下测试模式的文本:

something - 10 marc 1974
something else - 11 apri 2001
another match - 99 xxxx 2004
这些看起来有点像文章标题的格式?代码的其余部分似乎试图从日期中删除项目名称

有趣的是,(我猜)与日期匹配的正则表达式代码似乎与3个字符的月份标识符匹配,再加上一个附加字符
[a-zA-Z]{3}。
这似乎是一种内在的日期格式-您的数据符合这种模式吗

如果是这样,那就太好了,但如果不是这样,您可能希望在花括号括起来的
{3}
之后去掉句号,并将正则表达式编辑为:

'^(.*?) - \d{2} [a-zA-Z]{3} \d{4}$'
假设您的日期采用更传统的
dd-Mon-yyyy
格式

正如其他人所说,您可能还希望探索更优雅的异常处理,以涵盖代码找不到日期匹配或lines对象包含少于2个元素的情况

这在谷歌搜索下有很好的记录

但是,为了让你站起来跑步,一些简单的事情

try:
    if re.compile('^(.*?) - \d{2} [a-zA-Z]{3}. \d{4}$').match(lines[1]):
        media = lines[1].split(' - ')[0].replace('*', '')
        article = article.replace('\n' + lines[1], '')
        if article.find(media) > -1:
            containsMediaName.write(filename + '\n')
except:
    print ( "The length of the lines object is {ln}".format(ln=len(lines)) )
如果您试图拉取索引1处的元素(即第二个元素)不存在,它将报告lines对象的长度-这就是错误消息建议的问题所在


[编辑]看到您的代码,split函数似乎无法为您输入的任何数据找到任何换行符,这会在尝试从行中提取第1个元素时产生错误。我还注意到您正在阅读德语(?),所以我对正则表达式重新格式化的评论可能与此无关

忽略错误不是正确的解决方案,您应该理解并解决它。发布行的输出。从列表索引错误中,我可以怀疑它没有第二个元素,即
lines[1]
Yes您是对的@David.Will更正它。@AbhishekL您的意思是?:lines=article.split('\n')name=lines.pop(),如果len(name.split(“”))No@M.M.VanHulle。我指的是您的异常跟踪中的第23行。只需在这一行之前添加
打印行
。检查它是否是长度为2或更长的列表。
'^(.*?) - \d{2} [a-zA-Z]{3} \d{4}$'
try:
    if re.compile('^(.*?) - \d{2} [a-zA-Z]{3}. \d{4}$').match(lines[1]):
        media = lines[1].split(' - ')[0].replace('*', '')
        article = article.replace('\n' + lines[1], '')
        if article.find(media) > -1:
            containsMediaName.write(filename + '\n')
except:
    print ( "The length of the lines object is {ln}".format(ln=len(lines)) )