我试图在不使用nltk的情况下删除文本文件中的停止词。我有f1 f2 f3三个文本文件。F1有文本逐行,f2有停止词列表,f3是空文件。我想一行一行地读f1,然后一个字一个字地读,需要检查它是否在f2(停止词)中。如果该单词不在停止词中,则将该单词写在f3中。因此,在f3的末尾应该有f1中的文本,但在每行中,f2中的单词(停止词)应该被删除。
f1 = open("file1.txt","r")
f2 = open("stop.txt","r")
f3 = open("file2.txt","w")
for line in f1:
words = line.split()
for word in words:
t=word
for line in f2:
w = line.split()
for word in w:
t1=w
if t!=t1:
f3.write(word)
f1.close()
f2.close()
f3.close()
这个代码是错误的。但是任何人都可以通过改变代码来完成这项任务吗?
您可以使用Linux Sed方法删除停止词
sed -f <(sed 's/.*/s|\<&\>||g/' stopwords.txt) all_lo.txt > all_remove1.txt
我个人会做的是循环遍历停止词列表(f2)并将每个单词附加到脚本中的列表中。例:
stoplist = []
file1 = open('f1.txt','r')
file2 = open('f2.txt','r')
file3 = open('f3.txt','a') # append mode. Similar to rw
for line in f2:
w = line.split()
for word in w:
stoplist.append(word)
#end
for line in file1:
w = line.split()
for word in w:
if word in stoplist: continue
else:
file3.write(word)
#end
file1.close()
file2.close()
file3.close()
你的第一个for循环是错误的,因为通过这个命令for word in words: t=word
你没有所有的单词,单词是一个列表,你可以使用它:如果你的文件包含多行,你的列表不包含所有的单词 !!你必须这样做!它工作正确!
f1 = open("a.txt","r")
f2 = open("b.txt","r")
f3 = open("c.txt","w")
first_words=[]
second_words=[]
for line in f1:
words = line.split()
for w in words:
first_words.append(w)
for line in f2:
w = line.split()
for i in w:
second_words.append(i)
for word1 in first_words :
for word2 in second_words:
if word1==word2:
first_words.remove(word2)
for word in first_words:
f3.write(word)
f3.write(' ')
f1.close()
f2.close()
f3.close()