2

Cela fait partie d'une recherche d'information que je fais pour l'école. Le plan consiste à créer une hashmap de mots en utilisant les deux premières lettres du mot comme une clé et tous les mots avec les deux lettres enregistrées en tant que valeur de chaîne. Ainsi,Aide à la construction d'un index inversé

hashmap [ « ba ​​»] = « mauvaise base de l'orge »

Une fois que je suis fait tokenizing une ligne que je prends ce hashmap, sérialisation, et l'annexer au fichier texte du nom de la clé. L'idée est que si je prends mes données et que je les déploie sur des centaines de fichiers, je vais réduire le temps nécessaire pour effectuer une recherche en diminuant la densité de chaque fichier. Le problème que je rencontre est quand je fais plus de 100 fichiers dans chaque exécution, il arrive à s'étouffer sur la création de quelques fichiers pour une raison quelconque et donc ces entrées sont vides. Y a-t-il un moyen de rendre cela plus efficace? Cela vaut-il la peine de continuer ou devrais-je l'abandonner?

Je voudrais mentionner que j'utilise PHP. Les deux langues que je connais relativement intimement sont PHP et Java. J'ai choisi PHP parce que le frontal sera très simple à faire et je serai en mesure d'ajouter des fonctionnalités comme la complétion automatique/suggestion de recherche sans problème. Je ne vois aucun avantage à utiliser Java. Toute aide est appréciée, merci.

+0

L'utilisation d'une base de données serait-elle une option? – VolkerK

+0

Malheureusement pas. Je dois indexer et sélectionner tout par moi-même. – tipu

Répondre

2

Je voudrais utiliser un seul fichier pour obtenir et mettre la chaîne sérialisée. J'utiliserais aussi json comme sérialisation.

Mettre les données

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

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

Obtenir les données

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

foreach($hashmap as $firstTwoCharacters => $value) { 
    if ($firstTwoCharacters == 'ba') { 
     $wordCount = count($value); 
    } 
} 
+0

Je travaille avec un fichier txt 29mb. Vous ne pensez pas qu'un seul fichier contenant json_encode ($ hashmap) serait inefficace. – tipu

+0

Vous pouvez décomposer à l'endroit où chaque caractère alpha a son propre fichier. a.txt, b.txt, c.txt. Pour la recherche de données oui, cela serait taxant. Vous ne pouvez écrire dans a-z.txt que lorsqu'un ajout se produit. Cela dépend vraiment de ce que vous utilisez les données? –

0

Vous n'avez pas expliqué le problème que vous essayez de résoudre. Je suppose que vous essayez de créer un moteur de recherche en texte intégral, mais vous n'avez pas d'identifiants de document dans votre hashmap, donc je ne suis pas sûr de la façon dont vous utilisez la hashmap pour trouver les documents correspondants.

En supposant que vous vouliez un moteur de recherche de texte intégral, je voudrais utiliser un trie pour la structure de données. Vous devriez pouvoir y mettre tout sans que cela ne devienne trop grand. Les nœuds qui correspondent à un mot que vous souhaitez indexer contiendraient les identifiants des documents contenant ce mot.

+0

Vous avez absolument raison de supposer que je fais un moteur de recherche de texte intégral. Je jette un coup d'oeil à la structure de données trie pour le moment et c'est tellement plus efficace que ce que je fais en ce moment (ce que j'ai décrit ci-dessus). Je cherche à mettre en œuvre ceci maintenant, merci! – tipu

+0

allez ici http://www.ics.uci.edu/~chenli/pubs.html et regardez le document intitulé Efficient Interactive Fuzzy Keyword Search – jshen