2

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

HashMap [ «ба»] = «плохой ячмень база»

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

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

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

+0

Возможно ли использование базы данных? – VolkerK

+0

К сожалению, нет. Я должен индексировать и выбирать все самостоятельно. – tipu

ответ

2

Я бы использовал один файл, чтобы получить и поместить сериализованную строку. Я бы также использовал 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

Я работаю с файлом формата 29mb. Вы не думаете, что один файл, содержащий json_encode ($ hashmap), будет неэффективным. – tipu

+0

Вы можете разбить до того, где у каждого альфа-символа есть собственный файл. a.txt, b.txt, c.txt. Для поиска данных да, это будет облагать налогом. Вы можете писать только в a-z.txt, когда происходит добавление. Это зависит от того, для чего вы используете данные? –

0

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

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

+0

Вы абсолютно правы, полагая, что я создаю полнотекстовую поисковую систему. Я сейчас смотрю на структуру данных trie, и это намного эффективнее, чем то, что я делаю в данный момент (это то, что я описал выше). Я хочу реализовать это сейчас, спасибо! – tipu

+0

перейдите сюда http://www.ics.uci.edu/~chenli/pubs.html и посмотрите на статью под названием Эффективный интерактивный поиск нечетких ключевых слов – jshen

Смежные вопросы