Удаление слов в текстовых файлах, содержащих символ или строку букв, с помощью Python - PullRequest
0 голосов
/ 10 октября 2018

У меня есть несколько строк текста, и я хочу удалить любое слово со специальными символами или фиксированной заданной строкой в ​​них (в python).

Пример:

in_lines = ['this is go:od', 
            'that example is bad', 
            'amp is a word']

# remove any word with {'amp', ':'}
out_lines = ['this is', 
             'that is bad', 
             'is a word']

Я знаюкак удалить слова из списка, который дан, но не может удалить слова со специальными символами или несколькими буквами.Пожалуйста, дайте мне знать, и я добавлю больше информации.

Это то, что я имею для удаления выбранных слов:

def remove_stop_words(lines):
   stop_words = ['am', 'is', 'are']
   results = []
   for text in lines:
        tmp = text.split(' ')
        for stop_word in stop_words:
            for x in range(0, len(tmp)):
               if tmp[x] == stop_word:
                  tmp[x] = ''
        results.append(" ".join(tmp))
   return results
out_lines = remove_stop_words(in_lines)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018
in_lines = ['this is go:od', 
            'that example is bad', 
            'amp is a word']

def remove_words(in_list, bad_list):
    out_list = []
    for line in in_list:
        words = ' '.join([word for word in line.split() if not any([phrase in word for phrase in bad_list]) ])
        out_list.append(words)
    return out_list

out_lines = remove_words(in_lines, ['amp', ':'])
print (out_lines)

Как ни странно, утверждение

word for word in line.split() if not any([phrase in word for phrase in bad_list])

выполняет всю тяжелую работу здесь одновременно.Он создает список значений True / False для каждой фразы в «плохом» списке, примененной к одному слову.Функция any снова конденсирует этот временный список в одно значение True / False, и если это False, то слово можно безопасно скопировать в список вывода на основе строки.

Например, результат удаления всех слов, содержащих a, выглядит следующим образом:

remove_words(in_lines, ['a'])
>>> ['this is go:od', 'is', 'is word']

(также можно удалить строку for line in ... В этот момент читаемость действительно начинает страдать, хотя.)

0 голосов
/ 10 октября 2018

Это соответствует ожидаемому результату:

def remove_stop_words(lines):
  stop_words = ['am', ':']
  results = []
  for text in lines:
    tmp = text.split(' ')
    for x in range(0, len(tmp)):
      for st_w in stop_words:
        if st_w in tmp[x]:
          tmp[x] = ''
    results.append(" ".join(tmp))
  return results
...