从段落中删除专有名词的程序

时间:2018-05-24 03:32:16

标签: python

我正在尝试编写一个程序,从一个从维基百科解析的段落中删除所有专有名词。

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语句的范围。

如何修复我的代码以解决此问题?

2 个答案:

答案 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.'