Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Замена слов в тексте
 
 автор: zion115   (28.09.2009 в 15:58)   письмо автору
 
 

Добрый день. В общем, пишу скрипт, который должен заменять определенные слова в тексте. Например, есть текст. “Вася купил в магазине молоко. Мама сказала: «Вася – ты молодец.”.”

В этом тексте надо заменить “Вася” на любое другое имя которые находятся в txt файле names.txt (Желательно что бы “Вася” в первом предложении и “Вася” во втором менялись на разные имена). И надо заменить слово магазине на какое-нибудь другое слово, прописанное в txt файле допустим slovo.txt. Есть у меня общий список слов allwords.txt вида

Вася:names.txt
Магазине: slovo.txt

По идее надо найти слово из текста в этом списке и получить название файла в котором содержутся слова для замены.

И в итоге получить предложение “ Юра купил в кинотеатре молоко. Мама сказала: «Ваня – ты молодец.”” Вот так.

Т.к. в php я еще новичок, поэтому начал писать скрипт и в итоге вообще запутался)

<?php

$text= ‘Вася купил в магазине молоко. Мама сказала: «Вася – ты молодец.”’;

//разделяем текст на предложения
$text=str_replace(",", " ", $text);
$text=str_replace(".", ". ", $text);
$text=str_replace(chr(13).chr(10), " ", $text);
$text=str_replace("\n", " ", $text);
$text=str_replace("\r", " ", $text);
$text=str_replace("\r\n", " ", $text);
$text=str_replace("\n\r", " ", $text);
$text=str_replace(chr(10), " ", $text);
$text=str_replace(chr(13), " ", $text);
$text=str_replace(" ", " ", $text);

$text=preg_replace("/[^a-zA-Zа-яА-Я0-9ё_ -\.,]*/", "", $text);

$text=explode(". ", $text);

//тут я уже начал тупить

for ($i=0; $i<count($text); $i++){ //запускаем цикл для предложений
$word = explode(" ", $text[$i]);//разделяем предложения на слова
//print_r ($word);
for ($m=0; $m<count($word); $m++){ //запускаем цикл для слов

$allwords = fopen('allwords.txt', 'r');// Открываем базу слов
$allwords = fread($poisk, filesize('allwords.txt'));
preg_match("/\b$word[$m]:(.*)\b/i", $allwords, $result);// Ищем слово в базе и находим имя файла для поиска замены.
if (!$result[1]){ // Если слово отсутствует то оставляем это слово без изменений и выводим, что его нет в списке
$text = str_replace($word[$m], $word[$m], $text[$i]);
echo "Слово <strong>\"$word[$m]\"</strong> отсутсвует в общем списке слов<br>";
}

else{

$result[1] = trim($result[1]);
$tmp = file("$result[1]"); //открываем файл со словами для замены

$text1 = preg_replace("/\b$word[$m]\b/", $tmp[rand(0, count($tmp)-1)], $text[$i]);//Заменяем исходное слово на рэндомное из его категории

Вот до сюда дошел и вроде уже скосячил где то) но теперь надо обратно собрать текст ))
Скорей всего я сделал все плохо и есть более простые способы, но не ругайте сильно я учусь)

  Ответить  
 
 автор: tvv123456   (28.09.2009 в 16:40)   письмо автору
 
   для: zion115   (28.09.2009 в 15:58)
 

Как понял из всего написанного(скрипт сам не смотрел): можно сделать так(с использованием mysql):

<?
// все имена(и слово) держать в БД и дальше вытаскивать
$result=mysql_query("select * from settings /*тут напишите какое-нить условие(случайный выбор конкретное id или еще что-нить, или ничего чтоб вытащить все записи*/) "); // все что мжеду /* */ нужно обязательно удалить или заменить
$row=mysql_fetch_array($result);

//а дальше формируем предложение
do{
echo 
$row['name1']." купил в ".$row['slovo']." молоко. Мама сказала: «".$row[name2]." – ты молодец.";}
while(
$row=mysql_fetch_array($result));
?>

В таблице settings будут храниться нужные слова(в полях name1, name2, slovo и т.п.)

  Ответить  
 
 автор: Semenych1891   (30.11.2011 в 17:29)   письмо автору
 
   для: tvv123456   (28.09.2009 в 16:40)
 

удалил свой пост, уже не актуально

  Ответить  
 
 автор: cheops   (28.09.2009 в 16:45)   письмо автору
 
   для: zion115   (28.09.2009 в 15:58)
 

А какова структура файлов names.txt и slovo.txt? У вас там используется двоеточие? Что внутри самих файлов?

  Ответить  
 
 автор: zion115   (28.09.2009 в 16:51)   письмо автору
 
   для: cheops   (28.09.2009 в 16:45)
 

структура у names.txt и slovo.txt просто с каждой строчки новое слово

например в names.txt будет так

Ваня
Юра
Петя
Саша
...
Степан

и нужно заменить исходное слово в тексте на слово из файла.

  Ответить  
 
 автор: cheops   (28.09.2009 в 16:56)   письмо автору
 
   для: zion115   (28.09.2009 в 16:51)
 

>$tmp = file("$result[1]");
Кстати, функция file() удаляет только \n, если вы формировали файлы под Windows, в конце каждого из слов остается \r после Windows-перевода \r\n. Поэтому элементы массива $tmp тоже нужно пропускать через trim().

  Ответить  
 
 автор: tvv123456   (28.09.2009 в 17:02)   письмо автору
 
   для: zion115   (28.09.2009 в 16:51)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования