ситывание большого числа файлов - Форум успешных вебмастеров - GoFuckBiz.com - Страница 3
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB89.7026
BTC/USD68644.6161
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 31.10.2010, 10:50
Start Post: ситывание большого числа файлов 
  #21
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
По умолчанию

какой способ для считывание 100k+ текстовых файлов, самый быстрый ?

del

тормозилось походу потому что считывал в переменную

при записи в файл и последуюющем считывании из него, работает быстрее

Последний раз редактировалось qazxcvbnm; 31.10.2010 в 11:01.
qazxcvbnm вне форума  
Старый 31.10.2010, 16:17   #22
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

ошибка возникает на стадии формирования массива $result до использования функции array_count_values





Цитата:
for ($content_c=0; $content_c<$content_size; $content_c++)
{
if (!preg_match("/[^a-z\-\']/", $content[$content_c]) && !preg_match("/[^a-z]{2,}/", $content[$content_c]))
{
$x = $content[$content_c];

$content[$content_c] = preg_replace("/[^a-z]/", "*", $content[$content_c]);

if (substr_count($content[$content_c], '*') <= 2 && !stristr(' '.$content[$content_c], ' *') && !stristr($content[$content_c].' ', '* ') && $content[$content_c] != '')
{
$result[] = $x;
}
}
unset($content[$content_c]);
}

Последний раз редактировалось qazxcvbnm; 31.10.2010 в 16:30.
qazxcvbnm вне форума  
Старый 31.10.2010, 16:39   #23
pina
хде мой компот?!
 
Регистрация: 07.01.2008
Сообщений: 327
Бабло: $31276
Отправить сообщение для pina с помощью ICQ
По умолчанию

как вариант, с мускулем

создай таблу с тремя столбцами
для хеша - уникальное
для самого слова
и собсно кол-во вхождений

хеш бери md5, хотя по идее не принципиально

дальше как только ты получаешь слово
делай инсерт, если ошибка дублирования делай update кол-ва вхождений плюс один
pina вне форума  
Старый 31.10.2010, 16:43   #24
RedHead
Senior Member
 
Аватар для RedHead
 
Регистрация: 26.08.2008
Адрес: UA
Сообщений: 2,941
Бабло: $402835
По умолчанию

PHP код:
<?php
$fin
=fopen('in.txt''a+');
$fouta=fopen("a.txt","w+");
$foutb=fopen("b.txt","w+");
$foutc=fopen("c.txt","w+");
$foutd=fopen("d.txt","w+");
$foute=fopen("e.txt","w+");
$foutf=fopen("f.txt","w+");
$foutg=fopen("g.txt","w+");
$fouth=fopen("h.txt","w+");
$fouti=fopen("i.txt","w+");
$foutj=fopen("j.txt","w+");
$foutk=fopen("k.txt","w+");
$foutl=fopen("l.txt","w+");
$foutm=fopen("m.txt","w+");
$foutn=fopen("n.txt","w+");
$fouto=fopen("o.txt","w+");
$foutp=fopen("p.txt","w+");
$foutq=fopen("q.txt","w+");
$foutr=fopen("r.txt","w+");
$fouts=fopen("s.txt","w+");
$foutt=fopen("t.txt","w+");
$foutu=fopen("u.txt","w+");
$foutv=fopen("v.txt","w+");
$foutw=fopen("w.txt","w+");
$foutx=fopen("x.txt","w+");
$fouty=fopen("y.txt","w+");
$foutz=fopen("z.txt","w+");
$fout_=fopen("_.txt","w+");
while(!
feof($fin)){
    
$input=fgets($fin8192);
    
preg_match_all('/([^\W+-]+)/'trim($input), $matches);
    foreach (
$matches[0] as $word){
    
$word strtolower($word);
    switch (
$word[0]) {
        case 
"a"fputs($fouta,$word."\r\n");break;
        case 
"b"fputs($foutb,$word."\r\n");break;
        case 
"c"fputs($foutc,$word."\r\n");break;
        case 
"d"fputs($foutd,$word."\r\n");break;
        case 
"e"fputs($foute,$word."\r\n");break;
        case 
"f"fputs($foutf,$word."\r\n");break;
        case 
"g"fputs($foutg,$word."\r\n");break;
        case 
"h"fputs($fouth,$word."\r\n");break;
        case 
"i"fputs($fouti,$word."\r\n");break;
        case 
"j"fputs($foutj,$word."\r\n");break;
        case 
"k"fputs($foutk,$word."\r\n");break;
        case 
"l"fputs($foutl,$word."\r\n");break;
        case 
"m"fputs($foutm,$word."\r\n");break;
        case 
"n"fputs($foutn,$word."\r\n");break;
        case 
"o"fputs($fouto,$word."\r\n");break;
        case 
"p"fputs($foutp,$word."\r\n");break;
        case 
"q"fputs($foutq,$word."\r\n");break;
        case 
"r"fputs($foutr,$word."\r\n");break;
        case 
"s"fputs($fouts,$word."\r\n");break;
        case 
"t"fputs($foutt,$word."\r\n");break;
        case 
"u"fputs($foutu,$word."\r\n");break;
        case 
"v"fputs($foutv,$word."\r\n");break;
        case 
"w"fputs($foutw,$word."\r\n");break;
        case 
"x"fputs($foutx,$word."\r\n");break;
        case 
"y"fputs($fouty,$word."\r\n");break;
        case 
"z"fputs($foutz,$word."\r\n");break;
        default:  
fputs($fout_,$word."\r\n");break;
        }
    }
}
fclose($fin);
$fout fopen("result.txt","w+");
for (
$i 'a'$i 'z'$i++)
    {
    unset(
$fin);
    
$fin file ("$i.txt");
    
$result array_count_values($fin);
    foreach (
$result as $key => $value
        {
        if (
$value>1//можно задать минимальную частоту для вывода
            

            
fputs ($fout,trim($key).";".trim($value)."\r\n");
            }
        }
    }
fclose($fout);
?>
идет построчное считывание так что от оперативки не зависит.
чтобы на подсчете повторений не дохло - разбиваем слова начинающиеся на букву а в файл а.txt, b в b.txt , заодно и посмотрим "мусор" в _.txt (если и так дохнет, то можем слова до 10 символов писать в а1, от10до20 в а2.тхт и т.д.)

так же можем сделать вывод от какой-то минимальной частоты.

сделал на быструю руку, вроде норм, но надо смотреть.

RedHead вне форума  
Старый 31.10.2010, 17:39   #25
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

qazxcvbnm, ну mysql прикручивай, я ж тебе в первой своей мессаге сказал про него сам прошел через подобные мучения, только у меня статистики больше на несколько порядков
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 31.10.2010, 18:29   #26
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от pina Посмотреть сообщение
как вариант, с мускулем

создай таблу с тремя столбцами
для хеша - уникальное
для самого слова
и собсно кол-во вхождений

хеш бери md5, хотя по идее не принципиально

дальше как только ты получаешь слово
делай инсерт, если ошибка дублирования делай update кол-ва вхождений плюс один
и сколько оно по времени займёт для 17kk слов ??

RedHead спасибо

Последний раз редактировалось qazxcvbnm; 31.10.2010 в 18:41.
qazxcvbnm вне форума  
Старый 31.10.2010, 19:17   #27
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

qazxcvbnm,
кстати я так и не понял, откуда у тебя 17кк слов. В англ. языке более-менее используемых слов под 100к - и ни один америкос столько слов не знает. 17кк откуда блять?

ты в цикле когда по словам бежишь вместо:
$result[] = $x;

напиши:
$result[$x]++;

и все будет тип-топ и не надо всякие там функции подсчета массивов применять
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума  
Старый 31.10.2010, 19:40   #28
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от chesser Посмотреть сообщение
qazxcvbnm,
кстати я так и не понял, откуда у тебя 17кк слов. В англ. языке более-менее используемых слов под 100к - и ни один америкос столько слов не знает. 17кк откуда блять?
вообщето там 60kk http://gofuckbiz.com/showthread.php?t=20017 (но из-за ограничения оперативки обработалось только 17kk)

хотя уже всё обработалось благодаря коду redhead


Цитата:
Сообщение от chesser Посмотреть сообщение
и не надо всякие там функции подсчета массивов применять
и как подсчитывать количество вхождений ?
qazxcvbnm вне форума  
Старый 31.10.2010, 20:01   #29
citrix
конверчу-хуеверчу
 
Аватар для citrix
 
Регистрация: 16.09.2009
Сообщений: 605
Бабло: $103180
По умолчанию

бля какие нахуй 60 миллионов, в 2006 году было около 1кк.

update: да, чет я проебался.
60 лямов это вся рыба, я чет про колво всех слов в анг.языке подумал)

Последний раз редактировалось citrix; 31.10.2010 в 20:07.
citrix вне форума  
Старый 31.10.2010, 20:05   #30
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от citrix Посмотреть сообщение
бля какие нахуй 60 миллионов, в 2006 году было около 1кк.
по ссылке пройди, там 110k текстов, в которых примерно 60kk слов, скрипт насчитал около 130k уникальных без мусора
qazxcvbnm вне форума  
Старый 01.11.2010, 00:59   #31
JMen
учу php
 
Регистрация: 04.04.2008
Сообщений: 1,162
Бабло: $68290
По умолчанию

Пипец, я так и не понял зачем там все те огороды нужны... Счас аську скину.
__________________
Подпись??? Не продам!
JMen вне форума