尝试过滤输入

时间:2018-08-08 09:56:48

标签: python python-3.x python-3.7

我正在尝试过滤输入,因此不仅要在输入准确的输入时对其进行过滤,而且还要在后面紧跟单词或有空格或其他东西时进行过滤。

当前的简化代码:

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个项目。

2 个答案:

答案 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']。我希望这对您有用。