在不使用nltk语料库的情况下删除停用词

时间:2014-07-06 05:45:39

标签: python python-2.7 text-mining

我试图在不使用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()

这段代码错了。但任何人都可以通过更改代码来完成此任务。

先谢谢。

3 个答案:

答案 0 :(得分:1)

你可以使用Linux Sed方法删除停用词

sed -f <(sed 's/.*/s|\\\<&\\\>||g/' stopwords.txt) all_lo.txt > all_remove1.txt

答案 1 :(得分:0)

我个人会做的是遍历停用词列表(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()

答案 2 :(得分:0)

你的第一个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()