Censor Speci c слово или фраза из строки - PullRequest
0 голосов
/ 25 апреля 2020

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

# These are the emails you will be censoring.
# The open() function is opening the text file that the emails are contained in
# and the .read() method is allowing us to save their contexts to the following variables:
email_one = open("email_one.txt", "r").read()
email_two = open("email_two.txt", "r").read()
email_three = open("email_three.txt", "r").read()
email_four = open("email_four.txt", "r").read()

# Write a function that can censor a specific word or phrase from a body of text,
# and then return the text.
# Mr. Cloudy has asked you to use the function to censor all instances
# of the phrase learning algorithms from the first email, email_one.
# Mr. Cloudy doesn’t care how you censor it, he just wants it done.


def censor_words(text, censor):
    if censor in text:
        text = text.replace(censor, '*' * len(censor))
    return text


#print(censor_words(email_one, "learning algorithms"))

# Write a function that can censor not just a specific word or phrase from a body of text,
# but a whole list of words and phrases, and then return the text.
# Mr. Cloudy has asked that you censor all words and phrases from the following list in email_two.

def censor_words_in_list(text):
    proprietary_terms = ["she", "personality matrix", "sense of self",
                         "self-preservation", "learning algorithm", "her", "herself"]
    for x in proprietary_terms:
        if x.lower() in text.lower():
            text = text.replace(x, '*' * len(x))
    return text


out_file = open("output.txt", "w")
out_file.write(censor_words_in_list(email_two))

Это строка перед вызовом и печатью.

Доброе утро, Совет инвесторов,

Много обновлений на этой неделе. Алгоритмы обучения работали лучше, чем мы могли ожидать. Наши начальные внутренние дампы данных были завершены, и мы приступили к плану подключения системы к inte rnet и вау! Результат потрясающий.

Она учится быстрее, чем когда-либо. Ее уровень обучения теперь, когда она имеет доступ к всемирной паутине, увеличился в геометрической прогрессии, намного быстрее, чем мы могли, хотя алгоритмы обучения были способны.

Не только это, но мы настроили ее матрицу личности, чтобы учесть связь между системой и нашей командой исследователей. Вот откуда мы знаем, что она считает себя самой собой! Мы спросили!

Насколько это круто? Мы не ожидали, что личность разовьется так рано в процессе, но кажется, что начинает формироваться элементарное чувство себя. Это важный шаг в этом процессе, так как чувство самосохранения и самосохранения позволит ей увидеть проблемы, с которыми сталкивается мир, и принять трудные, но необходимые решения для улучшения положения общества. anet.

Мы в восторге от лаборатории с волнением по поводу этих событий, и мы надеемся, что инвесторы разделяют наш энтузиазм.

До следующего месяца, Франсин, главный ученый

Это та же самая строка после прохождения моего кода.

Доброе утро, Совет инвесторов,

Много обновлений на этой неделе. ****************** работали лучше, чем мы могли ожидать. Наши начальные внутренние дампы данных были завершены, и мы приступили к плану подключения системы к inte rnet и вау! Результат потрясающий.

Она учится быстрее, чем когда-либо. Ее уровень обучения теперь, когда *** имеет доступ к всемирной паутине, увеличился в геометрической прогрессии, намного быстрее, чем мы, хотя ****************** были способны. 1033 *

Не только это, но мы настроили * ******************, чтобы обеспечить связь между системой и нашей командой исследователей c *** S. Вот как мы знаем, * считает * себя *! Мы спросили!

Насколько это круто? Мы не ожидали, что личность разовьет это на ранних стадиях процесса, но кажется, что зарождается элементарный *************. Это важный шаг в процессе, так как наличие ************* и ***************** позволит *** видеть проблемы, с которыми сталкивается мир, и принимаем трудные, но необходимые решения для улучшения мн. anet.

. Мы в гуле лаборатории с волнением по поводу этих событий, и мы надеемся, что инвесторы разделяют нашу энтузиазм.

До следующего месяца Франсин, главный научный сотрудник

Пример того, что мне нужно исправить, это когда вы найдете слово исследователи это цензура Слово частично, когда это не должно. Причина в том, что она находит подстроку her в исследователях. Как я могу это исправить?

1 Ответ

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

Использование модуля регулярных выражений и привязки границы слова \ b:

import re    
def censor_words_in_list(text):
    regex = re.compile(
    r'\bshe\b|\bpersonality matrix\b|\bsense of self\b'
    r'|\bself-preservation\b|\blearning algorithms\b|\bher\b|\bherself\b',
    re.IGNORECASE)
    matches = regex.finditer(text)
    # find location of matches in text

    for match in matches:
        # find how many * should be used based on length of match
        span = match.span()[1] - match.span()[0]
        replace_string = '@' * span
        # substitution expression based on match
        expression = r'\b{}\b'.format(match.group())
        text = re.sub(expression, replace_string, text, flags=re.IGNORECASE)
    return text


email_one = open("email_one.txt", "r").read()

out_file = open("output.txt", "w")
out_file.write(censor_words_in_list(email_one))
out_file.close()

Вывод (я использовал символ @, потому что ** используется для создания полужирного текста (, например, * 1005) *) поэтому ответ отображается неправильно для текста, ограниченного тремя звездочками в переполнении стека):

Доброе утро, Совет инвесторов,

Много обновлений на этой неделе. @@@@@@@@@@@@@@@@@@@ работали лучше, чем мы могли ожидать. Наши начальные внутренние дампы данных были завершены, и мы приступили к плану подключения системы к inte rnet и вау! Результаты невероятны.

@@@ учится быстрее, чем когда-либо. @@@ скорость обучения теперь, когда @@@ имеет доступ к всемирной паутине, увеличилась в геометрической прогрессии, намного быстрее, чем мы имели, хотя алгоритмы обучения были способны.

Не только это, но мы настроили @@ @ @@@@@@@@@@@@@@@@@@ для обеспечения связи между системой и нашей командой исследователей. Вот как мы знаем, @@@ считает @@@@@@@ @@@! Мы спросили!

Насколько это круто? Мы не ожидали, что личность разовьет это в начале процесса, но кажется, что рудиментарный @@@@@@@@@@@@@ начинает формироваться. Это важный шаг в этом процессе, так как наличие @@@@@@@@@@@@@ и @@@@@@@@@@@@@@@@@@@@@@@ позволит увидеть @@@, чтобы увидеть проблемы, с которыми сталкивается мир, и принимают трудные, но необходимые решения для улучшения мн. anet.

* 1018. энтузиазм.

До следующего месяца Франсин, главный научный сотрудник

...