#filter #word #string #censor

no-std word_filter

A Word Filter for filtering text

17 releases (7 breaking)

0.8.1 Aug 29, 2021
0.7.0 Aug 1, 2021
0.6.0 Jun 23, 2021
0.1.8 Mar 8, 2021

#1547 in Text processing

Download history 84/week @ 2024-07-20 86/week @ 2024-07-27 48/week @ 2024-08-03 58/week @ 2024-08-10 67/week @ 2024-08-17 46/week @ 2024-08-24 19/week @ 2024-08-31 39/week @ 2024-09-07 26/week @ 2024-09-14 34/week @ 2024-09-21 61/week @ 2024-09-28 40/week @ 2024-10-05 66/week @ 2024-10-12 103/week @ 2024-10-19 115/week @ 2024-10-26 78/week @ 2024-11-02

365 downloads per month
Used in word_filter_codegen

MIT/Apache

99KB
1.5K SLoC

word_filter

GitHub Workflow Status codecov.io crates.io docs.rs MSRV License

A Word Filter for filtering text.

A Word Filter is a system for identifying and censoring specific words or phrases in strings. Common usage includes censoring vulgar or profane language and preventing spam or vandelism in user-provided content.

The Word Filter implementation provided here allows for advanced filtering functionality, including:

  • Finding and censoring filtered words.
  • Ignoring words that are considered "exceptions".
  • Allowing specification of "aliases", i.e. strings that can replace other strings (for example, an alias could be created to replace the letter "a" with the character "@").
  • Ignoring specified separators (such as spaces or other characters) between letters of filtered words.

A Word Filter is useful for checking and censoring user-generated text in chat applications, online games, and many other contexts.

Usage

The most common usage for this crate is to generate a WordFilter at compile time using a build script using the codegen module. See the following simple example and the documentation for further details.

Example

For example, a simple WordFilter can be generated by the following.

First, add the word_filter crate to both the Cargo.toml [dependencies] and [build-dependencies] lists.

[dependencies]
word_filter = "0.7.0"

[build-dependencies]
word_filter = "0.7.0"

Next, generate the WordFilter in the build.rs file.

use std::{
    env,
    fs::File,
    io::{BufWriter, Write},
    path::Path,
};
use word_filter::codegen::{Visibility, WordFilterGenerator};

fn main() {
    let path = Path::new(&env::var("OUT_DIR").unwrap()).join("codegen.rs");
    let mut file = BufWriter::new(File::create(&path).unwrap());

    writeln!(
        &mut file,
        "{}",
        WordFilterGenerator::new()
            .visibility(Visibility::Pub)
            .word("foo")
            .generate("FILTER")
        );
}

And finally, include the generated code in the lib.rs file.

include!(concat!(env!("OUT_DIR"), "/codegen.rs"));

assert!(FILTER.censor("Should censor foo."), "Should censor ***.");

Minimum Supported Rust Version

This crate is guaranteed to compile on stable rustc 1.51.0 and up.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1.5MB
~26K SLoC