Помощь в построении перевернутого индекса - PullRequest
2 голосов
/ 03 апреля 2010

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

hashmap ["ba"] = "плохая база ячменя"

Как только я закончу токенизацию строки, я беру эту хэш-карту, сериализую ее и добавляю в текстовый файл, названный в честь ключа.

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

Я хотел бы отметить, что я использую PHP. Два языка, которые я знаю относительно близко, - это PHP и Java. Я выбрал PHP, потому что внешний интерфейс будет очень простым, и я смогу без проблем добавить такие функции, как автозаполнение / предлагаемый поиск. Я также не вижу никакой выгоды в использовании Java. Любая помощь приветствуется, спасибо.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2010

Я бы использовал один файл, чтобы получить и поместить сериализованную строку. Я бы также использовал json в качестве сериализации.

Введите данные

$string = "bad barley base";
$data = explode(" ",$string);
$hashmap["ba"] = $data;

$jsonContent = json_encode($hashmap);
file_put_contents("a-z.txt",$jsonContent);

Получить данные

$jsonContent = file_get_contents("a-z.txt");
$hashmap = json_decode($jsonContent);

foreach($hashmap as $firstTwoCharacters => $value) {
    if ($firstTwoCharacters == 'ba') {
        $wordCount = count($value);
    }
}
0 голосов
/ 09 апреля 2010

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

Предполагая, что вам нужен механизм полнотекстового поиска, я хотел бы использовать trie для структуры данных. Вы должны быть в состоянии вместить все в нем, не становясь слишком большим. Узлы, которые соответствуют слову, которое вы хотите проиндексировать, будут содержать идентификаторы документов, содержащих это слово.

...