我正在尝试过滤输入,因此不仅要在输入准确的输入时对其进行过滤,而且还要在后面紧跟单词或有空格或其他东西时进行过滤。
当前的简化代码:
profanity = ["rude", "words"]
userInput = input(" : ")
if userInput in (profanity):
inputLength = len(userInput)
userInput = ""
for i in range(inputLength):
userInput += "*"
print (userInput)
因此,在此示例中,它将与"rude"
和"word"
一起使用,但不适用于"rude "
和"rude %"
等情况,其中%
任何单词/句子。列表本身有127个项目。
答案 0 :(得分:2)
1. /第一种情况::您想审查粗鲁为****但不粗略为c ****
问题是,当您实际上要处理子字符串(或者更具体地讲是标记,因为倒注可能想要保留诸如crude
的项)时,您正在测试整个输入字符串
基本思想是标记输入字符串并独立验证每个工作。这样做的一个非常基本的方法(如果您不想深入研究NLP技术)是在空间上划分。
您可以尝试以下方法:
profanity = ["rude", "words"]
userInput = input(" : ")
parts = userInput.split()
output = []
for p in parts:
if p in profanity:
output.append('*' * len(p))
else:
output.append(p)
print(' '.join(output))
请记住,这是您可以改进的一些基本代码。它不会处理标点符号(rude.
)或其他大小写(RUDE
)
2. /第二种情况::您想审查粗鲁的****和粗略的c ****
如果您要替换任何粗鲁的实例(即使是粗鲁的实例,也可以是其他实例),可以使用相反的方法
profanity = ["rude", "words"]
userInput = input(" : ")
for p in profanity:
if p in userInput:
userInput = userInput.replace(p, '*' * len(p))
print(userInput)
无论如何,这都是方法/目标的基本思想,还有很大的改进空间(标点,大写,表达式,更高级的NLP ...)
答案 1 :(得分:0)
def filter_function(input):
words_to_be_filtered = ["rude", "words"]
searched = map(lambda x: x in input, words_to_be_filtered)
return reduce(lambda x,y: x or y, searched, False)
inputs = ["something", "somethingrude", "sometwordshing"]
print(filter(filter_function, inputs))
上面的函数给出以下结果:['somethingrude', 'sometwordshing']
。我希望这对您有用。