выполнить поиск в очень большом файле ARPA за очень короткое время в Java

У меня есть файл ARPA размером почти 1 ГБ. Я должен сделать поиск в нем менее чем за 1 минуту. Я много искал, но пока не нашел подходящего ответа. Я думаю, что мне не нужно читать весь файл. Мне просто нужно перейти к определенной строке в файле и прочитать всю строку. Строки файла ARPA имеют разную длину. Я должен упомянуть, что файлы ARPA имеют определенный формат.

Формат файла

\data\

ngram 1=19

ngram 2=234

ngram 3=1013

\1-grams:

-1.7132 puluh -3.8008

-1.9782 satu -3.8368

\2-grams:

-1.5403 dalam dua -1.0560

-3.1626 dalam ini 0.0000

\3-grams:

-1.8726 itu dan tiga

-1.9654 itu dan untuk

\end\

Как вы видите в примере файла, у меня есть 19 строк по 1 грамму, 234 строки по 2 грамма и 1013 строк по 3 грамма. Я отдаю строковую часть строки программе и получаю числа слева и справа от строки. Входная строка может помочь мне узнать, в какой части файла мне нужно выполнить поиск. Мне нужно найти способ не читать файл полностью, потому что мой файл очень большой и чтение всего файла занимает много времени. Я думаю, что это хороший способ перейти к определенной строке в файле без использования индексного файла и доступа ко всей строке.

Будет здорово, если вы поможете мне выполнить мое задание.


person sepanta    schedule 26.02.2011    source источник
comment
Не могли бы вы дать нам конкретные сведения о формате файла?   -  person SamG    schedule 26.02.2011
comment
Это можно сделать, но это будет зависеть от структуры файла. Можете ли вы рассказать нам о формате?   -  person Tom Anderson    schedule 26.02.2011
comment
Таким образом, вы не можете прочитать весь файл даже один раз, чтобы создать индекс (1 ГБ не такой уж большой)? Невозможно получить доступ к определенной строке текстового файла без сканирования всего файла.   -  person Dmitri    schedule 09.06.2011
comment
Вам нужно указать, что именно вы ищете, иначе мы не сможем помочь. Какие у вас входные параметры? Если вы ищете просто произвольный текст, то не избежать просмотра всего файла.   -  person fishinear    schedule 16.07.2016


Ответы (1)


Я не знаю, что такое файл ARPA. Я предполагаю, что это какой-то файл, содержащий текст.

Что вы хотите сделать, так это сначала проиндексировать файл, чтобы вы могли связать номера строк в файле со строками.

Это большой файл, поэтому вы, вероятно, сохраните свой индекс в отдельном файле.

Во-первых, перед поиском пользователя вы должны запустить свой index. Затем вы будете искать в своем индексе номера строк, в которых находится строка, которую ищет пользователь.

person Speck    schedule 26.02.2011
comment
Большое спасибо за ваш ответ. Я уверен, что мне не придется индексировать свой файл, потому что это занимает много времени. Мой лектор сказал, что мне пришлось использовать другой способ поиска в короткие сроки. Кроме того, файл ARPA — это что-то вроде текстового файла, но он состоит из разных частей, в которых есть строки разной длины. в начале файла указывается количество строк каждой части. - person sepanta; 26.02.2011
comment
Если вы не сообщите нам, что вы ищете, и основной формат файла - мы не можем вам ничего сказать, кроме как читать в каждой строке (используйте BufferedReader и вызовите .ReadLine()) в цикле и проверьте, является ли текущий строка соответствует вашим критериям. - person nos; 26.02.2011
comment
@sepanta: Лектор? Если это домашнее задание, пожалуйста, отметьте его как таковое. - person andersoj; 27.02.2011