我正在尝试编写一个程序,从一个从维基百科解析的段落中删除所有专有名词。
no_pnoun_paragraph = ""
for i in range(len(clean_paragraph)):
if clean_paragraph[i].isupper() == True and clean_paragraph[i - 2] != ".":
cutoff = clean_paragraph[i:]
delete = cutoff[:cutoff.find(" ")]
clean_paragraph = clean_paragraph.replace(delete, "")
print clean_paragraph
这会尝试删除所有以大写字母开头但不开始句子的单词。我收到一个错误,表明字符串索引超出了if语句的范围。
如何修复我的代码以解决此问题?
答案 0 :(得分:0)
我认为,错误是由于以下代码行
`clean_paragraph` = clean_paragraph.replace(delete, "")
因为你要替换它,所以clean_paragraph的长度会减少。但是,当for循环开始clean_paragraph
长度不同时。
例如:
可以说,你的clean_paragraph是"Hello"
当您执行len(clean_paragraph)
时,长度为5
所以,现在..如果您replace 'l'
如下
clean_paragraph = clean_paragraph.replace("l","")
然后,clean_paragraph的长度减少到3 。
但是,因为for循环继续,范围为0到5.但是,由于前一个操作减小了大小,当for循环的索引变为4时,clean_paragraph[4]
超出范围目前, clean_paragraph是“Heo”,您正试图访问第四个索引
答案 1 :(得分:0)
您可以使用re
来执行此操作:
clean_paragraph = 'You are right. We are Going to be there.'
no_pnoun_paragraph = re.sub(r'([^.])( [A-Z]\w*)', r'\1', clean_paragraph)
# 'You are right. We are to be there.'