A Python profanity filter forked from Blaspsoft/blasp.
Project description
Profy
Profy is a Python fork of Blaspsoft/blasp, focused on the core profanity filtering engine rather than Laravel integration. It ports Blasp's dictionary-driven, obfuscation-aware matching into a standalone Python package.
The repository lives at mantleCurve/profy.
Install
pip install profy-filter
The import package is profy:
from profy import filter_text, clean_text, check_text
result = filter_text("This is f-uuck!ng noisy")
print(result.is_offensive) # True
print(result.clean) # This is ********* noisy
print(result.unique_words) # ['fucking']
print(result.score) # severity-weighted score from 0 to 100
assert check_text("f**k")
assert clean_text("shit") == "****"
Development
python -m pip install -e ".[dev]"
python -m pytest
Reuse a Filter
Create a ProfanityFilter when you need to process many strings with the same options.
from profy import ProfanityFilter, Severity
shield = ProfanityFilter(
languages=["english", "spanish"],
mask="#",
minimum_severity=Severity.MODERATE,
allow=["heck"],
block=["internal-ban-word"],
)
result = shield.check("clean this text")
print(result.to_dict())
Options
filter_text() and ProfanityFilter() accept:
languages: a language name or iterable. Bundled data includesenglish,spanish,german, andfrench.all_languages: use every bundled language dictionary.allow: words that should never be flagged.block: extra words that should always be flagged.mask: a replacement character or callback(word, length) -> str.minimum_severity:mild,moderate,high, orextreme.
Result Shape
{
"original": "This is shit",
"clean": "This is ****",
"is_offensive": True,
"score": 40,
"count": 1,
"unique_words": ["shit"],
"severity": "high",
"words": [
{
"text": "shit",
"base": "shit",
"severity": "high",
"position": 8,
"length": 4,
"language": "english",
}
],
}
Scope
This fork intentionally ports the profanity filter itself, not Blasp's Laravel service provider, middleware, Eloquent helpers, events, facades, or cache layer.
Upstream Sync
Use scripts/sync_from_blasp.py to fetch the latest Blasp PHP repository, export updated dictionary/config data into Profy's Python package, and generate an implementation-change report for PHP files that need manual port review.
python scripts/sync_from_blasp.py
Release
Alpha releases use PEP 440 versions such as 0.1.0a1 and Git tags such as v0.1.0a1. The GitHub Actions release workflow runs tests, builds the source distribution and wheel, uploads them as artifacts, and attaches them to the GitHub Release.
Attribution
Profy is a Python fork of Blaspsoft/blasp, originally authored by Michael Deeming and released under the MIT license.
License
MIT. See LICENSE.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file profy_filter-0.1.2.tar.gz.
File metadata
- Download URL: profy_filter-0.1.2.tar.gz
- Upload date:
- Size: 52.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8250b221be9d35df96ddf577a63ce94d8959f435efede38988e006b11b44e9ca
|
|
| MD5 |
8f933823560dbddeba0c0cb3edef62a6
|
|
| BLAKE2b-256 |
df0965e726b6fcbdf82b0ce16b05a3096d4aa57d98a0e6e3a62d596643cb6af0
|
Provenance
The following attestation bundles were made for profy_filter-0.1.2.tar.gz:
Publisher:
release.yml on mantleCurve/profy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
profy_filter-0.1.2.tar.gz -
Subject digest:
8250b221be9d35df96ddf577a63ce94d8959f435efede38988e006b11b44e9ca - Sigstore transparency entry: 1970001839
- Sigstore integration time:
-
Permalink:
mantleCurve/profy@3513523727c3798c89128fa668e23519d54baa33 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/mantleCurve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3513523727c3798c89128fa668e23519d54baa33 -
Trigger Event:
push
-
Statement type:
File details
Details for the file profy_filter-0.1.2-py3-none-any.whl.
File metadata
- Download URL: profy_filter-0.1.2-py3-none-any.whl
- Upload date:
- Size: 44.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4476bff35a0a169ea44b19ce8452f50427b124fb8c0ef53c5465c4d7e8ff7b20
|
|
| MD5 |
8c764322df43b724ec90d8c5cf7b760a
|
|
| BLAKE2b-256 |
b94d34d147e9e6cf23dc7a9dcc0d1061e0217199d3d79a071f2a3df4ea7e81b3
|
Provenance
The following attestation bundles were made for profy_filter-0.1.2-py3-none-any.whl:
Publisher:
release.yml on mantleCurve/profy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
profy_filter-0.1.2-py3-none-any.whl -
Subject digest:
4476bff35a0a169ea44b19ce8452f50427b124fb8c0ef53c5465c4d7e8ff7b20 - Sigstore transparency entry: 1970001968
- Sigstore integration time:
-
Permalink:
mantleCurve/profy@3513523727c3798c89128fa668e23519d54baa33 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/mantleCurve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@3513523727c3798c89128fa668e23519d54baa33 -
Trigger Event:
push
-
Statement type: