![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Делаю форум для сайта http://www.inoSMI.Ru . Сайт посвящен переводам видной западной прессы о России - даёт представление о мнении элитной западной прессы (разделяемой, как мне кажется, очень многими) о нас.
Там порой такие статьи, что и я без мата не прокомментирую при всём желании - так что фильтр русского мата просто необходим. К тому же, как мне рассказывал админ предыдущего форума на этом сайте, желание матернуться у посетителей настолько сильно, что они изобретают хитрые методы, типа замены в матерных словах русских на латинские буквы, благо часть из них пишутся одинаково, или даже просто буквы с соответствующим русскому звучанием вставляются взамен русских внутрь слова. Нужен фильтр, который бы мог заменять мат на "<слово удалено цензурой>" или что-то в этом роде - крайне желательно, что бы он был написан на Java... Если не найду на Java, задам вопрос в более общий раздел форума - тогда, видимо, придётся заворачивать в веб-сервис или что-то наподобии этого... -------------------- |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну вот простой вариант
Все дело в том чтобы загнать побольше слов, во всех возможных сочетаниях. -------------------- |
|||
|
||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Domestic Cat
Спасибо, канешь, но я думаю, нужен намного более сложный алгоритм - хотя бы из-за различных окончаний, которые качественно отличают русский язык от английского, и главное - именно из-за хитрости несдержанного народа, о которой я написал выше... Поидее, мне нужно фильтровать не столько по написанию, сколько по звучанию - поэтому нужна функция на подобии запроса LIKE БД... Но специфическая... -------------------- |
|||
|
||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Дык регекспы покруче LIKE будут ![]()
Ну так на любом языке можно сделать : fuck f/\ck f*u*c*k Fuk ..... ad infinitum В-первых тебе окончания слов не нужны, достаточно корень вырезать, а это сокращает словарь. Во-вторых можно подумать как эти слова задать регекспами: http://java.sun.com/docs/books/tutorial/ex...egex/index.html то есть не задавать целиком слова / корни. -------------------- |
||||
|
|||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Domestic Cat
RegExp`ы я знаю неплохо, хотя за ссылку спасибо всёравно :-) Хорошо, допустим, можно сделать действительно на них (RegExp`ах) - идея хорошая, сгодится. Тогда нужен их список для всех слов русского мата... Где-нибудь что-то подобное есть? Т.е. в цикле перебераем массив регэкспов, заменяя слова в тексте по нему - и на выходе получаем "очищенный" текст... Да, тогда всё упирается в написание такого массива - первая версия может быть написана за день-два достаточно муторного кропотливого труда, остальное доделывать по факту обнаружения ошибок... Ещё, менее "дорогие" по времяни варианты? Неужели никто не сталкивался до меня с такой проблемой? Не вверю... ![]() -------------------- |
|||
|
||||
Sun |
|
|||
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 8 Всего: 48 |
Насколько я знаю нормального решения для фильтра матов нет. Если искать по корню, то такие слова как "гребля", "сабля" и т.д. сильно пострадают.
-------------------- Account removed |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
![]() ![]() ![]() Добавлено @ 14:52 http://www.relib.com/forums/topic.asp?id=810403 -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Domestic Cat, и по моему ИМХО тоже
![]() Вот кое что. Движек на tcl'e + словарь ![]() http://irc.tm-net.ru/soft/eggdrop/scripts/antimat.tar.bz2 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
ИМХО любой фильтр можно обойти, но с другой стороны если админ не спит, то второй раз то же фокус не пройдет. Так что основной поток мата можно отсечь.
Можно попробовать накидать примерный алгоритм: 1) разбиваешь текст на токены 2) ищешь все слова состоящие из смешанных букв, и в них заменяешь все латинские буквы на аналогичные русские буквы (как то икс на ха), и наоборот если требуется фильтр английского мата. Соответственно для каждого токена может быть несколько вариантов. Так же можно заменять псевдографику. 3) переводишь транслит 4) а теперь просто проходишься по списку токенов обычным фильтром Реализовывать это конечно будет не просто, но после реализации алгоритма, основная проблема будет только в обучении фильтра, но в этом тебе форумчане помогут ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Давайте разработаем антимат на яве?
У меня тоже мысли имеются и кое какой опыт ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Поделись. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
В принципе кластерингом документов в последнее время занимаюсь с использованием онтологий. ну и wordprocessings всякие тоже туда принадлежат. Немного не то, но вполне применимо.
|
|||
|
||||
Се ля ви |
|
||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Давайте вместе, канешь :-) -------------------- |
||||
|
|||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
А что? Неплохая идея... ![]() --------------------
|
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Предлагаю во первых открыть для проекта новую тему в "наших проектах". Кто откроет, тот и будет рулить
![]() Туда и идеи и релизы кладывать. На яве будет перспективно-кроссплаттформенно. Я вообще удивляюсь, что ничего серьёзного в этом направлении нет.... |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
А прикол в том что каждый третий захочет помочь нашей системе со словарным запасом...
![]() --------------------
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
![]() ![]() ![]() |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
ИМХО, не следует пока... Пусть просто в топике поживет, а то ещё один мертвый раздел делать... --------------------
|
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Говорю же, если кто серьёзно решит. Просто помогать я смогу, а ещё один проект тянуть - нет.
Хотя ужасть как хочется ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Давайте пока попробуем накидать общую концепцию, а там посмотрим как и на чем реализовывать. Как вам мое предложени по поводу схемы анализа. У меня пока нет полной ясности по поводу не регистрозависимого анализа, а в остальном вроде вопросов у меня нет.
sergej.z Расскажи поподробнее про "кластерингм документов в последнее время занимаюсь с использованием онтологий. ну и wordprocessings всякие тоже туда принадлежат". А то я только онтологию знаю и то как раздел философии ![]() P.S. Поскольку тему начал Се ля ви, предалгю его и назначить крайним за все это дело ![]()
![]() ![]() ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
LSD
ИМХО, должен быть словарь матерных слов (бл*) и словарь защищеных слов (гребля, сабля и т.д.). Далее, один из вариантов: определяем последовательность из буквы которые находятся недалеко друг от друга (f_u_c_k), проверяем - соответствует ли словарю защищеных слов и если нет - ... ![]() Естественно всё это заоптимизируется и т.д и т.п.. Кстати: предлагаю модераторам снять ограничения на мат в этом топике ![]() Это сообщение отредактировал(а) chipset - 22.1.2005, 15:15 --------------------
|
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
![]() ![]()
Как Альтернатива можно пробелы сразу удалять, а потом искать подозрительные корни. Найдя восстанавливать слово, проверять в словаре. |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: нет Всего: 165 |
sergej.z, а где в твоем алгоритме средства для распознования слов типа: "f^u_c^k"?
Добавлено @ 17:05 Вижу.. --------------------
|
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Там много рассказывать ![]() Берётся онтология - дерево или граф. Как повезёт. Скорее на хватит просто таксономии, потому что онтологические связи я в алгоритме(пока) не учитываю.
Это очень грубое разделение. В ральной жизни я пытаюс кластеровать мат. и физ. документы. Каждый узел рассматривается ка концепт. для каждого документа создаётся вектор из концептов. v(i)= |поездки|перемещение|проживание|самлёт|поезд|отель|квартира| i - порядковый номер документа Теперь мы пробегаем по документам и изменяем значение компоненты вектора, если находим в тексте подходящее словосочетание. Например "Гостинница Россия" -> v(i)[отель]++ "Ту 154" -> v(i)[самлёт]++ итд. Затем мы редуцируем количество компонентов в векторах хитрым алгоритмом коллег из Karlsruhe. Таким образом сокращаем кол-во измерений в нашем документном пространстве. То, что получилось кластеруем каким нибудь K-means'ом. Вот вкратце и всё ![]() Извиняюсь, но я многих терминов по русски не знаю, так что мог где нить чушь написать ![]() |
||||
|
|||||
Се ля ви |
|
||||||||||||||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Ок, давайте порулю я. :-) sergej.z Схема хорошая. Надо решить, на каких этапах всё делать регэкспами, а где можно и вручную(для быстроты)... Думаю, сначала можно всё сделать регэкспами, а потом какие-то этапы переписывать, оптимизируя. Итак, фазы: 1.
2.
3.
4.
5.
6.
7.
Думаю, это должен быть класс без конструктора и все его медоды должны быть статичными и более того - private`ными, кроме одного, который возвращает уже отфильтрованный текст. В качестве входного параметра можно ему передавать объект JavaBean с библиотекой регэкспов и, собственно, слово, на которое мы заменяем весь мат. JavaBean (не Enterprise, конечно) - в свою очередь может быть интерфейсом к файлу, к БД или вообще наполняться программой извне через setter`ы - это уже как usr`у будет удобней. Какие будут встречные предложения? Прежде всего - относительно того, на каких фазах мы пользуемся RegExp`ами... P.S. sergej.z вот только я не понял - что такое stammer?... Добавлено @ 17:40 Да, собственно, все его методы этого главного класса должны соответствовать фазам. :-) -------------------- |
||||||||||||||||
|
|||||||||||||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
stammer оставляет от слова лишь его корень.
обрезаются приставки и окончания. посмотрим действие на практике... RegExp можно применять в конце не стандартизированный текст. ИМХО в ручную лучше регулировать мелочи можно Добавлено @ 17:56 Надо еще функцию, которая возвращает процент мата в тексте. PS: Сейчас в голову пришло: Заменять мат можно на "Гав, гав" как у старика Хоттабыча ![]() ![]() ![]() |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Таким макаром мы исключим весь текс типа: nJIaksa.spb. На мой взгляд надо текст разбить на атомарные единицы: токены. А далее анализировать: если токен состоит из букв одного алфавита, то просто анализировать его, независимо от регистра. Если нет, то надо попробовать его транслитерировать (тут есть над чем поработать). Все возможные варианты транслитерации сохраняются, как возможные варианты толкования токена. А затем они анализируются по словарю. Так же надо анализировать возможные варианты когда сами токены не несут орицательной нагрузки, но вот их последовательность имеет негативный смысл:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
По этому в нижний регистр переводится в самом конце. До этого фильтруются знако и буквосочетания. Mы кстати мысленно при чтении делаем так же ![]() LSD На практике не знаю, можно ли будет такой анализатор реализовать. Особенно
Я просто боюсь, что такое не реализуется, потому что всем надоест проект до того, как будут интересные результаты. Т.е идею вижу, реализацию концепта - нет. |
||||
|
|||||
Се ля ви |
|
|||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
![]() Мне вот тут вдруг стало непонятно другое - ну перелопатили мы текст, всё вбили в нижний регистр, да ещё и пробелы убрали - отфильстровали мат - и что с этим месивом делать? Это ведь всё восстановить в нормальном виде ещё надо... Это сообщение отредактировал(а) Се ля ви - 23.1.2005, 01:01 -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
см. пункт 1
каждая буква в стандартизированном массиве соответстует индексу в настоящей мессаге. Его мы запоминаем. Это сделсть очень легко, если например вести параллельный массив. Добавлено @ 01:08 По индексам и находим нехорошие слова. |
|||
|
||||
lovermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 28.12.2004 Где: Прага Репутация: нет Всего: 8 |
С посещаемостью этого форума вопрос о том, чтобы новую систему потестить не встанет
![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
1. Парсим стринг по чарам. Берем 1 чар и сиздаем объект Pair содержащий char, int[] положения в исходной строке (если мы впоследствии переведем ya->я то нужно помнить две позиции а не одну) и булиновый флаг.
а. Пробелы выбрасываем сразу (то есть даже Пару под них не создаем), т.к. можно ведь написать f u c k и потом он ни под один регексп не подойдет. б. Выбрасываем все "очевидные" знаки пунктуации: ? , . в. Записываем все подряд в массивлист. г. При этом переводя в нижний регистр. 2. Нужны есессно свои методы поиска, т.к. регеспы при всем желании на массиве объектов не заработают. 3. Теперь ищем неочевидную гадость со знаками / | \ ^ * типа б/|я. Заменяем на нужные буквы. Незаменяемые символы выбрасываем. 4. Переводим весь инглиш в русский как в транслите. 5. Переводим 1234567890@$%& <> - например п1д0р Незаменяемые символы выбрасываем. 6. Имеем рашн текст, по которому ищем все известные нам корни если нашли, заменяем в Парах флаг на ТРУЕ. 7. Теперь проходим по массиву и для тех Пар у которых ТРУЕ берем индекс и заменяем символ в стринге по этому индексу на *. -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ну вот теперь регэкспом по plain'y и с помощью key выцепляем интервал слова козел В нормализованном он 0-4, следовательно в оригинале: key[0][0] - key[4][1]; == 0-8 |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ээээ .... че козлом ругаешься ?
![]() -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Domestic Cat Да ты что?
![]() ![]() ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Дык регесп на char[] не працюе ![]() -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ну ё-маё!
Это же только схема ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну хорошо, вот ты его нормализовал, выкинул все и пр. Потом регекспом ищещь и заменяешь что не нужно. Как регесп скажет тебе какие конкретно буквы он заменил и что нужно исправлять в исходной строке?
-------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Я добавил в самый низ
![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Аа, торможу.
Да это понятно, я ж про регексп - там есть методы start, end. -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Лана
![]() ![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Единственное что мне тут не нравится - нужно возиться с массивами. Придется
1. искать слово 2. брать его границы 3. смотреть в инт[][] 4. заменять Тогда как на Парах можно было бы, сделав метод поиска самим, избежать этого. -------------------- |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Вот кое что сделал, пока только убирает слова из словаря + знаками пунктуации / вайтспейсом ее не обдуришь. Словари задаются в текстовых файлах с соотв. названиями и окончаниями, задается также язык (русский/английский). Пока фильтруются только слова и выбрасывается пунктуация, а также затираются повторяющиеся буквы если они входят в состав матерного слова; нужно добавить транслит и символы типа /|, 4, 1, ...
Пример:
Присоединённый файл ( Кол-во скачиваний: 8 ) ![]() -------------------- |
|||
|
||||
LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Все, гребля не прошла ![]()
А вот bJIR пройдет ![]()
Надо ввести запрещенную последовательность токенов. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
Domestic Cat |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну так запишем слова типа "гребля" и "подстрахуй" в отдельный словарь и их трогать не будем.
Опять-таки, записываем в словарь j| = л ; правда с R не пройдет, но ведь все возможные истолкования в любом случае не уловишь, да и кому будет охота материться когда для этого нужно будет выдумывать малопонятные символы?
Я решил отбрасыванием вайтспейса. -------------------- |
||||||
|
|||||||
LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Тогда начнет прокатывать "гре
Еще как охота будет, это же такой азартный спорт ![]()
Конечно, но надо дать возможность администратору самому добавлять новые извороты пользователей в фильтр. Я считаю что важнее разработать нормальную, хорошо расширяемую систему анализа и фильтрации текста, а не пытаться предусмотреть сейчас все варианты. И не надо зацикливаться на русском и английском, есть и другие языки, это тоже надо учесть. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
Domestic Cat |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Ну тут уже надо учить программу понимать смысл предложения, а иначе не получится. Ведь можно тогда ругаться : греБЛЯ!!!
Ну это уже будет ерунда, особенно если убрать основное.
В аттачменте словари задаются в отдельных текстовых файлах - добавляй что хочешь.
Тут проблем нет, за секунду можно добавить. Единственное что требуется - словари.
А предложенный вариант - это не система фильтрации текста? 1. Переводим все в нижний регистр. 2. Выбрасываем "безопасные" символы типа . , и пробелы, из которых мат не составишь 3. Повторяющиеся буквы убираем (точнее, они сохраняются как children в предшествующей Pair, чтоб убрать слова типа CcccRRRAAAPP) 4 В зависимости от языка трансформируем часто применяемые обозначения/транслит в буквы 5. Заменяем слова из словаря на **** Без словарей тут не обойтись. Кроме того, все возможные варианты все равно не отловим. С каждой новой проверкой добавляются тормоза, потому нужно остановиться на отлавливании основного. -------------------- |
||||||||||
|
|||||||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Тормоза - финя.
Проверок можно разных сделать и несколько раз по тексту пробежаться. Почему бы непрогить несколько вариантов параллельно? LSD, Где твой алгоритм? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вот мои приблизительные наметки по поводу данного фильтра.
Критика приветствуется ![]() Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Как я понял суть в том чтобы была возможность подключать произвольные фильтры/токенайзеры.
1. Зачем нужны токенайзеры, я не понял. 2. Подключать фильтр - идея хорошая, если бы речь шла о фильтрации различных типов слов; например одинт фильтр - для мата, другой - для слов с сексуальной окраской, и т п. Опыт показывает что в основном нужен антиматовый фильтр. Потому фильтры-плагины идея конечно гут, но зачем она тут не представляю. Действие фильтров не обязательно складывается. Это если б один фильтр отдсекал слова "дурак" и "козел", а второй слово - "гад", то да. Но чтобы отловить мат нужно сначала как-то преобразовать исходный текст. Суть состоит в наиболлее оптимальном выборе алгоритма. Если же алгоритм разный то после действия одного фильтра действие другого практически равно 0. ------------ Единственный кто стянул мой код - ну как, есть замечания? -------------------- |
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ага, не компилируется ![]() Но это мои проблемы. Сейчас некогда решать...
Это будет видно. тем более, что я предлагаю использовать не последовательно, а параллельно. На вуходе массивы - keys как я описывал. Просто не один, а несколько. Потом решаем (чего нить придумаем), какие интервалы фильтровать. PS: Дело в том что наши концепты (мой, твой и LSD) практически друг другу не мешают, но дополняют ![]() |
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Т.к. нужна 1.5. Переделать в 1.4? -------------------- |
|||
|
||||
LSD |
|
||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Если нет веских причин использовать 1.5, то конечно лучше переделать. Ниже 1.4 имхо не стоит делать, т.к. там регекспов нет.
Пока попробуем довести до ума каждый свой вариант (у меня даже не все классы пока есть) а там решим.
В принципе на данный момент достаточно одного Tokeniser-а, просто правила разбики на токены могут быть разными, вот я и ввел его на всякий случай, в принципе его можно выкинуть.
Мне хотелеось реализовать более универсальную идею фильтрации, вот я и сделал это через плагины. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||||
|
|||||||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Да, будет лучше.
![]() ИМХО лучше умно в кучу собрать. |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Есть идеи как? Я пока не вижу как, хотя код Domestic Cat пока не смотрел. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Это должен рулевой решать. Там надо всё сравнивать искать пути. Короче работа
![]() |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
sergej.z, а там у тебя в подписи не мат ?
![]() Пока ишшо идея - нуна предосмотреть вариант козел. -------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
А что с ним? Такое препроцессор должен убивать. (В смысле тэги хавать) |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Дык если препроцессор не написать, кто есть их будет?
-------------------- |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Вот смотри, как на этой страничке текст отображается, так после препроцессора и должно быть.
Текст в таком виде всё равно в каком то месте можно вычитать. |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Хм. а инфа о стилях отдельных слов/параграфов где хранится?
-------------------- |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Вообще хорошо было бы определиться что писать и как писать. Нужна ли поддержка других языков, может на уровне плагинов, насколько серьезно нужно бороться с матом. Скажем мой код + перевод в транслит и дописание трансляции особых символов убьет мат на 99% при наличии словарей и незнании постящего. Если же он знает о фиче, то тут убрать мат невозможно. Все варианты перебрать не сможем. Можно отдельные буквы цвтом выделять, формировать большие буквы из символов, и пр.
-------------------- |
|||
|
||||
Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
||||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
![]() -------------------- |
|||
|
||||
Zandr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 433 Регистрация: 16.7.2004 Где: Новосибирск Репутация: 9 Всего: 13 |
Если что - это не я
![]() |
|||
|
||||
Се ля ви |
|
||||
![]() Java/SOAрхитектор ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2016 Регистрация: 5.6.2004 Где: place without tim e and space Репутация: 8 Всего: 127 |
Ещё ">" и "<" - что бы отсечь, например, слово ">|<опа"
Я вот тут подумал - ведь эти знаки можно использовать для создания больших букв в сочетании с концами строк, например: , И И вообще, с псевдо графикой можно огромедные буквы писать на десятки строк - их вообще не отловишь простыми алгоритмами... ![]() Придётся, наверное, на них действительно забить. По крайней мере пока - нужно просто определять соответствие позиций в разных строках и если символы псевдографики находятся над-под друг-другом, обрезать их сразу, иначе можно будет писать: \|/ /|\ опа, и т.д. - поэтому надо в парах отслеживать не только их непосредственный номер, но и номера в строке... Хотя я посовещался с бывшим админом - пока матершинники не такие догадливые, такого ещё не было, поэтому это пока вобщем-то ждёт... Это сообщение отредактировал(а) Се ля ви - 24.1.2005, 16:24 -------------------- |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Сперва следует реализовать пусть маленькую, но 100% рабочую часть. A потом уже расширять.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
У меня в процессе реализации возник вопрос: есть необходимость транслитерирования, но для буквы может быть несколько вариантов транслитерации. А если таких букв в слове несколько, то общее колиество вариантов транслитерации слова будет велико. Есть идеи как с этим бороться?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
стандартизировать текст ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Поясни. P.S. Где можно надыбать азбуку транслита? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Посмотри мой алгоритм в самом начале ![]()
Их куча, все разные. Добавлено @ 19:23 Вот наша: http://forum.vingrad.ru/index.php?act=ST&f...ndpost&p=221352 |
||||
|
|||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ты об этом? ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ну да
![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Danke sehr. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Bitte, bitte
![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Вот очередная версия, эта вроде работает
![]() Принцип следующий:
Это сообщение отредактировал(а) LSD - 12.2.2005, 21:55 Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Сории, но я когда запускаю, весь ДОС - экран какими то значками заполняется....
|
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Аналогично. Плюс я не пойму зачем рейтинг нужен
![]() -------------------- |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это потому, что при компиляции надо указать javac -encoding UTF-8. т.к. исходники именно в этой кодировке. Я выложил новую версию, ее можно просто запускать, она уже скомпилена. Файлы читаются и пишутся в родной кодировке ОС. В файле словаря слова нада разделять пробелами, табуляцией или переводом строки. На данный момент подерживаются следующие преобразования: транслитерация (по винградовскому словарю), замена одинаково пишущихся английских символов на русские, и неких сочетаний спецсимвлов /| = Л, удаление повторяющися букв блииин = блин, разбиение слова на отдельные слова по типу символов (строчные, заглавные, цифры и т.д.) МногоеМОЖНОсказатьОднимСловом = многое можно сказать одним словом. Пока это все кодом, но если будет развиваться дальше, то надо будет вынести в файлы настроек или БД.
Надо же как-то отделять плохие слова от хороших ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Я произвел некоторые доработки, теперь преобразование замены унифицированно и задается в виде XML, словарь теперь тоже задается в XML, добавлено преобразование позволяющее проводить суперпозицию других преобразований.
Теперь осталось напролнить словарь и потестировать на реальных примерах. Мне нужна помощь по наполнению словаря, т.к. для каждого слова нужны или все словоформы (предпочтительно) или выделить общую часть. Присоединённый файл ( Кол-во скачиваний: 52 ) ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
helloalleo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 31.7.2016 Репутация: нет Всего: нет |
Есть ли обновления этой темы?
|
|||
|
||||
tigraff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.9.2008 Репутация: нет Всего: нет |
посмотрите Snowball
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |