2010-06-09 5 views
3

I ont une liste de chaînes (noms d'entreprise, dans ce cas), et un programme Java qui extrait une liste des choses qui ressemblent à des noms d'entreprises de texte essentiellement non structurées. Je dois faire correspondre chaque élément du texte extrait à une chaîne de la liste. Avertissement: le texte non structuré contient des fautes de frappe, des choses comme "Blah, Inc." dénommé "Blah", etc. J'ai essayé Levenshtein Edit Distance, mais cela échoue pour des raisons prévisibles. Existe-t-il des méthodes éprouvées de lutte contre ce problème? Ou suis-je de retour à la saisie manuelle des données?disambiguating entités nommées en Java

Répondre

3

Ce n'est pas un problème simple, et il y a des entreprises entières construites autour d'essayer de le résoudre (même pour les jeux de correspondance réduits comme noms de sociétés par rapport au cas général).

Si vous pouvez identifier un nombre discret de motifs que les noms d'entreprises valides tombent dans, et que le bruit ne tombe pas dans, alors vous pourriez aborder cela avec une série d'expression régulière.

Si les motifs sont difficiles ou trop nombreux, alors vous pourriez essayer de développer un modèle probabiliste, peut-être quelque chose comme un réseau bayésien. Vous prenez un sous-ensemble de vos données pour la formation, et peut-être un deuxième sous-ensemble pour une validation rapide, et développer le réseau. Les techniques peuvent inclure la programmation génétique ou la mise en place d'un réseau de neurones. Cette approche n'est évidemment pas légère, et vous voudrez probablement considérer votre besoin soigneusement avant de descendre cette route.

2

Dans le travail que nous faisons dans mon entreprise, nous traitons ce type de problème tout le temps. Les efforts les plus réussis que j'ai vus utilisent seulement quelques pages de code Python. Python est excellent pour la dissection et l'analyse de chaînes, et vous pouvez appeler une routine Python à partir de votre programme Java. Comme Greg l'a dit, la bonne réponse dépend fortement de la qualité de votre texte non structuré. Une bonne façon de commencer est de caractériser quantitativement la façon dont il s'aligne avec votre texte d'or. (Par exemple, vous pouvez trouver que vous pouvez correspondre à 80% en ajoutant simplement des chaînes de match alternatives comme "Blah" et "BLAH INC" au lieu de simplement "Blah Inc.")

4

Vous voudrez peut-être jeter un oeil à Apache Stanbol, il branche les moteurs NER (je pense que l'on est basé sur un gazetier que vous fournissez) et reliant les moteurs pour résoudre vos entités détectées. Je ne l'ai pas utilisé moi-même et il est encore en incubation, mais pourrait convenir à ce que vous cherchez.

Il y a aussi un peu de recherche dans cet espace sur la piste Population Base de connaissances TAC (entité de liaison). La tâche apparaît dans différents endroits et vous devriez aussi avoir de la chance dans des conférences comme ACL, EMNLP, SIGIR, etc (cette liste n'est en aucun cas complète).

Les systèmes de TAC contiennent un lien vers un sous-ensemble de Wikipédia, ce qui pourrait aider à votre variation de nom depuis les pages ont « réexpédie », qui sont des alias essentiellement pour une page particulière. Par exemple, les pages suivantes redirigent vers "Apple Inc.", mais vous souhaitez probablement extraire les redirections à partir d'une image brute de Wikipedia ou d'une source propre comme DBPedia ou Freebase.

  • AAPL
  • d'Apple Company
  • Apple Computer
  • Apple Computer Co.
  • Apple Computer Inc.
  • Apple Computer Incorporated
  • Apple Computer, Inc
  • Apple Computer, Inc.
  • Apple Inc
  • d'Apple Incorporez
  • d'Apple Incorporated
  • d'Apple compputer
  • ordinateur Apple Inc
  • Apple Inc
  • d'Apple inc.
  • ...
Questions connexes