从列表中删除停用词并使用NLTK读取到TXT

时间:2018-04-09 01:51:47

标签: python nltk stop-words

ý'所有。 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()

1 个答案:

答案 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类。您可能希望诉诸另一位读者。评论是否仍然没有帮助