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

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

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

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

del

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

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

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

удаление слов с лишними символами
qazxcvbnm вне форума  
Старый 31.10.2010, 14:14   #13
JMen
учу php
 
Регистрация: 04.04.2008
Сообщений: 1,162
Бабло: $68290
По умолчанию

Цитата:
Сообщение от pina Посмотреть сообщение
Бля тупею... Вот эта часть меня чета накаляет...
...
Да там много чего "накаляет". Автор, огласи задачу, скажи что у тебя есть и что ты хочешь получить.

Вот эту функцию php посмотри
http://php.net/manual/en/function.str-word-count.php
__________________
Подпись??? Не продам!
JMen вне форума  
Старый 31.10.2010, 14:22   #14
JMen
учу php
 
Регистрация: 04.04.2008
Сообщений: 1,162
Бабло: $68290
По умолчанию

Цитата:
Сообщение от qazxcvbnm Посмотреть сообщение
удаление слов с лишними символами
условно..:

//читаем файл
$s = file_get_contens(.any.);

//получаем все слова
$words = str_word_count($s, 1);
unset($s);

//удаляем плохие
foreach ($words as $id => $word) {
if (strpos($word, .any.)) unset($words[$id]);
}

//записываем в файл
$fp = fopen(.any., 'w');
fwrite($fp, implode("\n", $words));
fclose($fp);
__________________
Подпись??? Не продам!
JMen вне форума  
Старый 31.10.2010, 14:22   #15
pina
хде мой компот?!
 
Регистрация: 07.01.2008
Сообщений: 327
Бабло: $31276
Отправить сообщение для pina с помощью ICQ
По умолчанию

PHP код:
preg_match("/[^a-z\-\']/"$content[$content_c]) 
вот эта часть даст в результате 0 если в слове только символы a-z и -
отрицание (!)
даст 1 только если в слове есть a-z и -, если в слове есть другие символы выдаст 0.
Если выдает 0, то уже вторая часть IF не рассматривается, т.к. выражение заведомо ложно. Если будет 1, то вторая часть IF имеет смысл только в случае двух или более подряд идущих тире(-).

Это только одна строка) Могу кстати и ошибаться...
pina вне форума  
Старый 31.10.2010, 14:35   #16
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

JMen удаление лишних символов это часть того кода который напрягает pina

задача - посчитать статистику слов в 110k английских текстах

из-за ограничения на оперативную память считается только для 28k текстов

pina с регулярками всё нормально, вопрос в том почему массив требует в 10 раз больше памяти чем надо
qazxcvbnm вне форума  
Старый 31.10.2010, 14:44   #17
pina
хде мой компот?!
 
Регистрация: 07.01.2008
Сообщений: 327
Бабло: $31276
Отправить сообщение для pina с помощью ICQ
По умолчанию

Цитата:
Сообщение от qazxcvbnm Посмотреть сообщение
JMen удаление лишних символов это часть того кода который напрягает pina

задача - посчитать статичтику слов в 110k английских текстах

из-за ограничения на оперативную память считается только для 28k текстов

pina с регулярками всё нормально, вопрос в том почему массив требует в 10 раз больше памяти чем надо
минимум занимаемой памяти:
8*17000000*4 = 518мегабайт
8 - средняя длина слова
17000000 - приблизительное кол-во слов
4 - байта под один символ
---------------------------------------------

объясни задачу того кода который я в первой мессаге запостил, ибо смысла его я до сих пор не понимаю
pina вне форума  
Старый 31.10.2010, 14:49   #18
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от pina Посмотреть сообщение
минимум занимаемой памяти:
8*17000000*4 = 518мегабайт
8 - средняя длина слова
17000000 - приблизительное кол-во слов
4 - байта под один символ
ну даже если по 4 байта, то всё равно не 2 гектара как у меня

Цитата:
Сообщение от pina Посмотреть сообщение
объясни задачу того кода который я в первой мессаге запостил, ибо смысла его я до сих пор не понимаю
задача выбрать в списке слов те которые содержат буквы, тире и апострофы, не более 2 небуквенных символов, которые не идут подряд + слова должны начинаться и заканчиваться буквами
qazxcvbnm вне форума  
Старый 31.10.2010, 15:05   #19
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

так ты же пытаешься что-то там сортировать, считать и прочие операции над массивом - это же все тоже резервирование памяти.
и используй unset где нужно и возможно.

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

Цитата:
Сообщение от chesser Посмотреть сообщение
так ты же пытаешься что-то там сортировать, считать и прочие операции над массивом - это же все тоже резервирование памяти.
и используй unset где нужно и возможно.

сделал unset всё равно памяти жрётся столько же

Цитата:
$content_size = sizeof($content);

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]);
}
Цитата:
Сообщение от chesser Посмотреть сообщение
А где код обрывается? в первом цикле?
какой код ?
qazxcvbnm вне форума  
Старый 31.10.2010, 15:56   #21
chesser
автоматизирую интернеты
 
Аватар для chesser
 
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
По умолчанию

в этом месте отсутствие/присутствие unset не критично. Я говорил про операции ниже: array_count_values, asort, array_reverse, sort
К примеру, у тебя есть строка:
$new_array_x = array_count_values($result);

ты тут над 500мб массивом(ну примерно) применил тяжелую функцию, но это х с ней.... после чего ты оставил жить эту переменную и создал еще одну, примерно такую же размером, так? вот тут полезно сделать unset($result) раз ты ее не используешь дальше.

а про код.... в каком конкретно месте у тебя код выдает ошибку? как я понял выдается ошибка о нехватке памяти, где именно?
мы ж скрипт твой не запускаем, а чисто визуально
__________________
USA и NL серверы и VPS | wiki | блог | Drupal | NginxТДС
Ave, Google, morituri te salutant! © chesser
chesser вне форума