Extraction/Reconnaissance d'entités avec des outils gratuits tout en alimentant l'index Lucene


J'étudie actuellement les options pour extraire les noms de personnes, les emplacements, les mots techniques et les catégories du texte (beaucoup d'articles du Web) qui seront ensuite alimentés dans un index Lucene/ElasticSearch. Les informations supplémentaires sont ensuite ajoutées sous forme de métadonnées et devraient augmenter la précision de la recherche.

Par exemple, lorsque quelqu'un interroge 'wicket', il devrait pouvoir décider s'il veut dire le sport de cricket ou le projet Apache. J'ai essayé de mettre en œuvre cela par moi même avec un succès mineur donc loin. Maintenant, j'ai trouvé beaucoup d'outils, mais je ne sais pas si ils sont adaptés à cette tâche et qui s'intègre bien avec Lucene ou si la précision de l'extraction d'entités est assez élevé.

Mon questions:

  • quelqu'un a une expérience avec certains des outils énumérés ci-dessus et sa précision/rappel? Ou s'il y a des données de formation requises + disponibles.
  • Y a-t-il des articles ou des tutoriels où je peux commencer avec l'extraction d'entités(NER) pour chaque outil?
  • Comment peuvent-ils être intégrés à Lucene?

Voici quelques questions liées à ce sujet:

Author: Community, 2011-09-17

4 answers

Le problème auquel vous êtes confronté dans l'exemple 'wicket' est appelé entité désambiguïsation, pas extraction/reconnaissance d'entité (NER). NER peut être utile mais seulement lorsque les catégories sont suffisamment spécifiques. La plupart des systèmes NER n'ont pas assez de granularité pour faire la distinction entre un sport et un projet logiciel (les deux types seraient en dehors des types généralement reconnus: personne, organisation, emplacement).

Pour la désambiguïsation, vous avez besoin d'une base de connaissances contre laquelle les entités sont désambiguïté. DBpedia est un choix typique en raison de sa large couverture. Voir ma réponse pour Comment utiliser DBPedia pour extraire des balises/mots clés du contenu? où je fournis plus d'explications, et mentionne plusieurs outils de désambiguïsation, notamment:

Ces outils utilisent souvent une API indépendante du langage comme REST, et je ne le fais pas savoir qu'ils fournir directement Lucene soutien, mais j'espère que ma réponse a été bénéfique pour le problème que vous essayez de résoudre.

 16
Author: John Lehmann, 2017-05-23 12:33:59

Vous pouvez utiliser OpenNLP pour extraire des noms de personnes, de lieux, d'organisations sans formation. Vous utilisez simplement des modèles préexistants qui peuvent être téléchargés à partir d'ici: http://opennlp.sourceforge.net/models-1.5/

Pour un exemple sur la façon d'utiliser l'un de ces modèle, voir: http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html#tools.namefind

 2
Author: Abul Fayes, 2014-07-08 13:16:01

Rosoka est un produit commercial qui fournit un calcul de "Saillance", qui mesure l'importance de l'expression ou de l'entité pour le document. La saillance est basée sur l'usage linguistique et non sur la fréquence. En utilisant les valeurs de saillance, vous pouvez déterminer le sujet principal du document dans son ensemble. La sortie est dans votre choix de XML ou JSON ce qui le rend très facile à utiliser avec Lucene. Il est écrit en java. Il existe une version Amazon Cloud disponible à https://aws.amazon.com/marketplace/pp/B00E6FGJZ0 . Le coût pour l'essayer est de 0,99 $/heure. La version Rosoka Cloud ne dispose pas de toutes les fonctionnalités de l'API Java disponibles que la version complète de Rosoka. Oui, les deux versions effectuent une désambiguïsation d'entité et de terme en fonction de l'utilisation linguistique.

La désambiguïsation, qu'elle soit humaine ou logicielle, nécessite qu'il y ait suffisamment d'informations contextuelles pour pouvoir déterminer la différence. Le contexte peut être contenu dans le document, dans une contrainte de corpus, ou dans le contexte des utilisateurs. Le premier étant plus spécifique, et le dernier ayant la plus grande ambiguïté potentielle. C'est-à-dire taper le mot clé "guichet" dans une recherche Google, pourrait faire référence à cricket, au logiciel Apache ou au personnage Ewok de Star Wars (c'est-à-dire une entité). Le général La phrase "Le guichet est gardé par le batteur" a des indices contextuels dans la phrase pour l'interpréter comme un objet. "Wicket Wystri Warrick était un scout Ewok masculin" devrait entrez " Wicket "comme le nom donné à la personne entité"Wicket Wystri Warrick". "Bienvenue à Apache Wicket "a les indices contextuels que" Wicket " fait partie d'un nom de lieu, etc.

 0
Author: mike, 2013-10-28 13:42:58

Dernièrement, j'ai joué avec stanford crf ner. Ils ont publié quelques versions http://nlp.stanford.edu/software/CRF-NER.shtml

La bonne chose est que vous pouvez former votre propre classificateur. Vous devez suivre le lien qui contient les directives sur la façon de former votre propre NER. http://nlp.stanford.edu/software/crf-faq.shtml#a Malheureusement, dans mon cas, les entités nommées sont pas efficacement extraites du document. La plupart des entités passent inaperçues.

Juste au cas où vous le trouveriez utile.

 0
Author: Abhro, 2015-09-26 06:25:22