Вернуться   Форум SAPE.RU > Другое > Курилка

-->
Ответ
 
Опции темы
Старый 29.12.2012, 20:03   #1
Дикий
 
Аватар для D.iK.iJ
 
Регистрация: 02.06.2007
Адрес: <Noindex>
Сообщений: 2,551
Вес репутации: 355
D.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущее
Question Как убрать повторы слов из текстовой базы?

Есть пара текстовых баз синонимов порядка 35 мегабайт и 800 тысяч строк каждая:

слово1|слово 2
слово 3|слово4|слово1
и т.д.

Можно ли как-то PHP скриптом убрать все повторы слов или строки с повторами?

Понятно, что полные совпадения удаляются array_unique();, но как дальше обработать пример выше? Написал несколько скриптов за 2 дня, но даже 100 000 строк обрабатывает на компьютере около часа.
D.iK.iJ вне форума   Ответить с цитированием
Старый 29.12.2012, 20:11   #2
Мастер
 
Аватар для Sergius
 
Регистрация: 09.06.2009
Сообщений: 602
Вес репутации: 218
Sergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущее
По умолчанию

Засунуть в мускул.А там с помощью Select ... Distinct извлечь обратно.Это самый быстрый вариант,ибо она на то и рассчитана
Sergius вне форума   Ответить с цитированием
Старый 29.12.2012, 20:16   #3
Дикий
 
Аватар для D.iK.iJ
 
Регистрация: 02.06.2007
Адрес: <Noindex>
Сообщений: 2,551
Вес репутации: 355
D.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущее
По умолчанию

Цитата:
Сообщение от Sergius Посмотреть сообщение
Засунуть в мускул.А там с помощью Select ... Distinct извлечь обратно.Это самый быстрый вариант,ибо она на то и рассчитана
Мне бы со своим быдлокодингом на PHP-то разобраться... А с базами вообще никогда не работал.
D.iK.iJ вне форума   Ответить с цитированием
Старый 29.12.2012, 20:18   #4
Эксперт
 
Аватар для mnogoclipov
 
Регистрация: 17.10.2011
Сообщений: 1,281
Вес репутации: 181
mnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючек
По умолчанию

PHP код:
$text 'слово1|слово 2|слово 3|слово4|слово1|слово4|слово 3|слово 5';

$array explode("|"$text);
$result array_unique($array);
$text implode("|"$result);

echo 
$text// слово1|слово 2|слово 3|слово4|слово 5 
mnogoclipov вне форума   Ответить с цитированием
Старый 29.12.2012, 20:27   #5
Дикий
 
Аватар для D.iK.iJ
 
Регистрация: 02.06.2007
Адрес: <Noindex>
Сообщений: 2,551
Вес репутации: 355
D.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущее
По умолчанию

mnogoclipov, спасибо, это я уже сделал. Слова в 1 строке не повторяются. Они повторяются в разных строках базы (как в примере выше).

Пробовал заносить каждое слово в $array[] и удалять строки с повторами слов, но там время работы - ужас просто.
D.iK.iJ вне форума   Ответить с цитированием
Старый 29.12.2012, 20:36   #6
Эксперт
 
Аватар для mnogoclipov
 
Регистрация: 17.10.2011
Сообщений: 1,281
Вес репутации: 181
mnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючек
По умолчанию

А скиньте мне, я посмотрю.

Добавлено через 1 минуту
Прото тут разные варианты..можно array_diff заюзать. Короче нужно смотреть

Последний раз редактировалось mnogoclipov; 29.12.2012 в 20:36. Причина: Добавлено сообщение
mnogoclipov вне форума   Ответить с цитированием
Старый 29.12.2012, 20:40   #7
Дикий
 
Аватар для D.iK.iJ
 
Регистрация: 02.06.2007
Адрес: <Noindex>
Сообщений: 2,551
Вес репутации: 355
D.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущееD.iK.iJ - прекрасное будущее
По умолчанию

Вам 2 базы синонимов скануть на 60 мегабайт или скрипт? И если базы - то куда.

Добавлено через 4 минуты
Вообще, они бредовые, но нужно же с чего-то начинать при постройке и тестах синонимайзера:

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

Последний раз редактировалось D.iK.iJ; 29.12.2012 в 20:40. Причина: Добавлено сообщение
D.iK.iJ вне форума   Ответить с цитированием
Старый 29.12.2012, 20:45   #8
Мастер
 
Аватар для Sergius
 
Регистрация: 09.06.2009
Сообщений: 602
Вес репутации: 218
Sergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущее
По умолчанию

Предварительно создать таблицы mysql, а в начало скрипта установить соединение с БД и создать таблицу word_table с 2 полями-
word_value-поле,куда кладется ключ
id_str-поле,которое содержит id строки.
После работы по всем строкам оставляет только одно значение по первой попавшейся строке.

.................

PHP код:
$d=file($myfile);
for(
$i=0;$<sizeof($d);$i++):
   
$word_array=explode('|',$d[$i]);
   for (
$j=0;$j<sizeof($word_array);$j+=1):
     
$q="SELECT count(*) FROM word_table WHERE word_value=".mysql_escape_string($word_array[$j])."'";
list(
$c)=mysql_query($q);
if (
$c>0){$q="INSERT INTO word_table(id_str,word_value) VALUES($i,".mysql_escape_string($word_array[$j])."'"
$mysql_query($q);
}
   endfor;
endfor;
///после этого из таблицы взять значение по ключам.
Можно и быстрее.
for (
$i=0;$<sizeof($d);$i++):
$q="SELECT word_value FROM word_table WHERE id_str=$i";
$r=mysql_query($q);
-
получаем все слова для каждой строкиПосле можно упаковывать обратно любым способом.
endfor; 
Может содержать ошибки)))
Sergius вне форума   Ответить с цитированием
Старый 29.12.2012, 20:50   #9
Эксперт
 
Аватар для mnogoclipov
 
Регистрация: 17.10.2011
Сообщений: 1,281
Вес репутации: 181
mnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючекmnogoclipov - как роза среди колючек
По умолчанию

D.iK.iJ - ну просто любопытно было посмотреть, чего оно так тупит с таким объемом. Хотя в чистом пхп я с таким объемом не работал, поэтому все возможно
А вот насчет базы тут правильно говорят. У меня на работе база весит полтора гига. И ниче..шоркается нормально.

ЗЫ Если с базой - самый простой способ - тупо брать все слова в строке и писать в базу. Но в базе поле со словом сделать уникальным, т.е. чтобы там были только уникальные слова.
Инсертим в цикле, а потом просто из базы вытягиваем готовую базу слов без повторов.
mnogoclipov вне форума   Ответить с цитированием
Старый 29.12.2012, 20:50   #10
Мастер
 
Аватар для Sergius
 
Регистрация: 09.06.2009
Сообщений: 602
Вес репутации: 218
Sergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущееSergius - прекрасное будущее
По умолчанию

Балин,

for($i=0;$<sizeof($d);$i++):
заменить на
for($i=0;$i<sizeof($d);$i++):
под конец $r -содержит результаты работы поиска слов по строкам.Браузер съел половину,так что восстанавливать не буду....
Sergius вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Печать текстовой области web-страницы fsb-sasha Курилка 5 27.11.2011 17:37
Повторы Апокалипсис Пожелания пользователей системы 3 25.07.2010 04:39
Объем текстовой информации в новости на DLE Elektra Разработка и сопровождение сайтов 2 28.02.2010 17:06
Повторы слов в ссылках реабилитировали? llenivo Ошибки при работе с системой 12 21.03.2009 00:30
Предупреждения На Повторы Слов MS555 Пожелания пользователей системы 16 29.10.2008 13:38


Часовой пояс GMT +3, время: 13:28.