2011-08-31 2 views
2

J'ai les noms de tous les employés de mon entreprise (5000+). Je veux écrire un moteur qui peut trouver à la volée des noms dans des articles en ligne (blogs/wikis/documents d'aide) et les taguer avec le tag "mailto" avec l'email de l'utilisateur.Marquage des noms en utilisant lucene/java

A partir de maintenant, je prévois de supprimer tous les mots d'arrêt de l'article, puis de rechercher chaque mot dans un index lucene. Mais même dans ce cas, je vois beaucoup de requêtes qui touchent les index, par exemple s'il y a un article avec 2000 mots et seulement deux références aux noms de personnes, alors probablement il y aura 1000 requêtes lucene.

Existe-t-il un moyen de réduire ces requêtes? Ou un tout autre moyen de parvenir à la même chose? Merci d'avance

+0

Je ne suis pas certaine de suivre, la liste des employés n'est-elle pas prédéfinie? ces noms ne sont-ils pas vos requêtes? – amit

+0

@amit liste des employés est 5000, demandez-vous si je devrais rechercher chaque nom dans l'article? 5000 requêtes dans un document de 2000 mots? Je me demandais autre chose. – Sap

+0

vous avez un seul document? si vous le faites, lucene ne vous aidera pas beaucoup .. – amit

Répondre

1

http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm
Cet algorithme peut vous être utile. La façon dont cela fonctionnerait est que vous compilez d'abord la liste entière des noms dans une machine d'état finie géante (ce qui prendrait probablement un certain temps), mais une fois que cette machine d'état est construite, vous pouvez la parcourir autant de documents que vous voulez. détecter les noms assez efficacement.
Je pense qu'il ne regarderait chaque caractère de chaque document qu'une seule fois, il devrait donc être beaucoup plus efficace que de marquer le document et de comparer chaque mot à une liste de noms connus.
Il existe un certain nombre d'implémentations disponibles pour différentes langues sur le Web. Vérifiez-le.

+0

Je pense qu'il essaie de traiter l'entrée d'un utilisateur à la volée pour trouver des tags. Il ne semble pas qu'il essaie de faire du balisage par lots. –

+0

Cela a du sens. J'exécute une tâche asynchrone toutes les cinq secondes pour faire le marquage. Votre réponse est utile. Merci beaucoup – Sap

5

Si vous avez seulement 5000 noms, je voudrais simplement les coller dans une table de hachage en mémoire au lieu de déranger avec Lucene. Vous pouvez les hacher de plusieurs façons (par exemple, surnoms, premier-dernier ou dernier-premier, etc.) tout en ayant une empreinte mémoire relativement faible et des performances vraiment efficaces.

+0

Non, j'ai beaucoup plus de noms pour l'amour de la simplicité, j'ai utilisé le numéro "5000", ils sont en réalité beaucoup plus. – Sap

+2

OK, mais lorsque vous posez une question, veuillez fournir suffisamment d'informations pour une réponse appropriée. En vous retenant, vous perdez du temps pour tout le monde. Pourriez-vous décrire le problème que vous tentez de résoudre? –

+0

La raison pour laquelle je dois retenir certaines informations est que je travaille pour une entreprise et que je ne peux pas donner beaucoup de détails sur ce sur quoi je travaille. En ce qui concerne la question, le nombre exact est 99655 qui augmentera dans le temps. En supposant que je stocke chacun d'eux dans un HashMap suggérez-vous de chercher dans le hashMap pour chaque mot de l'article? – Sap

Questions connexes