Zero dependency profanity detector based on Swearjar and Profane.
Note: Some examples may contain offensive language for illustration purposes.
npm install @nkzw/profane
new Profane(
options?
)
Create a new instance:
import Profane from 'profane';
const profane = new Profane();
Check if a text matches the word list:
profance.check('Hell no'); // true
profance.check('H3ll no'); // true
profane.check('Banana Banana Banana'); // false
Censor words matching the word list:
profane.censor('Hell no'); // '**** no'
profane.censor('Hell no', '•'); // '•••• no'
Get the word frequencies of words matching the word list:
```js
const frequencies = profane.getWordFrequencies('horniest hornet fart');
{
"horniest": 1,
"fart": 1
}
Get the category frequencies of words matching the word list:
const frequencies = profane.getCategoryFrequencies('horniest hornet fart');
{
"inappropriate": 1,
"sexual": 1
}
You can configure your Profane instance with a custom word list by supplying an object with word definitions:
const profane = new Profane({
words: {
happy: ['inappropriate'],
awesome: ['elated'],
},
});
profane.check('Mr. Happy is awesome'); // true
profane.getCategoryFrequencies('Mr. Happy is awesome'); // {inappropriate: 1, elated: 1}
You can receive a copy of the word list through the getWordList()
function:
import { getWordList } from '@nkzw/profane';
getWordList(); // Record<string, ReadonlyArray<string>>
Determines whether to normalize Leet or not. Defaults to true
'.
new Profane({ normalize: false }).check('H3ll'); // false
new Profane({ normalize: true }).check('H3ll'); // true
Whether to match only on whole words or not. Defaults to false
'.
new Profane({ wholeWordsOnly: false }).check('shell'); // true
new Profane({ wholeWordsOnly: true }).check('shell'); // false
The default word list was lifted from Swearjar and may be out-of-date. Please feel free to send Pull Requests with new and updated definitions.