[Ищу] Скрипт проверки уникальности

Тема в разделе "SEO Скрипты", создана пользователем Tushkan, 4 авг 2009.

Статус темы:
Закрыта.
  1. Tushkan

    Tushkan

    Регистр.:
    9 апр 2007
    Сообщения:
    208
    Симпатии:
    61
    Собственно сабж...
    Давно в поиске..
    Инет перерыл... пусто...

    Нужен скрипт массовой проверки уникальности текстов (страниц сайта)
    В идиале на пхп...
     
  2. Fast3r

    Fast3r

    Регистр.:
    30 июн 2008
    Сообщения:
    329
    Симпатии:
    39
    скрипт praide.php смотрел? там не массово но чекает уник нормально, думаю тебе не составит труда потоковую проверку туда прикрутить
     
    Tushkan нравится это.
  3. Tushkan

    Tushkan

    Регистр.:
    9 апр 2007
    Сообщения:
    208
    Симпатии:
    61
    Хм...
    Если ты имел ввиду praide, софтовую тулузу, то не катит (аналогично advego plagiatus, DCFinder)...
    Конечно если к нему прикрутить AutoClickExtreme последней версии, то результата добиться можно... Но это всё же лишний гемор...

    Нужен именно скрипт замечательно ежли на php, сойдёт и аякс, перл...
    Многопотоковость, массовую проверку, прокси и остальное сам прикручу...

    Если реально есть на просторах инета praide.php, ткни плз носом, поиск по нуллу, яше, гуглю ни чего не даёт...

    Но тем не менее, копая в указанном тобой направлении :) , наткнулся на следующий скриптик


    PHP:
    <?php 
    /**
     * Скрипт проверки уникальности.
     * 
     * Разбивает введённый в него текст на куски по 10 слов, создаёт из них 10-словные запросы
     * для Yandex и Google, разбирает выдачу и формирует отчёт о частоте упоминания комбинаций
     * слов в интернете.
     * Перед началом использования этого скрипта рекомендуется ознакомиться с правилами Яндекса.
     * Автор скрипта не несёт ответственности за любой ущерб причинённый его неправильным использованием. 
     * 
     * @see http://rules.yandex.ru/termsofuse.xml
     * @author agronom
     * @version $Id$
     * 
     */
    ob_start();
    ?>
    <html>
    <head>
    <title>Проверка уникальности текста</title>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251">
    </head>
    <body>
    <h1>Проверка уникальности текста в интернете.</h1>
    <form method="post">
    <b>Текст для проверки </b>
    <small>(Скопируйте сюда текст веб-страницы)</small><b>:</b><br>
    <textarea name="query" cols="80" rows="5"></textarea><br>
    <input type="submit" value="Проверить">
    </form>
    <?php
    /**
     * Выбирает доменное имя
     * @param $a
     */
    function    handle_info($a){
            
    $a explode("\n"trim(strip_tags($a)));
            
    $a preg_replace("/^(www\.)?([\w\-\.]+):?([\d]+)?\/?([\s\S]*)?/i""$2"strtolower($a[0]));
            return 
    $a;
    }

    /**
     * Получает информацию о выдаче яндекса по запросу
     * 
     * @param string $query текст запроса без URL кодирования
     * @return array $a
     *         $a[0][1] - число найденных страниц
     *         $a[0][2] - число найденных сайтов
     *         $a[1]    - массив найденных доменов
     */
    function top_10($query) {
        
    $url "http://yandex.ru/yandsearch?text=".urlencode($query);
        
    $txt file_get_contents($url);
        
    //echo "Ответ Яндекса";
        //echo nl2br(htmlspecialchars(print_r($txt, true)));
        
    $brief get_brief($txt);
        if (!
    is_array($brief)) {
            return 
    false;
        }
        
    // Получаем список сайтов yandex top 10
        
    preg_match("/\<ol[\s\S]*?\>[\s\S]*?\<\/ol[\s\S]*?\>/"$txt$results);
        
    // Из списка ссылок делаем массив
        
    preg_match_all("/\<li[\s\S]*?\>[\s\S]*?\<div class=\"info\">([\s\S]*?)\<\/div\>[\s\S]*?\<\/li[\s\S]*?\>/"$results[0], $results);
        
    $results[1] = array_map("handle_info"$results[1]);
        return array(
    $brief$results[1]);
    }
    /**
     * Получает информацию о выдаче Google по запросу
     * 
     * @param string $query текст запроса без URL кодирования
     * @return array
     */
    function top_10_g($query) {
        
    $url "http://www.google.com/search?hl=ru&q=".urlencode($query);
        
    $txt file_get_contents($url);
        
    $brief get_brief_g($txt);
        if (!
    is_array($brief)) {
            return 
    false;
        }
        return array(
    $brieffalse);
    }
    /**
     * Получает краткую информацию о числе результатов поиска в Yandex
     * 
     * @param string $text текст страницы
     * @return array $a  $a[1] - число страниц, $a[2] - число сайтов
     */
    function    get_brief($text){
        
    preg_match("/\<title\>[\s\S]+?:[\s\S]+?(\d+)[\s\S]+?\<\/title\>/i"$text$ref);
        
    $ref[1] = (@$ref[1]) ? $ref[1] : ;
        return 
    $ref;
    }
    /**
     * Получает краткую информацию о числе результатов поиска в Google
     * 
     * @param string $text текст страницы
     * @return array $a  $a[1] - число страниц
     */
    function    get_brief_g($text){
        
    $exp "/\<div id=ssb\>\<div id=prs>\<b\>[\s\S]*?\<\/b\>\<\/div>\<p\>[\s\S]*?\<b\>[\d]*?\<\/b\> - \<b\>[\d]*?\<\/b\>[\s\S]*?\<b\>([\d\s]*?)\<\/b\>[\s\S]*?\<\/p\><\/div\>/i";
        if (!
    preg_match($exp$text$ref)) {
            return 
    false;
        }
        
    $ref[1] = (isset($ref[1]))?(int)str_replace("&nbsp;"""$ref[1]):0;
        return 
    $ref;
    }

    if (isset(
    $_POST['query'])) {
        
    $log = array();
        
    $log['query'] = $_POST['query'];
        
    $queries = (get_magic_quotes_gpc())?stripslashes($_POST['query']):$_POST['query'];
        
    $queries preg_replace("/[?!\(\)'\",]/"""$queries);
        
    $queries preg_replace("/[- ]{2}/"" "$queries);
        
    $queries preg_replace("/ +/"" "$queries);
        
    $queries str_replace(".""\n"$queries);
        
    $queries explode("\n"trim($queries));    // Разбиваем на предложения
        
    ?>
        <h2>Яндекс</h2>
        <table border="1">
            <tr><td>Страниц</td><td>Запрос</td></tr>
        <?php
        
    foreach ($queries as $q) {
            if (
    strlen($q) > 30) {
                
    $q   preg_replace("/(([\S]+?[\s]+){3,9}[\S]+)[\s\S]*/""$1"$q);
                
    $top = @top_10("\"".trim($q)."\"");
                
    $log["yandex"][] = array($top[0][1], $q);
                
    ?><tr><td><span title="<?php echo implode("\r\n"$top[1]); ?>"><?php echo $top[0][1]; ?></span></td><td><a href="http://www.yandex.ru/yandsearch?text=<?php echo urlencode("\"$q\""); ?>" target="_blank"><?php echo $q?></a></td></tr><?php
            
    }
        }
        
    ?></table>
        <h2>Google</h2>
        <table border="1">
            <tr><td>Сайтов</td><td>Запрос</td></tr>
        <?php
        
    foreach ($queries as $q) {
            if (
    strlen($q) > 30) {
                
    $q   preg_replace("/(([\S]+?[\s]+){3,9}[\S]+)[\s\S]*/""$1"$q);
                
    $top = @top_10_g("\"".trim($q)."\"");
                
    $log["google"][] = array(@$top[0][1], $q);
                
    ?><tr><td><?php echo (is_int(@$top[0][1]))? $top[0][1] : "N/A"?></td><td><a href="http://www.google.com/search?hl=ru&q=<?php echo urlencode("\"$q\""); ?>" target="_blank"><?php echo $q?></a></td></tr><?php
            
    }
        }
        
    ?></table><?php
    }
    ?>

    в принципе практически устраивает, после соответствующей дороботки напильником...
    Правда код мельком пока просмотрел...

    Также, откапал следующий классик...


    шинглы по crc32

    PHP:
    <?php
     
    class Shingles
    {
        
    /**
         * Массив параметров
         *
         * @var array
         */
     
        
    protected $_params = array();
     
        
    /**
         * Массив стоп-символов, которые будут удаленны из строки
         *
         * @var array
         */
     
        
    protected $_stopSymbols = array();
     
        
    /**
         * Массив стоп-слов, которые будут удаленны из строки
         *
         * @var array
         */
     
        
    protected $_stopWords = array();
     
        
    /**
         * Массив текстов для обработки
         *
         * @var array
         */
     
        
    protected $_texts = array();
     
        
    /**
         * Двухмерный массив шинглов
         *
         * @var array
         */
     
        
    protected $_shingles = array();
     
        
    /**
         * Метод выполняющий канонизацию строки. Сначала вырезаем из строки все
         * стоп-символы. Затем перебираем слова. Те которых нет в массиве стоп-слов,
         * оставляем. Приводим строку к нижнему регистру.
         *
         * @param string $string строка для канонизации
         * @return string "чистую" строку
         */
     
        
    protected function _canonizeString($string)
        {
            
    $result = array();
            
    $string str_replace($this->_stopSymbolsnull$string);
     
            foreach (
    explode(' '$string) as $word) {
                if (
    strlen($word) && !in_array($word$this->_stopWords)) {
                    
    $result[] = trim($word);
                }
            }
     
            return 
    strtolower(implode(' '$result));
        }
     
        
    /**
         * Выполняет канонизацию всех добавленных для обработки текстов
         *
         * @return object текущий объект
         */
     
        
    protected function _canonizeTexts()
        {
            if (empty(
    $this->_texts)) {
                return 
    $this;
            }
     
            foreach (
    $this->_texts as $key => $text) {
                
    $this->_texts[$key] = $this->_canonizeString($text);
            }
     
            return 
    $this;
        }
     
        
    /**
         * Создает массив шинглов строки
         *
         * @param string $string строка для обработки
         * @return array массив шиглов
         */
     
        
    protected function _getShinglesFromString($string)
        {
            if (!
    $this->getParam('length')) {
                throw new 
    Exception('Not found param of length');
            }
     
            
    $shingles = array();
            
    $length   intval($this->getParam('length'));
            
    $words    explode(' '$string);
     
            if (
    count($words) < $length) {
                return 
    $shingles;
            }
     
            for (
    $i 1$i <= count($words) - $length$i ++) {
                
    $shingles[] = md5(implode(' 'array_slice($words$i$length)));
            }
     
            return 
    $shingles;
        }
     
        
    /**
         * Создает массив шинглов для каждого текста
         *
         * @return array
         */
     
        
    protected function _setShingles()
        {
            foreach (
    $this->_texts as $text) {
                
    $this->_shingles[] = $this->_getShinglesFromString($text);
            }
     
            return 
    $this;
        }
     
        
    /**
         * Конструктор класса
         *
         * @param array $setting параметры для обработки текстов
         */
     
        
    public function __construct(array $setting = array())
        {
            if (isset(
    $setting['stop_symbols'])) {
                
    $this->setStopSymbols(explode(' '$setting['stop_symbols']));
            }
     
            if (isset(
    $setting['stop_words'])) {
                
    $this->setStopWords(explode(', '$setting['stop_words']));
            }
     
            if (isset(
    $setting['length'])) {
                
    $this->setParam('length'$setting['length']);
            }
        }
     
        
    /**
         * Определяет массив стоп-символов
         *
         * @param array $symbols массив стоп-символов
         * @return object текущий объект
         */
     
        
    public function setStopSymbols(array $symbols)
        {
            
    $this->_stopSymbols $symbols;
            return 
    $this;
        }
     
        
    /**
         * Возвращает массив стоп-символов
         *
         * @return array массив стоп-символов
         */
     
        
    public function getStopSymbols()
        {
            return 
    $this->_stopSymbols;
        }
     
        
    /**
         * Определяет массив стоп-слов
         *
         * @param array $words стоп-слова
         * @return object текущий объект
         */
     
        
    public function setStopWords(array $words)
        {
            
    $this->_stopWords $words;
            return 
    $this;
        }
     
        
    /**
         * Возвращает массив стоп-слов
         *
         * @return array массив стоп-слов
         */
     
        
    public function getStopWords()
        {
            return 
    $this->_stopWords;
        }
     
        
    /**
         * Возвращает параметр
         *
         * @param string $key ключ
         * @return mixed|null значение
         */
     
        
    public function getParam($key)
        {
            if (isset(
    $this->_params[$key])) {
                return 
    $this->_params[$key];
            }
     
            return 
    null;
        }
     
        
    /**
         * Возвращает массив всех параметров
         *
         * @return array массив всех параметров
         */
     
        
    public function getParams()
        {
            return 
    $this->_params;
        }
     
        
    /**
         * Определяет массив параметров
         *
         * @param array $params массив параметров
         * @return object текущий объект
         */
     
        
    public function setParams(array $params)
        {
            
    $this->_params $params;
            return 
    $this;
        }
     
        
    /**
         * Определяет параметр
         *
         * @param string $key ключ параметра
         * @param mixed $value значение параметра
         * @return object текущий объект
         */
     
        
    public function setParam($key$value)
        {
            
    $this->_params[$key] = $value;
            return 
    $this;
        }
     
        
    /**
         * Добавляет текст для проверки
         *
         * @param string $text текст
         * @return object текущий объект
         */
     
        
    public function addText($text)
        {
            
    $this->_texts[] = $text;
            return 
    $this;
        }
     
        
    /**
         * Проверяет двухмерный массив шинглов на уникальность
         *
         * @param array $shingles массив шинглов
         * @return int процент уникальности
         */
     
        
    public function compaire(array $shingles)
        {
            
    $same 0;
     
            foreach (
    $shingles[0] as $key => $shingle) {
                if (
    $shingle === $shingles[1][$key]) {
                    
    $same ++;
                }
            }
     
            return 
    round($same count($shingles[0]) * 1002);
        }
     
        
    /**
         * Возвращает массив шинглов для всех добавленных текстов
         *
         * @return array массив шинглов
         */
     
        
    public function getShigles()
        {
            return 
    $this->_canonizeTexts()->_setShingles()->_shingles;
        }
    }
     
    ?>
    использование

    PHP:
    <?php
     
    require_once dirname(__FILE__) . DIRECTORY_SEPARATOR 'shingles.php';
     
    setlocale(LC_CTYPE, array('ru_RU.CP1251''Russian_Russia.1251'));
     
    $setting  parse_ini_file(dirname(__FILE__) . DIRECTORY_SEPARATOR 'setting.ini');
    $shingles = new Shingles($setting);
     
    $shingles->addText('То, что старшая сестра держалась на собрании так уверенно, меня сперва беспокоило, а на Макмерфи не подействовало никак');
    $shingles->addText('То, что главная сестра держалась на собрании так уверенно, меня сперва беспокоило, а на Макмерфи не подействовало никак');
     
    echo 
    'Тексты схожи на ' $shingles->compaire($shingles->getShigles()) . '%';
     
    ?>

    Но это просто сравнение текстов по шинглам, хотя тоже может оказаться полезным...

    Вотс... пока нахожусь в активном поиске...
    Если кто, что ни будь ещё найдёт, или распологает информацией отпишитесь пожалуйста.. :thenks:
    :bc:

    ---------

    Хе... :)
    Тот же самый скрипт только с развёрнутыми комментами... Спс...
     
  4. Fast3r

    Fast3r

    Регистр.:
    30 июн 2008
    Сообщения:
    329
    Симпатии:
    39
    да нет проблем вот как ты и просил php скрипт
    http://nado.su/downloads.html
    в низу страницы :)
    если поможет, поделись потом скриптиком массовой проверки, буду весьма благодарен :ay:
     
    Tushkan нравится это.
  5. kactetus

    kactetus митя is here )

    Регистр.:
    26 авг 2007
    Сообщения:
    441
    Симпатии:
    278
    Tushkan
    Ну что получилось прикрутить массовых проверок файлов , просто пригодится данный скрипт
     
  6. got4a

    got4a Создатель

    Регистр.:
    8 сен 2007
    Сообщения:
    45
    Симпатии:
    2
    А можно поподробнее классы рассмотреть ? :)
    Очень нужен подобный скрипт...
     
  7. arch14

    arch14

    Регистр.:
    7 июн 2009
    Сообщения:
    374
    Симпатии:
    186
    озадачился такой же проблемой. перерыл кучу ресурсов - нету нифига
    нашел тут http://makebusiness.ru/seo/63
    просит 19 вмз
     
  8. Dali

    Dali

    Регистр.:
    7 апр 2006
    Сообщения:
    155
    Симпатии:
    153
    Ну это не совсем, как бы скрипт :) что вы навели в пример, есть сервис но опять же платный
    http://www.miratools.ru/

    Есть безплатная тузла но опять же это не скрипт десктопный софт "PlagFinder" ищет только через гугл
    Скачать http://ebukva.ru/files/plagfinder.exe
    Прочитать http://ebukva.ru/SiteInfo.aspx?PageIndex=1&InfoType=0


    Или ждать апдет Etxt Антиплагиат. У разработчиков в планах сделать пакетную проверку.

    Из безплатного в виде сервиса, но там как бы массовостью не пахнет http://istio.com/rus/text/analyz/...
     
  9. kimadso

    kimadso

    Регистр.:
    4 апр 2009
    Сообщения:
    178
    Симпатии:
    19
    Тебе что нужно? Уникальность строк или в поисковиках?
    В моем паке есть быстрый скриптец на питоне по поиску строчек
     
  10. bummm

    bummm

    Регистр.:
    26 июл 2008
    Сообщения:
    443
    Симпатии:
    95
    А может кто подскажет платную прогу проверки уникальности статей?

    А то из за Advego Plagiatus такие попадосы были...
     
Статус темы:
Закрыта.