簡體   English   中英

從段落中刪除專有名詞的程序

[英]Program to remove proper nouns from paragraph

我正在嘗試編寫一個程序,該程序從Wikipedia解析的段落中刪除所有專有名詞。

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語句的范圍。

如何解決我的代碼以解決此問題?

我認為,該錯誤是由於以下代碼行

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

由於要替換它,因此clean_paragraph的長度減少了。 但是,當for循環開始時, clean_paragraph長度不同。

例如:

可以說,當您執行len(clean_paragraph)時,您的clean_paragraph是"Hello" ,長度現在是5所以..如果您按以下方式replace 'l'

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

然后,clean_paragraph的長度減小為3 但是,由於for循環繼續進行,范圍為0到5。但是,由於前一個操作減小了大小,因此當for循環的索引變為4時, clean_paragraph[4] 超出了當前范圍clean_paragraph為“嗨” ,您正在嘗試訪問第4個索引

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM