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

Форум PHP

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

 

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

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

тема: Удаление одинаковых слов, из массива ли? подскажите плиз люди добрые
 
 автор: LIsa   (18.07.2006 в 00:14)   письмо автору
 
 

Приветствую!

Подскажите как решить такую задачку, есть файл текстовой
и надо в нём удалить одинаковые слова все , слов одинаковых несколько,
можно было бы разбить содержимое файла на элементы массива по пробелу,
и удалить одинаковые, то в таком случае наверно содержание строк перемешается, а хотелось бы чтобы содержание текста осталось таким же только без одинаковых слов, допустим в файле:
Шла саша по шоссе долго шла и шла
На дворе трава много травы :)
(после прохода скриптом хотелось бы иметь следующее:)
саша по шоссе и
на дворе много

Вот может кто подскажет как такое удаление сделать?

   
 
 автор: AKiRA   (18.07.2006 в 00:41)   письмо автору
 
   для: LIsa   (18.07.2006 в 00:14)
 


<?php
/*
 * Дата создания 18.07.2006 0:18:39
 * package_name
 * @author Alexandr Beshkenadze aka akira
 * (c) akira 2006
 * 
 */
 
function kill_dublicat($str){
 
/*
  * Рабираем слова на массивы, в каждом эл-те массива предложение, сохраняем смысл
  * */ 
      
$br explode(".",$str);
 
/*
  * проходим по массиву и
  * */
     
for($i=0;$i<count($br);$i++){
 
/*
  * разбиваем в массив по словам, получаем двумерный массив.
  * */
         
$word[$i]=explode(' ',$br[$i]);
 
/*
  * Убиваем дубликаты слов (трава и травы - слова разные).
  * */
         
$word[$i] = array_unique($word[$i]);
 
/*
  * Соеденяем слова как были, но без дубликатов.
  * */
         
$word[$i] = implode(' ',$word[$i]);
     }
 
/*
  * Ставим на место предложения.
  * */
     
$br2str implode('.',$word);
 
/*
  * Возвращаем строку.
  * */
     
return $br2str;
 }
  
/*
  * Пример использования, считываем из файла, но можно и сразу строчку передать.
  * */
$str=file_get_contents('text.txt'); // Шла саша по шоссе долго шла и шла. На дворе трава много травы
echo kill_dublicat($str); // Шла саша по шоссе долго шла и. На дворе трава много травы
?>

   
 
 автор: AKiRA   (18.07.2006 в 00:45)   письмо автору
 
   для: AKiRA   (18.07.2006 в 00:41)
 

:))) Я зажег :))) На эклипсе просто так комментарии писать :)

   
 
 автор: Lisa   (18.07.2006 в 01:07)   письмо автору
 
   для: AKiRA   (18.07.2006 в 00:45)
 

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

такой скрипт почему то не совсем правильно работает:-\


$file = file("text.txt","r");
$mas1 = implode (" ",$file);
echo $mas1;
$mas2 = explode (" ",$mas1);
echo "<br><br>";

$result = array_unique($mas2);
foreach ($result as $slovo) {
    
echo $slovo;

echo " ";
}

   
 
 автор: AKiRA   (18.07.2006 в 01:17)   письмо автору
 
   для: Lisa   (18.07.2006 в 01:07)
 

Ну какой текст без точки? Ну можно точку любым символом заменить.

   
 
 автор: LIsa   (18.07.2006 в 01:24)   письмо автору
 
   для: AKiRA   (18.07.2006 в 01:17)
 

ну вот такой например:)
Шла саша по шоссе долго шла и шла
На дворе трава много трава

и надо чтобы убрались дубликаты и оригиналы дубликатов
то есть:
Саша по шоссе долго и
На дворе много

   
 
 автор: AKiRA   (18.07.2006 в 01:30)   письмо автору
 
   для: LIsa   (18.07.2006 в 01:24)
 

Заменить:
/* 
  * Рабираем слова на массивы, в каждом эл-те массива предложение, сохраняем смысл 
  * */  
      $br = explode(".",$str); 
 

На:
/* 
  * Рабираем слова на массивы, в каждом эл-те массива предложение, сохраняем смысл 
  * */  
      $br = $str; 
 

И заменить:
 /* 
  * Пример использования, считываем из файла, но можно и сразу строчку передать. 
  * */ 
$str=file_get_contents('text.txt'); // Шла саша по шоссе долго шла и шла. На дворе трава много травы 

На:
$str=file('text.txt'); // Шла саша по шоссе долго шла и шла. На дворе трава много

   
 
 автор: LIsa   (18.07.2006 в 01:50)   письмо автору
 
   для: AKiRA   (18.07.2006 в 01:30)
 

странно.... :-\
у тебя работает этот скрипт?
у меня ошибок никаких не выдает, но удалять ничего не удаляет:-\ где то ошибка наверно

В общем получается так:
1 вариант скрипта удаляет только если слова все написаны на одной строке,
если есть перенос строки то ничего не обрабатывается кроме первой строки.

а второй вариант скрипта где без точки, не удаляет ничего вообще:(

   
 
 автор: AKiRA   (18.07.2006 в 02:15)   письмо автору
 
   для: LIsa   (18.07.2006 в 01:50)
 

т.е. он выводит тот же текст? Или не меняет в текстовом файле содержимое?

   
 
 автор: LIsa   (18.07.2006 в 02:20)   письмо автору
 
   для: AKiRA   (18.07.2006 в 02:15)
 

В общем получается так:
1 вариант скрипта удаляет только если слова все написаны на одной строке,
если есть перенос строки то ничего не обрабатывается кроме первой строки.

а второй вариант скрипта где без точки, не удаляет ничего вообще:(

Шла саша по шоссе
долго шла и шла
На дворе трава много трава
дрова крот дрова
рок урок рок

после функции выводит:

Шла саша по шоссе .долго шла и .На дворе трава много трава .дрова крот дрова. .рок урок рок

   
 
 автор: Lisa   (19.07.2006 в 06:12)   письмо автору
 
   для: LIsa   (18.07.2006 в 02:20)
 

ну помогите плиз:(

   
 
 автор: Vitas   (19.07.2006 в 09:04)   письмо автору
 
   для: Lisa   (19.07.2006 в 06:12)
 


function hehe ($string) {
  $string = strtolower ($string);
  $words = array ();
  $lines = explode ("\n", $string);
  foreach ($lines as $line) {
    $line_words = explode (" ", $line);
    $words = array_merge ($words, $line_words);
  }                                          
  $words = array_unique ($words);
  foreach ($words as $word) {
    if (substr_count ($string, $word) > 1) {
      $string = preg_replace ("/" . $word . "[\s*]/i", "", $string);
    }
  }                                            
  return ($string);
}  
echo (hehe ("Шла саша по шоссе долго шла и шла
На дворе трава много трава"));

   
Rambler's Top100
вверх

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