Что такое хорошая библиотека фильтров ненормативной лексики Python? [закрыто]

Как и https://stackoverflow.com/questions/1521646/best-profanity-filter , но для Python - и я ищу библиотеки, которые могу запустить и контролировать себя локально, в отличие от веб-сервисов.

(И хотя всегда приятно услышать ваши принципиальные возражения против фильтрации ненормативной лексики, я их здесь специально не ищу. Я знаю, что фильтрация ненормативной лексики не подхватит каждая обидная вещь, о которой говорят, я знаю, что ругаться, по большому счету, не особенно большая проблема. Я знаю, что вам нужен человеческий вклад для решения вопросов контента. Я просто хотел бы найти хорошую библиотеку и посмотреть, как я могу ее использовать.)

32
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

Я не нашел ни одной библиотеки ненормативной лексики Python, поэтому сделал ее сам.

Параметры


список фильтров

Список регулярных выражений, соответствующих запрещенному слову. Не используйте \ b , он будет вставлен в зависимости от inside_words .

Пример: ['bad', 'un \ w +']

ignore_case

По умолчанию: True

Не требует пояснений.

replacements

По умолчанию: «$ @% - ?!»

Строка с символами, из которых будут случайным образом сгенерированы строки замены.

Примеры: «% & $ ?!» или «-» и т. Д.

завершено

По умолчанию: Истина

Контролирует, все ли строка будет заменена или если первый и последний символы будут сохранены.

inside_words

По умолчанию: False

Управляет поиском слов внутри других слов. Отключение этого

источника модуля


(примеры в конце)

"""
Module that provides a class that filters profanities

"""

__author__ = "leoluk"
__version__ = '0.0.1'

import random
import re

class ProfanitiesFilter(object):
    def __init__(self, filterlist, ignore_case=True, replacements="$@%-?!", 
                 complete=True, inside_words=False):
        """
        Inits the profanity filter.

        filterlist -- a list of regular expressions that
        matches words that are forbidden
        ignore_case -- ignore capitalization
        replacements -- string with characters to replace the forbidden word
        complete -- completely remove the word or keep the first and last char?
        inside_words -- search inside other words?

        """

        self.badwords = filterlist
        self.ignore_case = ignore_case
        self.replacements = replacements
        self.complete = complete
        self.inside_words = inside_words

    def _make_clean_word(self, length):
        """
        Generates a random replacement string of a given length
        using the chars in self.replacements.

        """
        return ''.join([random.choice(self.replacements) for i in
                  range(length)])

    def __replacer(self, match):
        value = match.group()
        if self.complete:
            return self._make_clean_word(len(value))
        else:
            return value[0]+self._make_clean_word(len(value)-2)+value[-1]

    def clean(self, text):
        """Cleans a string from profanity."""

        regexp_insidewords = {
            True: r'(%s)',
            False: r'\b(%s)\b',
            }

        regexp = (regexp_insidewords[self.inside_words] % 
                  '|'.join(self.badwords))

        r = re.compile(regexp, re.IGNORECASE if self.ignore_case else 0)

        return r.sub(self.__replacer, text)


if __name__ == '__main__':

    f = ProfanitiesFilter(['bad', 'un\w+'], replacements="-")    
    example = "I am doing bad ungood badlike things."

    print f.clean(example)
    # Returns "I am doing --- ------ badlike things."

    f.inside_words = True    
    print f.clean(example)
    # Returns "I am doing --- ------ ---like things."

    f.complete = False    
    print f.clean(example)
    # Returns "I am doing b-d u----d b-dlike things."
41
ответ дан 27 November 2019 в 20:21
поделиться

Ненормативная лексика? Что это за хрень? ; -)

Пройдет еще пара лет, прежде чем компьютер действительно сможет распознавать ругань и ругань, и я искренне надеюсь, что к тому времени люди поймут, что ненормативная лексика является гуманной, а не «опасной».

Вместо глупого фильтра используйте умного модератора-человека, который может уравновесить тон обсуждения соответствующим образом. Модератор, который может обнаруживать насилие вроде:

«Если бы вы были моим мужем, я бы отравил ваш чай». - «Если бы ты была моей женой, я бы выпил».

(это было от Уинстона Черчилля, между прочим.)

1
ответ дан 27 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: