X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Пишем синонимайзер своими руками
lawelian
lawelian
Topic Starter сообщение 28.8.2012, 23:27; Ответить: lawelian
Сообщение #1


Добрый день уважаемые вебмастера.
Что ж вдоволь насмотрелся я на контингент данного форума.
Одни сплошные СЕОШНИКИ из разряда Купи продай. :)
Я считаю так нельзя надо исправлять ситуацию.
Итак в этой теме я расскажу как довольно просто написать свой собственный синонимайзер.
Зачем это нужно ведь в интернете полно бесплатных синонимайз сервисов?
Так то да но дело в том что:
Во-первых: свое оно всегда лучше.
Во вторых: синонимайзер жрет очень много ресурсов сам по себе, и синонимировать большие обьемы текста в автоматическом режиме никто вам за бесплатно не даст.
И так приступим к практике:
Для начала нам нужно пошарить в интернете
http://www.skillz.ru/dev/php/article-Pi ... a_PHP.html вот здесь есть отличная статья по данному поводу. именно ее я взял за основу данного урока.
Итак
Этап первый
Для начала определимся как будет выглядеть наш словарь синонимов назовем его dic.txt
Мне понравилось так как описано в статье
то есть вот такой формат
белок => вытаращить арабские белки
волос => шерсть | щетина | пух | пушок | ворса; вихор | грива | хохол | челка | чуб | шевелюра | коса | борода | усы | бакенбарды | бакены | баки | висок | кудер | косма | прядь
антик => редкость | чудак
впрок => заготовлять впрок | не впрок
багаж => вещи | кладь | поклажа | клажа | ноша | груз | фрахт
вкось => и вкривь | и вкось
беляк => франт
...

вот наш словарь синонимов, не густо правда? как его дополнить?
И тут нам опять поможет великий интернет. Где то на варезных файлосвалках валяется одна вещица, называется она словарь синонимов для Allsubmitter 5.0 (советую погуглить) вот она нам как раз и пригодится
( файл в формате UTF-8 его нужно перекодировать в cp1251 это можно сделать через обычный блокнот)
Но только один нюанс там словарь в формате
слово::синоним1, синоним2

Не порядок, но ничего страшного мы то с вами как программисты знаем как выкрутиться :rolleyes:
Пишем код для конвертации формата словаря в удобный нами
создаем файл converter.php пишем туда следующий код
$fh=fopen("syn.txt","r");
$f=fopen("dic.txt","a");
while(!feof($fh))
{
$line=fgets($fh);
$line=str_replace("::" => ",$line);
$line=str_replace(", " | ",$line);
fwrite($f,$line);
}
fclose($f);
fclose($fh);
echo 'vse';

Потом просто запускаем данный файл через браузер на сервере и вуаля наш словарь сделан.
Так словарь у нас есть теперь нужно сделать класс синонимайзера, то есть механизм работы нашего синонимайзера.
Этап второй
Создаем файл sinonym.php и пишем туда наш класс
class synonimizer {

const DEBUG = 0;

const ROW_DELIM   = '=>';  
const VALUE_DELIM = '|';  

private $_dic_file = 'dic.txt';

/**
* @private array 'syn' = array(value, value, value)
*/
private $parsed = array();


function __construct() {
    
     $_parsed = file(dirname(__FILE__) . '/' . $this->_dic_file);
    
    foreach ($_parsed as $k => $v) {
      $v = trim($v);
      if (empty($v) || 0 === strpos($v, '#')) {
       ; // nop
      }
      else {
        $v = explode(self::ROW_DELIM, $v);
        $_key = trim($v[0]);
        $_data = array();
        if (strpos($v[1], self::VALUE_DELIM) !== false) {
            $data = explode(self::VALUE_DELIM, $v[1]);
            foreach ($data as $dk => $dv) {
                $_data[$dk] = trim($dv);
            }
        }
        else {
            $_data = array(trim($v[1]));
            if (strpos($_data[0], '@') === 0) {
                // this is alias
                $_data = $this->parsed[substr($_data[0], 1)];
            }
        }
    
        // save
        $this->parsed[$_key] = $_data;
      }
    }
}

/**
* Callback
*/
static $_c_matches = false;
static function syn_callback($matches) {
     $out = $matches[2];
     if (self::DEBUG) echo " -- " . $out . "\n";
     if (!empty(self::$_c_matches)) {
         $i = count(self::$_c_matches) - 1;
         $i = ($i > 0) ? mt_rand(0, $i) : 0;
         $out = self::$_c_matches[$i];
     }
     if (self::DEBUG)  echo " ++ " . $out . "\n\n";
     return $matches[1] . $out . $matches[3];
}

private static $index = 0;

public function syn($text) {

   $text = ' ' . str_replace(array('\r\n', '\n'), "\r\n", $text) . ' ';
   self::$index++;
   echo ">>> " . self::$index . "\n";
  
   if (self::DEBUG) {
       echo str_repeat("-", 80) . "\n" . wordwrap($text, 80) . "\n" .  str_repeat("-", 80) . "\n\n";
    }

    foreach ($this->parsed as $key => $matches) {
        self::$_c_matches = &$matches;
        $text = preg_replace_callback(
        '#([^\w\d\-])(' . preg_quote($key) . ')([^\w\d\-])#i'// ([^\w\d\-]) //([\s\.\,])
        , 'synonimizer::syn_callback'
        , $text
        );
    
    }

    $text = str_replace("\r\n", '\r\n', substr($text, 1, -1));
    if (self::DEBUG) echo "--> " . wordwrap($text, 80) . " \n\n";
    return $text;
}
}

Заключительный этап
Ну а теперь в качестве демонстрации работы скрипта напишем простую оболочку: многострочное текстовое поле и кнопка "синонимировать" заполняем поле исходным текстом => нажимаем кнопку => получаем синонимированный текст
php код оболочки:
set_time_limit(0);
include("sinonym.php");
if($_POST["act"]=="go")
{
$syn = new synonimizer();
$result_text = $syn->syn($_POST["text"]);
echo $result_text;
}
else
{
echo'<form action="" method="POST"><input type="hidden" name="act" value="go"><textarea name="text"></textarea><br><input type="submit" value="синонимировать"></form>';

Вот собственно говоря и всё.
Синонимайзер готов. Можно смело клепать сплоги и ДДЛ
Надеюсь данная тема была интересна.
Если кому данный синонимайзер понравился, но не сильны в php и хотите иметь более продвинутый вариант к примеру на в ход подавать текстовый файл с исходным текстом или того хуже базу данных с текстами.
То всего за 10 вечнозеленых рублей я вам с радостью это все реализую и при желании даже установлю на сервер и проконсультирую как все оптимизировать дабы избежать излишнего потребления ресурсов.

В следующей теме я планирую рассказать как написать свой парсер YouTube
Не переключайтесь :D
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
prolisk
prolisk
сообщение 28.8.2012, 23:47; Ответить: prolisk
Сообщение #2


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


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
airman
airman
сообщение 29.8.2012, 10:16; Ответить: airman
Сообщение #3


неужели все так прям просто? :) раз и написал свой синонимайзер. Я например дуб дубом в программировании. Хотя если честно мне он особо не нужен, я уже давно понял что перспективнее делать сайты для людей.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gogas
gogas
сообщение 6.9.2012, 17:11; Ответить: gogas
Сообщение #4


неужели все так прям просто? раз и написал свой синонимайзер. Я например дуб дубом в программировании. Хотя если честно мне он особо не нужен, я уже давно понял что перспективнее делать сайты для людей.


тут вы правы , я как то пытался создать сайт, наполняя его контентом из синомайзера и с переводчика (тупо переводил все англоязычные статьи) . В гугле почти половина вошла в топ 100 , даже некоторые в топ 10 , но активности было 0 . Конечно я на это и не расчитывал . Хотел на google adsence добавить сайт , расчитывая на то , что пользователь зайдет, прочтет мои тупые статьи и решив уйти нажмет на рекламу
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
prolisk
prolisk
сообщение 8.9.2012, 10:40; Ответить: prolisk
Сообщение #5


Хотел на google adsence добавить сайт , расчитывая на то , что пользователь зайдет, прочтет мои тупые статьи и решив уйти нажмет на рекламу

видимо не сделали? интересно было бы узнать.


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Smit_rs
Smit_rs
сообщение 12.12.2012, 18:05; Ответить: Smit_rs
Сообщение #6


Может быть кто-нибудь знает, как связаться с автором (Kenars) по поводу доработки и приобретения скрипта?
Его последнее посещение форума 28 авг 2012 г.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Aman_sf
Aman_sf
сообщение 9.1.2013, 17:53; Ответить: Aman_sf
Сообщение #7


Я тоже тупо в гугл траслит переводил английские тексты, в индексе сайт до сих пор висит.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
melrok
melrok
сообщение 10.1.2013, 0:37; Ответить: melrok
Сообщение #8


(Smit_rs)
Может быть кто-нибудь знает, как связаться с автором (Kenars) по поводу доработки и приобретения скрипта?
Его последнее посещение форума 28 авг 2012 г.


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

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Оплатим зарубежные сервисы своими visa mc
0 gregory037 1296 22.7.2023, 21:56
автор: gregory037
Открытая тема (нет новых ответов) Продам генератор постов для соц. сетей, работающий на контенте со сторонних сайтов, со встроенными своими рекламными блоками под выведение нужной рекламы
0 Tutich 2508 19.8.2021, 9:47
автор: Tutich
Открытая тема (нет новых ответов) Сайты руками ответственного разработчика
1 1head 944 3.6.2020, 16:35
автор: Megoydagi
Открытая тема (нет новых ответов) Продвижение сайтов руками и головой 100% гарантия
7 ilkhomk 4566 3.2.2020, 19:45
автор: NataliaAntalia
Открытая тема (нет новых ответов) Требуется регистрация и постинг на форумах (руками)
База готовая.
3 falselight 3135 11.6.2018, 17:18
автор: ura1205


 



RSS Текстовая версия Сейчас: 26.4.2024, 8:46
Дизайн