Package: better-profanity
better_profanityBlazingly fast cleaning swear words (and their leetspeak) in stringsInspired from packageprofanityofBen Friedland, this library is significantly faster than the original one, by using string comparison instead of regex.It supportsmodified spellings(such asp0rn,h4NDjob,handj0bandb*tCh).RequirementsThis package works withPython 3.4+andPyPy3.Installation$ pip install better_profanityUnicode charactersOnly Unicode characters from categoriesLl,Lu,McandMnare added. More on Unicode categories can be foundhere.Not all languages are supported yet, such asChinese.Usagefrom better_profanity import profanity

if __name__ == "__main__":
    profanity.load_censor_words()

    text = "You p1ec3 of sHit."
    censored_text = profanity.censor(text)
    print(censored_text)
    # You **** of ****.All modified spellings of words inprofanity_wordlist.txtwill be generated. For example, the wordhandjobwould be loaded into:'handjob', 'handj*b', 'handj0b', 'handj@b', 'h@ndjob', 'h@ndj*b', 'h@ndj0b', 'h@ndj@b',
'h*ndjob', 'h*ndj*b', 'h*ndj0b', 'h*ndj@b', 'h4ndjob', 'h4ndj*b', 'h4ndj0b', 'h4ndj@b'The full mapping of the library can be found inprofanity.py.1. Censor swear words from a textBy default,profanityreplaces each swear words with 4 asterisks****.from better_profanity import profanity

if __name__ == "__main__":
    text = "You p1ec3 of sHit."

    censored_text = profanity.censor(text)
    print(censored_text)
    # You **** of ****.2. Censor doesn't care about word dividersThe function.censor()also hide words separated not just by an empty spacebut also other dividers, such as_,,and.. Except for@, $, *, ", '.from better_profanity import profanity

if __name__ == "__main__":
    text = "...sh1t...hello_cat_fuck,,,,123"

    censored_text = profanity.censor(text)
    print(censored_text)
    # "...****...hello_cat_****,,,,123"3. Censor swear words with custom character4 instances of the character in second parameter in.censor()will be used to replace the swear words.from better_profanity import profanity

if __name__ == "__main__":
    text = "You p1ec3 of sHit."

    censored_text = profanity.censor(text, '-')
    print(censored_text)
    # You ---- of ----.4. Check if the string contains any swear wordsFunction.contains_profanity()returnTrueif any words in the given string has a word existing in the wordlist.from better_profanity import profanity

if __name__ == "__main__":
    dirty_text = "That l3sbi4n did a very good H4ndjob."

    profanity.contains_profanity(dirty_text)
    # True5. Censor swear words with a custom wordlist5.1. Wordlist as aListFunctionload_censor_wordstakes aListof strings as censored words.
The provided list will replace the default wordlist.from better_profanity import profanity

if __name__ == "__main__":
    custom_badwords = ['happy', 'jolly', 'merry']
    profanity.load_censor_words(custom_badwords)

    print(profanity.contains_profanity("Have a merry day! :)"))
    # Have a **** day! :)5.2. Wordlist as a fileFunction `load_censor_words_from_file takes a filename, which is a text file and each word is separated by lines.from better_profanity import profanity

if __name__ == "__main__":
    profanity.load_censor_words_from_file('/path/to/my/project/my_wordlist.txt')6. WhitelistFunctionload_censor_wordsandload_censor_words_from_filetakes a keyword argumentwhitelist_wordsto ignore words in a wordlist.It is best used when there are only a few words that you would like to ignore in the wordlist.# Use the default wordlist
profanity.load_censor_words(whitelist_words=['happy', 'merry'])

# or with your custom words as a List
custom_badwords = ['happy', 'jolly', 'merry']
profanity.load_censor_words(custom_badwords, whitelist_words=['merry'])

# or with your custom words as a text file
profanity.load_censor_words_from_file('/path/to/my/project/my_wordlist.txt', whitelist_words=['merry'])7. Add more censor wordsfrom better_profanity import profanity

if __name__ == "__main__":
    custom_badwords = ['happy', 'jolly', 'merry']
    profanity.add_censor_words(custom_badwords)

    print(profanity.contains_profanity("Happy you, fuck!"))
    # **** you, ****!LimitationsAs the library compares each word by characters, the censor could easily be bypassed by adding any character(s) to the word:profanity.censor('I just have sexx')
# returns 'I just have sexx'

profanity.censor('jerkk off')
# returns 'jerkk off'Any word inwordlistthat have non-space separators cannot be recognised, such ass & m, and therefore, it won't be filtered out. This problem was raised in#5.Testing$ python tests.pyContributingPlease readCONTRIBUTING.mdfor details on our code of conduct, and the process for submitting pull requests to us.LicenseThis project is licensed under the MIT License - see theLICENSE.mdfile for detailsSpecial thanks toAndrew Grinevich- Add support for Unicode characters.Jaclyn Brockschmidt- Optimize string comparison.AcknowledgmentsBen Friedland- For the inspiring packageprofanity.