Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отфильтровать маты и нецензурные слова во входном тексте? / 25 сообщений из 27, страница 1 из 2
17.04.2012, 20:32:38
    #37757986
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Всем привет!

Пишем веб-портал. Там есть комментарии пользователей. Так вот, пользователи могут писать что угодно, в том числе маты.
Хотим добавить в алгоритм добавления комментария в базу анализ этого самого комментария на предмет наличия нецензурных слов с заменой частей этих самых нецензурных слов звездочками.

Как это лучше всего сделать? Возможно, есть готовая база нецензурных слов? Но как тогда быть со словоформами, такими как "поеб**ь", к примеру? Все словоформы есть в базе? Если нет, может, где-то есть готовая библиотека или класс у кого-нить, который правильно анализирует входящий текст (или слово), чтобы не отфильтровывать нормальные слова, такие как "застрахуй", "дебет" и т.д.?
...
Рейтинг: 0 / 0
17.04.2012, 20:44:15
    #37758000
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Есть достаточно простой подход.
1 - убрать незначащие символы из текста
2 - найти все подозрительные корни
3 - проверить на ложные срабатывания
4 - отправить письмо модератору

с английским, конечно, попроще.
...
Рейтинг: 0 / 0
17.04.2012, 20:51:28
    #37758012
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Существуют языки аналитические и синтетические . Русский язык относится к последним. Короче, нет такого алгоритма, чтобы мат не вставить. Это только в аналитических, типа английского можно.
...
Рейтинг: 0 / 0
18.04.2012, 01:46:02
    #37758259
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Blazkowicz1 - убрать незначащие символы из текста
2 - найти все подозрительные корни
3 - проверить на ложные срабатывания
4 - отправить письмо модератору
Хочется на первых порах обойтись без модератора.
Понятно, что от всех матов не избавиться без модератора. При этом, мне кажется, процентов 90 отфильтровать можно.
Есть ли готовая библиотека для этого? И есть ли готовая база таких слов?

ShSergeСуществуют языки аналитические и синтетические. Русский язык относится к последним. Короче, нет такого алгоритма, чтобы мат не вставить. Это только в аналитических, типа английского можно.
Да, но минимизировать можно, поэтому и прошу помочь чем-то готовым, чтобы не писать с нуля типичную функциональность... Уверен, есть готовые решения
...
Рейтинг: 0 / 0
18.04.2012, 02:41:03
    #37758290
пролетевший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Vetal,
Можно попробовать примитивный Баесовский анализ:
- для начала вручную отмечать посты с матом и без, для набора обучающих данных. Ну или найти готовое, например насобирать из интернета матерных текстов и нейтральных.
- для обеих последовательностей рассчитать вероятность по парам или тройкам слов, например "еп твою мать" добавит по единичке к "eп твою" и "твою мать" .
- каждый пост разбивается на пары или тройки слов, и по ним через формулу баеса считается вероятность мат/не мат. Что больше, то и будет признаком.
- Для упрощения, вероятность считается просто как произведение вероятностей для всех пар ( еще точнее, сумма логарифмов во избежание слишком малых чисел ). чтобы не получать нулевую вероятность на незнакомых словах, используется лапласовское дополнение.
Даже на несколко сотен обучающих предложений можно получить 70 % точности, чем больше база тем лучше будет работать.
Если с английским нормально, можно погуглить на Naive Bayes Sentiment Analyses на предмет кода. Или послушать лекции отсюда
...
Рейтинг: 0 / 0
18.04.2012, 03:03:15
    #37758293
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
пролетевшийМожно попробовать примитивный Баесовский анализ
Я бы с удовольствием занялся такой интересной задачей, при этом, к сожалению, не могу себе этого позволить.
Неужели нет готовых модулей, классов, решений? И готовой базы слов?
...
Рейтинг: 0 / 0
18.04.2012, 03:22:29
    #37758297
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Vetal,

Какая база? Там слов-то, кот наплакал...
...
Рейтинг: 0 / 0
18.04.2012, 03:25:11
    #37758300
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Relic HunterКакая база? Там слов-то, кот наплакал...
Да ну? Велик и могуч... :) У меня сосед точно больше сотни знает :)
...
Рейтинг: 0 / 0
18.04.2012, 03:28:57
    #37758302
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
VetalRelic HunterКакая база? Там слов-то, кот наплакал...
Да ну? Велик и могуч... :) У меня сосед точно больше сотни знает :)Корневых слов штуки 3, 4 не больше. А дальше regexp-ом полируем их производные.
...
Рейтинг: 0 / 0
18.04.2012, 08:21:16
    #37758366
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Этак можно стать специалистом по русскому мату )))
...
Рейтинг: 0 / 0
18.04.2012, 11:39:02
    #37758719
пролетевший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
VetalЯ бы с удовольствием занялся такой интересной задачей, при этом, к сожалению, не могу себе этого позволить.
Собственно кодирования там пару десятков строк и часа 3 работы... вот только теорию знать надо, хотя бы статистику и теорию вероятности.
Неужели нет готовых модулей, классов, решений? И готовой базы слов? google.com . Не в смысле что искать в гугле, а что оно там "под капотом". Яндекс тоже очень активно балуется. Но почему то делиться не хотят, правда гугл и опубликовал свою базу для английских словосочетаний.
Есть проекты вроде nltk , и данных до одури, но все для английского и нескольких европейских языков.
...
Рейтинг: 0 / 0
23.04.2012, 17:04:35
    #37766677
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Готовую библиотеку русского мата подавай. А самому "поеб**ь" не охота с этим? :):)

На пример так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public static String replMat(String text) {
        String html = text;
        
        html = html.replace("<", "&lt;");
        html = html.replace(">", "&gt;");

        Map<String,String> myMap = new HashMap<String , String>();

        myMap.put("\\s*х.й\\s*", "цензура");
...
...
...

        for (Map.Entry entry: myMap.entrySet()) {
            html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
        }

        return html;
    }
...
Рейтинг: 0 / 0
24.04.2012, 01:42:56
    #37767302
Vetal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
jabГотовую библиотеку русского мата подавай. А самому "поеб**ь" не охота с этим? :):)

На пример так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public static String replMat(String text) {
        String html = text;
        
        html = html.replace("<", "&lt;");
        html = html.replace(">", "&gt;");

        Map<String,String> myMap = new HashMap<String , String>();

        myMap.put("\\s*х.й\\s*", "цензура");
...
...
...

        for (Map.Entry entry: myMap.entrySet()) {
            html = html.replaceAll(entry.getKey().toString(), entry.getValue().toString());
        }

        return html;
    }


Ага, и все словоформы забить. По всем словам. Зачем это делать, если это типовая задача, которую делали уже немерянное множество людей...
...
Рейтинг: 0 / 0
26.04.2012, 17:40:33
    #37772860
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
У каждого свои единици измерения нецензурщины. Кому достаточно и пару слов закрыть, а кому и пол словаря покажется мало.
Поищи в интернете сборник русского мата и загони его в хэштейбл. Делов то.
...
Рейтинг: 0 / 0
26.04.2012, 17:43:02
    #37772863
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
jabУ каждого свои единици измерения нецензурщины. Кому достаточно и пару слов закрыть, а кому и пол словаря покажется мало. Поищи в интернете сборник русского мата и загони его в хэштейбл. Делов то.
Слова теоретика? На любом популярном форуме есть куча желающих такие простые ограничения обойти. Сравнение по словарю обходится на раз.
...
Рейтинг: 0 / 0
26.04.2012, 21:13:24
    #37773070
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
BlazkowiczjabУ каждого свои единици измерения нецензурщины. Кому достаточно и пару слов закрыть, а кому и пол словаря покажется мало. Поищи в интернете сборник русского мата и загони его в хэштейбл. Делов то.
Слова теоретика? На любом популярном форуме есть куча желающих такие простые ограничения обойти. Сравнение по словарю обходится на раз.
Короче, в русском - никак. Например, взять слово "омудень". Ну и?
...
Рейтинг: 0 / 0
26.04.2012, 21:22:32
    #37773074
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
ПС. Вспоминается частушка про дивную реку Неман.
...
Рейтинг: 0 / 0
17.02.2013, 01:28:46
    #38154334
Novel Novel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Vetal, поделитесь как Вы решили данный вопрос? Столкнулся с данной проблемой и удивился, что не нашел никакой базы нецензурных выражений О_о
Был бы очень признателен за ответ!
...
Рейтинг: 0 / 0
17.02.2013, 13:20:31
    #38154533
АлексейС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
пролетевшийVetal,
Можно попробовать примитивный Баесовский анализ:
- для начала вручную отмечать посты с матом и без, для набора обучающих данных. Ну или найти готовое, например насобирать из интернета матерных текстов и нейтральных.
- для обеих последовательностей рассчитать вероятность по парам или тройкам слов, например "еп твою мать" добавит по единичке к "eп твою" и "твою мать" .
- каждый пост разбивается на пары или тройки слов, и по ним через формулу баеса считается вероятность мат/не мат. Что больше, то и будет признаком.
- Для упрощения, вероятность считается просто как произведение вероятностей для всех пар ( еще точнее, сумма логарифмов во избежание слишком малых чисел ). чтобы не получать нулевую вероятность на незнакомых словах, используется лапласовское дополнение.
Даже на несколко сотен обучающих предложений можно получить 70 % точности, чем больше база тем лучше будет работать.
Если с английским нормально, можно погуглить на Naive Bayes Sentiment Analyses на предмет кода. Или послушать лекции отсюда

С задачей ТС и таким решением надо бы осторожнее, имхо. Классификатор поможет отделить потенциально негативные записи от позитивных и нейтральных, но конкретно мат он выделить не сможет. Для улучшения результата придётся выделять каждое матерное предложение вручную. Но и то будет очень много шума - характерных для негативных постов слов. Например: "Не очень умная статья, б**ть" и "е**я статья". "Статья" - попадёт в фильтр, так как будет часто повторяться во всех негативных постах. А sentiment analyses - вообще тема очень сложная. Чтобы уменьшить количество шума нужно дополнительно к негативному классификатору добавить позитивный, тогда слово "статья" - выпадет.

Думаю, что тут поможет подобранный вручную словарь из пары десятков матерных слов (думаю каждый знает хотя бы 10))) ). Даже учитывая всю мощь русского языка, вырезание по корню слов полученного словаря - отсечёт очень многие варианты. Ну и попробовать стемминг слов, это лишним не будет. У Lucene есть стеммеры для многих языков, в том числе для русского. (см. RussianStemmer)

А если всё-таки захочется писать простой классификатор-определятор - лично мне больше понравился delta tf-idf + n-граммы + стемминг слов. Но, опять же, не думаю, что он с матом хорошо совладает... хороший вопросец, кстати...
...
Рейтинг: 0 / 0
17.02.2013, 14:04:14
    #38154568
АлексейС
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
АлексейС,

Что-то я туплю, какой-то сумбур написал Х_Х Сорри.

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

Поэтому самое простое решение скорее всего будет лучше...
set[ {корень матного слова, например: "?б", "муд*"} и {stemming матных слов, включающий приставки и суффиксы, например: "на*б"} ], ну и входной текст разбиваем на стеммы (RussianStemmer), пытаемся найти ближайшее совпадение в множестве слов. А пропущенные слова в словарь добавляем вручную. N-граммы ("еп твою") - тут будут лишним усложнением, так как в большинстве случаев соблюдается предположение, что одно матное слово не зависит от соседних.
...
Рейтинг: 0 / 0
17.02.2013, 18:23:12
    #38154748
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Поступайте как Абу, и будет у вас розочканя
...
Рейтинг: 0 / 0
17.02.2013, 19:24:53
    #38154788
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Vetal,

Для собранного(вручную,или в процессе опытной эксплуатации) словаря, применить морфологический анализ. Реализацию МА можно найти в нете 100%
...
Рейтинг: 0 / 0
18.02.2013, 12:37:25
    #38155456
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Извините, не смог пройти мимо.

Штирлиц напоролся на сук...
Код: plaintext
                         народное творчество
...
Рейтинг: 0 / 0
18.02.2013, 13:07:09
    #38155513
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
В понедельник посмеялся - удивил коллег ;)))))
...
Рейтинг: 0 / 0
19.02.2013, 01:02:00
    #38156627
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отфильтровать маты и нецензурные слова во входном тексте?
Стишки Баркова можно загрузить в анализ.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как отфильтровать маты и нецензурные слова во входном тексте? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]