06.06.2007, 22:26 | #11 | |
Специалист
Регистрация: 10.04.2007
Сообщений: 179
Вес репутации: 211
|
Цитата:
Код:
<?php function no_doubles($text,$max=2) { $doubles = array(); foreach (explode(' ', $text) as $word) { if (empty($doubles[$word])) $doubles[$word] = 0; ++$doubles[$word]; if ($doubles[$word] == $max) return false; } return true; } $out = <<<HTML Приходить Петро до мамки і жаліється: -Мене Галя обіжає, гуляти зі мною не хоче. -Ану вдягайся, пішли до її батьків. Приходять. Мати: Ваша дочка не хоче гуляти із моїм Петрусем. Батьки: Той що з того. Мати: Петрику, знімай штани! Петро: Мамо, та не треба. Мати: знімай, кажу! Петро: та може не треба?! Мати: та знімай вже, гадська ти дитина! Петро слухняно знімає штани. Батьки: Ого!!! Мати: От і я кажу "ого", а Галя Ваша - балувана. HTML; echo no_doubles($out) ? 'Повторов нет.' : 'Повторы есть.'; ?> Сейчас для словоформ напишу. |
|
06.06.2007, 23:06 | #12 | |
Эксперт
Регистрация: 22.04.2007
Адрес: Sapelandia
Сообщений: 4,101
Вес репутации: 404
|
2den78ru и sEXEcutor:
Цитата:
|
|
06.06.2007, 23:47 | #13 |
Новичок
Регистрация: 13.05.2007
Сообщений: 15
Вес репутации: 0
|
2 sEXEcutor
Это понятно, вот только надо чтобы этот кусок кода поставили на стороне сапе. Иначе ссылки добавляться в базу будут, а отображаться - нет... Только место занимать будут... или опять же - удалять ручками... |
06.06.2007, 23:51 | #14 |
Специалист
Регистрация: 10.04.2007
Сообщений: 179
Вес репутации: 211
|
Собственно, вот:
Код:
<?php function has_doubles($text) { $maxdbl = 2; // максимальное количество повторов $wordsize = 5; // минимальная длина слова/слога, дубликаты которой ищутся $size = strlen($text) - ($wordsize - 1); for ($i=0; $i<$size; ++$i) { if (substr_count($text,substr($text,$i,$wordsize)) > $maxdbl) return true; } return false; } $out = "деревообрабатывающее предприятие,ландышь , лес, дерево.природа.дерево. станки"; echo has_doubles($out) ? 'Есть более 2-х повторов.' : 'Нет более 2-х повторов.'; ?> Поиск ведется без регулярных выражений, потери в скорости минимальны. Alex_58, так это и есть руководство к действию для Сапе :wink: |
07.06.2007, 00:24 | #15 |
Погулять вышел
Регистрация: 15.05.2007
Адрес: С-Пб! О/ВМ 50/50
Сообщений: 1,921
Вес репутации: 316
|
Эт называется - Не будите спящего програмера :)
Вообще то саповцы, как обычно, с шИротой размаха, имели ввиду под сложностью внедрение алгоритма семантики и грамматики + пунктуации. Как раз по их амбициям :) И это действительно архи стожно! Даж гуглу в полной мере реализавать это не удалось. Так, что лишний раз респект, но нам бы попроще чего.. хотя бы на откровенный бред, так что простенькое что-то типа предложеного выше вполне бы, ну для начала что ли :). |
07.06.2007, 00:49 | #16 | |
Banned
Регистрация: 17.04.2007
Адрес: Москва
Сообщений: 466
Вес репутации: 0
|
Цитата:
Код:
<?php function has_doubles($text) { $maxdbl = 2; // максимальное количество повторов $wordsize = 5; // минимальная длина слова/слога, дубликаты которой ищутся $size = strlen($text) - ($wordsize - 1); for ($i=0; $i<$size; ++$i) { if (substr_count($text,substr($text,$i,$wordsize)) > $maxdbl) return true; } return false; } $out = "порно Порно порно"; echo has_doubles($out) ? 'Есть более 2-х повторов.' : 'Нет более 2-х повторов.'; ?> |
|
07.06.2007, 00:57 | #18 | |
Специалист
Регистрация: 10.04.2007
Сообщений: 179
Вес репутации: 211
|
Цитата:
Код:
<?php function has_doubles($text) { $maxdbl = 2; // максимальное количество повторов $wordsize = 5; // минимальная длина слова/слога, дубликаты которой ищутся // setlocale(LC_ALL, 'ru_RU.CP1251'); // можно попробовать, если версия PHP с неработающим strtolower $text = strtolower($text); $size = strlen($text) - ($wordsize - 1); for ($i=0; $i<$size; ++$i) { $line = substr($text,$i,$wordsize); if (!strstr($line, ' ') AND substr_count($text,$line) > $maxdbl) return true; } return false; } $out = "порно Порно порно"; echo has_doubles($out) ? 'Есть более 2-х повторов.' : 'Нет более 2-х повторов.'; ?> |
|
07.06.2007, 01:25 | #19 | |
Banned
Регистрация: 17.04.2007
Адрес: Москва
Сообщений: 466
Вес репутации: 0
|
Цитата:
А я делал по другому. Этот кусок убирает повторы больше одного раза, но без учета морфологии. Помещается исключительно ради идеи. Код:
function foo($title) { $title_arr = explode ( ' ', $title ); // строчку в массив foreach ($title_arr as $string){ // ежели слово уже в массиве - пропустим if (!@in_array(strtolower($string), $temp_arr)) {@$temp_arr[] = strtolower($string); @$temp_itog[] = $string;} } return implode ( ' ', @$temp_itog); } То есть из "Порно такое, поРно сякое, хрен знает какое порНо" получится "Порно такое, сякое, хрен знает какое" - даже осмысленно. :) Можно б написать для клиентской стороны модификацию, только саперам вряд ли понравится манипуляции с чужими ссылками. Если б удалось их уболтать на разрешение резать больше 2-х повторов слов в ссылке у себя на сайте, было б просто шоколадно. |
|
07.06.2007, 23:13 | #20 |
Эксперт
Регистрация: 22.04.2007
Адрес: Sapelandia
Сообщений: 4,101
Вес репутации: 404
|
столько сегодня отстрелила криворуких, жуть! действительно корректных текстов - один на сотню в лучшем случае. да, при таком количестве кривых текстов действительно нужно несколько "степеней защиты", кроме "правил", о которых прошу, хорошо бы конечно не позволить дубли плодить, так что поддерживаю всеми лапами!
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите помогите вставить код в ShopScript | Cat_N | Вопросы по работе системы | 3 | 22.01.2010 14:35 |
Часовой пояс GMT +3, время: 08:15.