Разбор текстового файла с помощью PHP и сохранение смещения каждого слова - PullRequest
0 голосов
/ 07 мая 2011

Я пытаюсь проанализировать текстовый файл слово за словом, и мне нужно иметь возможность сохранить смещение каждого слова от начала файла, чтобы я мог затем найти точный экземпляр слова в тексте файл. Сейчас я имею дело с некоторыми очень большими текстовыми файлами, поэтому мне было интересно, каков наиболее эффективный способ сделать это?

РЕДАКТИРОВАТЬ: некоторые подробности.

У меня будет две таблицы в базе данных. Давайте назовем их СЛОВАми, в которых хранятся слова и ССЫЛКИ, которые являются ссылками для каждого слова в файле.

Таблица ССЫЛКИ будет выглядеть примерно так:

id INT PRIMARY
file_id INT /* ID of the text file */
offset INT /* Offset from the start of the file to get to the start of the word */

Тогда у каждой записи WORDS есть referenced_id, который относится к записи в ССЫЛКАХ.

Это упрощенный пример. В действительности у меня будет другая таблица, которая связывает каждую запись из СЛОВ с одной или несколькими записями в ССЫЛКАХ, поскольку во многих файлах может быть много экземпляров каждого слова.

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

1 Ответ

0 голосов
/ 07 мая 2011

самое эффективное время бу или используемая память?

  1. По времени - загрузить все файлы в память и проанализировать их. А затем выскакивают каждое слово, сохраняя его (слово) длиной

$ page = file_get_contents ($ file); $ arr_w = explode ("", $ page);

$ arr_c = array (); количество слов $ arr_o = array (); смещение слов:)

$ с = 0; foreach ($ arr_w как $ w) { $ C ++; str_replace ($ page, $ w, "", 1); $ Arr_c [$ ш] ++; $ arr_o [$ c] = strlen ($ w) + 1; }

Это просто идея ...

  1. При использовании памяти - вам нужно будет постоянно читать файл и анализ. Это сильно отличается от этого примера ...
...