Как заменить слова (в текстовом файле), которые соответствуют моему списку строк? - PullRequest
3 голосов
/ 13 апреля 2020
  • Я хочу понять, что нужно для замены некоторых слов из моего файла .TXT.
    • Эти определенные слова будут строками в списке censored_words.

Мне удалось выполнить замену одного слова:

email = open('email.txt', 'r').read()

def single_string_replace(email):
    return email.replace('word1', 'REDACTED')

Но я не мог получить список слов для работы "без нареканий". Это моя попытка:

email = open('email.txt', 'r').read()
banned_words = ['word1', 'phrase one']

def list_replace(email):
    list_place = 0
    while list_place < len(banned_words):
        for word in banned_words:
            email = email.replace(word, 'REDACTED')
            list_place += 1
        return email

Я стремлюсь оптимально сохранить файлы .TXT без изменений и вижу изменения только с помощью оператора print (), такого как

print(list_replace(email))

Проблема у меня есть:

  • Допустим, я запрещаю слово, такое как собака, а также запрещаю слово хот-дог. Если сначала в списке появляется «собака», то при поиске бана «хот-дог» он не находит ничего.
  • Это создает «УДАЛЕНО» вместо «УДАЛЕНО».
  • и наоборот. Если я хочу, чтобы слово «собака» было забанено, но хот-дог в порядке, как я могу убедиться, что оба этих вышеупомянутых случая работают без перегибов?

Как всегда было, есть и будет: все предложения приветствуются!

Спасибо

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

вы можете использовать re.sub :

import re


email = open('email.txt', 'r').read()
banned_words = ['word1', 'phrase one']
pattern = '|'.join(f'\\b{w}\\b' for w in banned_words)

def list_replace(email):
    return re.sub(pattern, 'REDACTED', email)

print(list_replace(email))
1 голос
/ 13 апреля 2020

Вот функция, которая заменяет слова. Можно изменить swlist в функции, чтобы добавить или удалить больше таких стоп-слов.


Функция для замены текста

from nltk import word_tokenize

def mask_word(with_sw):
    swlist = ['dog','cat']
    without_sw = ""
    char = 'nan'
    tokens = word_tokenize(with_sw)
    for char in tokens:
        if char in swlist:
            without_sw = without_sw + " " + "REDACTED"
        else:
            without_sw = without_sw + " " + char

    return(without_sw)    

Пример использования ниже

text = "this is a dog and hotdog test"

print(mask_word(text))

Вывод выглядит так:

this is a REDACTED and hotdog test
0 голосов
/ 13 апреля 2020

Попробуй вот так

words = open('email.txt').read().split() #to get a list of words
words = [word.replace('\n','') for word in words] #removing all newlines if any
censored_words = ['ADD', 'YOUR', 'WORDS', 'HERE']

for word in words:
    if word in censored_words:
        print(word) #printing all the occurences of censored words
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...