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

2024-10-02 22:26:28 发布

您现在位置: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语句的范围。你知道吗

如何修复代码以解决此问题?你知道吗


Tags: noin程序cleanforlenifrange
2条回答

我想,这个错误是因为下面的代码行

`clean_paragraph` = clean_paragraph.replace(delete, "")

因为您要替换它,所以段落的长度会缩短。但是,当for循环开始时clean_paragraph长度是不同的。你知道吗

例如:

比如说,你干净的段落是"Hello" 执行len(clean_paragraph)时,长度将为5 那么,现在..如果你replace 'l'如下

clean_paragraph = clean_paragraph.replace("l","")

然后,clean_段的长度减少到3。 但是,由于for循环继续,范围是0到5。但是,由于前面的操作减小了大小,当for循环的索引变为4时,clean_paragraph[4]与当前一样超出范围clean\u paragraph是“Heo”并且您正在尝试访问第四个索引

您可以使用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.'

相关问题 更多 >