удаление стоп-слов без использования nltk corpus

#python #python-2.7 #text-mining

#python #python-2.7 #интеллектуальный анализ текста

Вопрос:

Я пытаюсь удалить стоп-слова в текстовом файле без использования 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()
  

этот код неверен. но может ли кто-нибудь выполнить эту задачу, изменив код.

Заранее спасибо.

Ответ №1:

Вы можете использовать метод Linux Sed для удаления стоп-слов

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

Ответ №2:

Что бы я лично сделал, так это перебрал список стоп-слов (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()
  

Ответ №3:

ваш первый цикл for неверен, потому что с помощью этой команды for word in words: t=word у вас есть не все слова в t, слова представляют собой список, и вы можете работать с ним: также, если ваши файлы содержат несколько строк, ваш список содержит не все слова!! вы должны сделать это вот так! это работает правильно!

 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()
  

Комментарии:

1. ваш хороший ком! я рад! но почему вы отметили приведенный выше ответ ?! 🙂