Expletive
Profanity filter library for Elixir
Install / Use
/learn @xavier/ExpletiveREADME
Expletive
An obscenity detection and filtering library for Elixir, freely inspired by the obscenity gem.
Installation
Add Expletive as a dependency to your project mix.exs:
def deps do
[{:expletive, "~> 0.1.0"}]
end
Usage
All Expletive functions expect a configuration to be passed:
config = Expletive.configure(blacklist: ~w[very bad words])
Expletive.profane?("this is bad!", config)
# => true
Expletive.profane?("perfectly safe", config)
# => false
Expletive.profanities("this is bad, so BAD!", config)
# => ["bad", "BAD"]
Sanitization
The library offers a fairly wide variety of profanity replacement strategies which can be defined at configuration time or passed explicitly.
Expletive.sanitize("this is bad, so BAD!", config)
# => "This is $#!@%, so %$@!#!"
Expletive.sanitize("this is bad, so BAD!", config, :stars)
# => "This is ***, so ***!"
Expletive.sanitize("this is bad, so BAD!", config, :vowels)
# => "This is b*d, so B*D!
Expletive.sanitize("this is bad, so BAD!", config, ":poop:")
# => "This is :poop:, so :poop:!
Expletive.sanitize("this is bad, so BAD!", config, {:repeat, "-"})
# => "This is ---, so ---!
Expletive.sanitize("this is bad, so BAD!", config, :keep_first_letter)
# => "This is b**, so B**!
Expletive.sanitize("this is bad, so BAD!", config, {:keep_first_letter, "-"})
# => "This is b--, so B--!
Whitelisting
If you wish to allow some words present in the blacklist, you can add exceptions to a whitelist at configuration time:
config = Expletive.configure(blacklist: ~w[very bad words], whitelist: ~w[words])
Expletive.profane?("words", config)
# => false
Built-in blacklists
The library comes with a couple of word lists ready to use:
config = Expletive.configure(blacklist: Expletive.Blacklist.english)
Expletive.profane?("this is batshit crazy!", config)
# => true
config = Expletive.configure(blacklist: Expletive.Blacklist.international)
Expletive.profanities("ceci n'est pas une pipe", config)
# => ["pipe"]
Known Limitations
I18n concerns
A couple of replacement strategies (:vowels and :nonconsonants) are currently limited to the english language.
Related Skills
node-connect
353.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
353.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
353.3kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
