Интервал между запрещенными словами - Python Regular Expression - PullRequest
3 голосов
/ 28 июня 2019

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

Пример:

Banned word: Apple
Solution: A p p l e

Есть ли способ борьбы с этим в Regex?Моя непосредственная мысль - использовать что-то похожее на:

(a\s*p\s*p\s*l\s*e\s*)

Однако я чувствую, что это не оптимальное решение.

Если есть решение, пожалуйста, дайте мне знать.Спасибо.

Редактировать:

Яблоки на самом деле не запрещенные слова, а просто заполнители для более грубых слов.

Идея убрать пробел и затем сравнить не доступна,так как некоторые безобидные слова могут быть помечены таким образом.Как пример:

"We need a medic, he's hit --> weneedamediche'[shit]" FLAGGED.

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Надеюсь, это будет полезно.

sentence = 'learn to play with code'
sentence_to_word_list = sentence.split(' ') # spliting sentence to words here
banned_Words = ['to', 'with']   # list of banned words

for index, word in enumerate(sentence_to_word_list): # enumerate is used to track the index of each word
    if word in banned_Words:
        sentence_to_word_list[index] = '-'.join(list(word)) # we can join word here with any character,symbol or number

sentence = ' '.join(sentence_to_word_list) # again joining the list of word to make the whole sentence
print(sentence) # output : learn t-o play w-i-t-h code
1 голос
/ 28 июня 2019

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

s = "A p p l e"
s = s.trim() 
print(is_badword(s))

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

Вы должны проверить все возможные комбинации последовательных токенов. Это не достижимо с помощью регулярных выражений, но оно должно быть управляемым с помощью дерева поиска плохих слов в O(t^2), где t - количество токенов. (Также я предполагаю, что пользователи также могут разбивать плохие слова иначе, чем на каждый символ, например Ap p le)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...