Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Задача следующая:

есть файл со словами (очень большой, например 500 мегабайт, или 10.000.000 слов, как пример)

мама смотрит в окно

моя книга очень интересная

книга и авто не совместимы

все слова в столбик

есть второй файл, со словами по которым делать выборку, пример:

авто

окно

книга

суть скрипта следующая:

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

т.е.

пример на perl:

foreach my $request (keys %request)

{

if ($keyword =~ /(?:^|\s+)$request(?:\s+|$)/i)

{

open(F, ">>$request");

print F "$keyword\n";

close(F);

}

как видите, в первом файле могут быть строки вроде:

книга и авто не совместимы

в свою очередь во втором файле мы видим что нам нужны все строки где есть слово: "авто" и "книга"

т.е. мы должды записать строку: "книга и авто не совместимы" в файл: "авто"

И (!)

эту же строку записать в файл: "книга"

т.е. вариант с объединением всех запросов для нахождения в один регекс не катит т.к. будет найдено только одно совпадение

посоветовали сделать сначала выборку путем комманды: "cat $file|grep -P '(?:^|\s+)(?:окно|авто|книга)(?:\s+|$)' >tmp/complete"

и потом уже разбирать файл complete построчно

НО очень долго получается разбирать его

т.е. cat + grep работает очень быстро

а вот выборка по нужным запросом долго (файл в миллион строк, разбирается около часа)

т.е. получается в данном случае нам надо три запроса:

окно

книга

авто

т.е. если cat + grep насобирал миллион записей, то при выборке будет обработано 3.000.000 записей

у меня этих запросов сотни, соответсвенно кол-во выборок увеличивается не по детски =)

задача написать то что мне нужно на perl или Си под linux

работать это должно максимально быстро, запросов которые искать будет очень много (тысячи), слов где искать тоже много (базы по 6-7 гигов, по 200-300 миллионов слов)

ася для инфы 9603308

о цене договоримся

16 лет назад
coldsteam
Алексей 
52 годаРоссия
16 лет в сервисе
Был
6 лет назад