PHP сценарий написания рерайта

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

PHP сценарий написания рерайта

Сообщение Slash » Пн янв 09, 2017 3:54 pm

Цель написать PHP скрипт, который будет делать рерайт из предоставленного ему текста. Начал делать вчера вечером (поздно), сегодня продолжил. То что сейчас есть навряд ли можно назвать полноценным скриптом, но начало есть!

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

Для теста я взял несколько предложений из темы первого поста: Сервис обмена посетителями
Давно хотел заняться разработкой сервиса для обмена реальными посетителями, но все времени не было, то занят был не тем, а чем попало :). Сервис не такой, как серфинг сайтов и прочей ахинеи, а что то типа рекламной сети, где пользователь после регистрации своего сайта, добавляет объявление на одну из страниц своего проекта, получает JS код, который надо разместить на своем сайте, где удобно владельцу и начинаются показы других сайтов, которые тоже участвуют в обмене. Если читатель сайта нажмет на одну из ссылок в блоке, то владелец сайта получает один "бал" и объявление о его сайте появляется у других участников обмена. При переходе читателя по объявлению, владелец рекламируемого сайта отдает один бал. Объявления отображаются до тех пор, пока счетчик балов не сравняется с нулем.
Пропустил через свой скрипт и вот что получилось:
Уже давно желаю озадачить себя созданием web-проекта для обмена настоящими юзерами, но все времени не было, то занят был не тем, а чем попало :). Сайт не такой, как серфинг сайтов и остальной чепухи, а что то вроде рекламной сети, где юзер после создания учетной записи своего web-сайта, добавляет объявление на одну из страниц своего сайта, берёт JS код, каковой нужно расположить на своем сайте, где удобно администратору и стартуют показы остальных сайтов, какие тоже участвуют в обмене. Если читатель сервиса нажмет на одну из ссылок в блоке, то администратор web-проекта берёт один "бал" и объявление о его сайте отобразится у остальных членов обмена. При переходе чтеца по объявлению, администратор рекламируемого web-сайта отдает один бал. Объявления видны до тех пор, по куда счетчик балов не выйдет на уровень с нулем.
Сервис https://text.ru показал 100% уникальность, оригинал равен 0% уникальности. По моему не плохо.
Однако ручная проверка необходима, так как после обработки могут быть "не состыковки". К тому же в зависимости от тематики текста необходимо менять фразы для замены. Я составлял фразы под тему компьютер и программирование.

Самое сложное тут составлять слова|фразы для замены. Например, столкнулся со словом "пока", его можно заменить на фразы: "До свидания", "Всего доброго" и так далее. Но слово "пока" употребляют не только когда прощаются друг с другом и если использовать эти фразы для замены то с таким предложением будет полный бардак:
Пока на улице идет дождь, мы ни куда не пойдем.
Результат будет таким:
Всего доброго на улице идет дождь, мы ни куда не пойдем.
А слов, которые имеют несколько смыслов хватает.

В планах написать фразы разных тематик, чтобы перед обработкой текста можно было выбрать более подходящею тему, только так текст будет более менее. Хотя, наверно можно обойтись и общими фразами.
Но прежде надо довести до ума, то что есть сейчас.

Реклама
Аватара пользователя
Predator
Сообщения: 7
Зарегистрирован: Сб янв 07, 2017 1:21 pm
Благодарил (а): 3 раза

Re: PHP сценарий написания рерайта

Сообщение Predator » Вт янв 10, 2017 9:41 am

Полезная вещь!

Попробовал сделать рерайт специальным онлайн сервисом из текста, что рератил Ваш скрипт, получилась какая-то белеберда, к тому же не уникальная, а у Вас нормально вышло. Это без ручных поправок? Как Вы заменяете фразы? Функцией str_replace или регулярным выражением?
Slash писал(а):в зависимости от тематики текста необходимо менять фразы для замены
Пожалуйста, поясните, как тематика обрабатываемой статьи может сказаться на качестве текста?

Надеюсь у Вас всё получится!

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: PHP сценарий написания рерайта

Сообщение Slash » Вт янв 10, 2017 10:18 am

Спасибо за отзыв :) !
Predator писал(а):Это без ручных поправок?
Без ручных правок, сразу после обработки скриптом.

В моем сценарии нету регулярных выражений, возможно потом добавлю, но пока без надобности. Функция str_replace есть, но я сделал так, чтобы она заменяла по одному слову (по порядку), а не сразу все совпадения в тексте. Скрипт работает с каждым словом, что больше трех символов, по отдельности. Это позволяет разнообразить заменяемые слова.
Predator писал(а):Пожалуйста, поясните, как тематика обрабатываемой статьи может сказаться на качестве текста?
Для примера возьмем две тематики: строительную и компьютерную. В фразе установить программу (компьютерная тема) слово установить можно заменить на слово инсталлировать и получится инсталлировать программу, по моему звучит красиво. Но если для замены использовать слово и инсталлировать в фразе установить ванную (строительная тема), получится что то не то.
Ну, как то так...

Аватара пользователя
Predator
Сообщения: 7
Зарегистрирован: Сб янв 07, 2017 1:21 pm
Благодарил (а): 3 раза

Re: PHP сценарий написания рерайта

Сообщение Predator » Вт янв 10, 2017 6:16 pm

Slash, Вы доходчиво объясняете! Теперь мне понятно на сколько важна тематика статьи.
Slash писал(а):Очень сложно сделать скрипт для выполнения рерайта, скорее получится обычный синонимайзер, но попытка, не пытка!
Озадачился вопросом по написанию рерайта программой. Действительно сложно такой скрипт написать и скорее всего выйдет просто синонимайзер. Я с Вами солидарен.

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

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: PHP сценарий написания рерайта

Сообщение Slash » Вт янв 10, 2017 6:44 pm

Predator писал(а):некоторые слова менять нельзя вообще
Верно. Я сначала хотел создавать для каждой статьи массив слов, которые менять нельзя, но после решил сделать "неприкасаемые" слова заключив их в кавычки (« ... »), так удобнее. Ну а имена, их просто нет в базе слов для замены.
Predator писал(а):Тут без вмешательства человека может получится каша.
Ну, да. Тут не поспоришь. Но все же небольшая помощь для ручного рерайта будет! Если вообще, что то получится. :)

Аватара пользователя
Scorpion
Сообщения: 56
Зарегистрирован: Вт апр 05, 2016 7:36 am
Благодарил (а): 9 раз
Поблагодарили: 5 раз

Re: PHP сценарий написания рерайта

Сообщение Scorpion » Пн фев 06, 2017 4:42 pm

Пробовал сделать свой скрипт, через замену строки str_replace, но получается белеберда, как у онлайн синонимайзеров.

Slash, покажи код своего синонимайзера, пожалуйста. В личку?

Аватара пользователя
Slash
Администратор
Сообщения: 2113
Зарегистрирован: Сб авг 11, 2012 7:39 am
Поблагодарили: 71 раз

Re: PHP сценарий написания рерайта

Сообщение Slash » Пн фев 06, 2017 6:05 pm

Код синомайзера выглядит так (тут не все, но этого вполне хватит для работы):

Код: Выделить всё

$sign  = array('.', ',', ':', ';', '!', '?', '(', ')', '\'', '\'', '"', '"'); # Знаки на удаление
$thing = str_replace($sign, '', $text); # Удаление знаков

$piece  = explode(' ', $text);  # Текст в массив с знаками препинания
$part   = explode(' ', $thing); # Текст в массив без знаков препинания 
$part_c = count($part);         # Количество слов (элементов массива '$part')
$word_c = count($word);         # Количество массивов в массиве '$word'

for ($i = 0; $i < $part_c; $i++)
{
	if (mb_strlen($part[$i]) > 3)
	{
		$lower = mb_strtolower($part[$i]); # Перевод строки в нижний регистр
		for ($j = 0; $j < $word_c; $j++)
		{
			if (in_array($lower, $word[$j]))
			{
				$array = array();
				foreach ($word[$j] as $value)
				{
					if ($value != $lower)
					{
						$array[] = $value;
					}
				}

				# Выбор случайного слова для замены
				$change = $array[mt_rand(0, count($array) - 1)];

				# Проверка первой буквы: заглавная или нет
				if (mb_strtoupper(mb_substr($part[$i], 0, 1)) == mb_substr($part[$i], 0, 1))
				{
					$line = mb_strtoupper(mb_substr($change, 0, 1)) . mb_substr($change, 1);
				}
				else
				{
					$line = $change;
				}

				$piece[$i] = str_replace($part[$i], '<strong style="color: #FF0000;" title="' . $part[$i] . '">' . $line . '</strong>', $piece[$i]);

				break;
			}
		}
	}
}
Пример базы синонимов:

Код: Выделить всё

$word = array(
	array('доброго времени суток', 'здравствуйте', 'привет', 'я приветствую вас', 'hi'),

	array('ахинея', 'глупость', 'ересть', 'ерунда', 'чепуха', 'чушь'),
	array('ахинеи', 'глупости', 'ерунды', 'чепухи'),
	array('абсурд', 'бред', 'вздор'),

	array('надо', 'надобно', 'необходимо', 'нужно', 'требуется'),
	array('необходимый', 'нужный'),
	array('необходимости', 'нужды', 'требования'),
	array('необходимость', 'нужда', 'требование'),
	array('понадобится', 'потребуется')
);
Заменяемые слова выделяются красным.

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

Ответить Пред. темаСлед. тема

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя