2015-07-10 5 views
1

У меня есть файл, который представляет собой список слов - одно слово в каждой строке - filterlist.txt. Другой файл представляет собой гигантскую строку text- text.txt.фильтровать слова из одного текстового файла в другом текстовом файле?

Я хочу найти все экземпляры слов из файла filterlist.txt в text.txt и удалить их.

Вот что я до сих пор:

text = open('ttext.txt').read().split() 
filter_words = open('filterlist.txt').readline() 

for line in text: 
    for word in filter_words: 
     if word == filter_words: 
      text.remove(word) 

ответ

1

магазин фильтра слов в наборе, перебирать слова из строки в ttext.txt, и только держать слова, которые не входят в набор фильтров слова.

with open('ttext.txt') as text, open('filterlist.txt') as filter_words: 
    st = set(map(str.rstrip,filter_words)) 
    txt = next(text).split() 
    out = [word for word in txt if word not in st] 

Если вы хотите игнорировать дело и удалить знаки препинания, вам необходимо позвонить ниже по каждой линии и полосы знаки препинания:

from string import punctuation 
with open('ttext.txt') as text, open('filterlist.txt') as filter_words: 
    st = set(word.lower().rstrip(punctuation+"\n") for word in filter_words) 
    txt = next(text).lower().split() 
    out = [word for word in txt if word not in st] 

Если у вас несколько строк в ttext использовании (word for line in text for word in line.split()) будет более эффективный подход к памяти.

+0

это не работает для меня, но я понятия не имею, почему, потому что я никогда не видел такого синтаксиса раньше ... Я совершенно не знаком с python – natalie

+0

@natalie, он точно выполняет ваш вопрос, все слова, которые появляются в строке из ttext, будут удалены, из них будут содержать только слова, не содержащиеся в файле filterlist.txt. Добавить ссылку на содержимое вашего файла –

+0

В файле есть слова '195585', второй подход, десчивающий пунктуацию и опускание слов' 82497', первый без возврата '90853', как они не работают? –

-1

Скажем, если это то, что у вас есть в файле text.txt: 'hello foo apple car water cat' и это то, что вы имеете в filterlist.txt файле: apple car

text = open('text.txt').read().strip("'").split(' ') 
    filter_words = open('filterlist.txt').readline().split() 
    for i in filter_words: 
     if i in text: 
      text.remove(i) 
      new_text = ' '.join(text) 
    print new_text 

Выход будет:

hello foo water cat 
+0

Это не работает с моими файлами; Я думаю, это потому, что мой файл filter_words не является длинной строкой - все слова находятся на отдельных строках. Он работает, если я использую ваши примеры, хотя – natalie

0

Использование Принцип Padraic Cunningham i закодировал это в функции

from string import punctuation 

def vocab_filter(text, filter_vocab): 
    txt = text.replace('\n', ' ').lower().split() 
    out = [word for word in txt if word not in filter_vocab] 
    return out 

Очень важно использовать набор, а не список во втором аргументе. Поиск в списках - O (n), поиск в словарях амортизируется O (1). Поэтому для больших файлов это оптимально.

Смежные вопросы