ý'所有。 I'一直在试图从一个pdf已被读取到一个列表中删除停用词,但每当我使用NLTK从列表或一个新的列表中删除那些停用词,它返回原来的列表回到我的TXT文件。我已经制作了一个单独的程序来测试停用词功能是否有效,并且它在那里工作正常,但由于某些原因不适用于这种情况。
还有更好的方法吗?任何帮助将不胜感激。
import PyPDF2 as pdf
import nltk
from nltk.corpus import stopwords
stopping_words = set(stopwords.words('english'))
stop_words = list(stopping_words)
# creating an object
file = open("C:\\Users\\Name\\Documents\\Data Analytics Club\\SampleBook-English2-Reading.pdf", "rb")
# creating a pdf reader object
fileReader = pdf.PdfFileReader(file)
# print the number of pages in pdf file
textData = []
for pages in fileReader.pages:
theText = pages.extractText()
# for char in theText:
# theText.replace(char, "\n")
textData.append(theText)
final_list = []
for i in textData:
if i in stopwords.words('english'):
textData.remove(i)
final_list.append(i.strip('\n'))
# filtered_word_list = final_list[:] #make a copy of the word_list
# for word in final_list: # iterate over word_list
# if word in stopwords.words('english'):
# final_list.remove(word) # remove word from filtered_word_list if it is a stopword
# filtered_words = [word for word in final_list if word not in stop_words]
# [s.strip('\n') for s in theText]
# [s.replace('\n', '') for s in theText]
# text_data = []
# for elem in textData:
# text_data.extend(elem.strip().split('n'))
# for line in textData:
# textData.append(line.strip().split('\n'))
#--------------------------------------------------------------------
import os.path
save_path = "C:\\Users\\Name\\Documents\\Data Analytics Club"
name_of_file = input("What is the name of the file: ")
completeName = os.path.join(save_path, name_of_file + ".txt")
file1 = open(completeName, "w")
# file1.write(str(final_list))
for line in final_list:
file1.write(line)
file1.close()
答案 0 :(得分:1)
问题出在这一行
if i in stopwords.words('english'):
textData.remove(i)
您只删除该单词的一次出现。如果你阅读here,它只会删除第一个出现的单词。
您可能想要删除它的目的是:
Python 2
filter(lambda x: x != i, textData)
Python 3
list(filter(lambda x: x != i, textData))
修改强>
所以我意识到你实际上已经过了很长时间,因为你正在迭代你要删除元素的列表。所以,你可能不想这样做。有关详细信息,请参阅here
相反,你想要做的是:
for i in set(textData):
if i in stopwords.words('english'):
pass
else
final_list.append(i.strip('\n'))
编辑2
显然问题来自这里,需要修复:
for pages in fileReader.pages:
theText = pages.extractText()
words = theText.splitlines()
textData.append(theText)
然而,对于我测试过的文件,它仍然在同一句子中给出了间距和合并单词的问题。它给了我'sameuserwithinacertaintimeinterval(typicallysettoa'
和'bedirectionaltocapturethefactthatonestorywasclicked'
话虽如此,问题在于PyPDF2类。您可能希望诉诸另一位读者。评论是否仍然没有帮助