Skip to main content

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 includes english, spanish, german, and french.
  • 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, or extreme.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

profy_filter-0.1.0a1.tar.gz (42.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

profy_filter-0.1.0a1-py3-none-any.whl (37.5 kB view details)

Uploaded Python 3

File details

Details for the file profy_filter-0.1.0a1.tar.gz.

File metadata

  • Download URL: profy_filter-0.1.0a1.tar.gz
  • Upload date:
  • Size: 42.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for profy_filter-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 da7ac7be395bc016be4a87596bbeeb834a89a0ba8bcd5e6ecb2d775bbc283e17
MD5 674c353b9983c76e1e1aeb6fa6dffd04
BLAKE2b-256 55b55ad3faa0212b6d8454933140cc858cb80b9ae87df71826da7620dd8ef550

See more details on using hashes here.

Provenance

The following attestation bundles were made for profy_filter-0.1.0a1.tar.gz:

Publisher: release.yml on mantleCurve/profy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file profy_filter-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: profy_filter-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 37.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for profy_filter-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 b097c3b2bfe44a2db9274d2a28adf54fc26bc1fcd7a3ee70aa3ddbd2b0bf9812
MD5 50610b79d6fb8bb5fc7318ab67154592
BLAKE2b-256 ea95f9fc48e55a2cd9dcdef34dbf111735a8eb509d36f0280439bf2febd318ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for profy_filter-0.1.0a1-py3-none-any.whl:

Publisher: release.yml on mantleCurve/profy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page