defmodule Woolly.Utils.Profanity do @moduledoc """ A module for analyzing, removing and replacing profanity within a tokenized list of words. """ @doc """ Removes stopwords from a list of words. # Parameters - sent: A tokenized list of words. - lang: An atom representing a language iso 639-1 code. """ def remove_profanity(sent, lang \\ :en) do profanity = fetch_profanity(lang) sent |> Enum.reject(fn(x) -> x in profanity end) end @doc """ Replaces profanity within a tokenized list of words. # Parameters - sent: A tokenized list of words. - replacer: The String to replace the offending word. - lang: An atom representing a language iso 639-1 code. """ def replace_profanity(sent, replacer \\ "", lang \\ :en) do profanity = fetch_profanity(lang) sent |> Enum.map(fn(x) -> if Enum.member?(profanity, x) do replacer else x end end) end @doc """ The list_profanity function lists all of the profanity for a specified language. ## Parameters - lang: An atom representing a language iso 639-1 code. """ def list_profanity(lang \\ :en) do lang |> fetch_profanity end defp fetch_profanity(lang) do folder_path = Application.app_dir(:woolly, "priv/corpora/profanity") file_path = Atom.to_string(lang) <> ".profanity" path = Path.absname(file_path, folder_path) {:ok, profanity} = File.read(path) Regex.split(~r/\n/, profanity) end end