web-dev-qa-db-fra.com

Existe-t-il un algorithme permettant de détecter le "sujet principal" d'une phrase en anglais?

J'essaie de savoir s'il existe un algorithme connu capable de détecter le "concept clé" d'une phrase.

Le cas d'utilisation est le suivant:

  1. L'utilisateur entre une phrase sous forme de requête (le poulet at-il le même goût que la dinde?)
  2. Notre système identifie les concepts de la phrase (poulet, dinde)
  3. Et il lance une recherche sur le contenu de notre corpus

Ce qui nous manque, c’est d’identifier le véritable "sujet" de la phrase. La phrase "le poulet a-t-il le même goût que la dinde" a pour thème principal "poulet", car l'utilisateur pose des questions sur le goût du poulet. Alors que "dinde" est un sujet d'assistance de moindre importance.

Donc ... J'essaie de savoir s'il existe un algorithme qui m'aidera à identifier le sujet principal d'une phrase ... Faites-moi savoir si vous en avez connaissance !!!

31
rockit

En fait, j'ai fait un projet de recherche à ce sujet, gagné deux concours et je concourt aux nationaux.

Il y a deux étapes à la méthode:

  1. Parse la phrase avec un Grammaire sans contexte
  2. Dans les arbres d’analyse résultants, trouver tous les noms qui ne sont subordonnés qu’aux constituants de type nom-phrase

Par exemple, "j'ai mangé une tarte" a 2 noms: "I" et "une tarte". En regardant l'arbre d'analyse, "pie" est à l'intérieur d'une phrase verbale, il ne peut donc s'agir d'un sujet. "Je", cependant, est seulement à l'intérieur des constituants de type NP. étant le seul candidat sujet, c'est le sujet. Vous trouverez une première version de ce programme sur http://www.candlemind.com . Notez que le vocabulaire est limité aux mots simples de base, et qu'il n'y a pas de conjugaison de verbe, il a donc "homme" mais pas "hommes", "mange" mais pas "mange". En outre, le CFG que j'ai utilisé était fabriqué à la main et limité. Je mettrai à jour ce programme sous peu.

Quoi qu'il en soit, il y a limitations à ce programme. Mon mentor a souligné, dans son état actuel, qu'il ne peut pas reconnaître les phrases avec des sujets qui sont de "véritables" NP (ce que la grammaire appelle en réalité NP). Par exemple, "que la lune soit plate n'est plus un débat". Le sujet est en fait "que la lune soit plate". Cependant, le programme reconnaîtrait "la lune" comme sujet. Je vais régler ce problème sous peu.

Quoi qu'il en soit, c'est assez bon pour la plupart des phrases ...

Mon document de recherche peut être trouvé là aussi. Allez à la page 11 pour lire les méthodes.

J'espère que cela t'aides.

21
Michael

La plupart de vos techniques d'analyse de PNL de base seront en mesure d'extraire les aspects de base de la phrase - à savoir que le poulet et la dinde sont des NP et qu'ils sont liés par un adjectif "comme", etc., en les transformant en "sujet" ou "concept 'est plus difficile

Des techniques telles que l'analyse sémantique latente et ses nombreuses dérivées transforment ces informations en un vecteur (certaines ont des méthodes pour conserver en partie la hiérarchie/les relations entre les parties du discours) et les comparent ensuite à des vecteurs existants, généralement préclassés par concept. Voir http://en.wikipedia.org/wiki/Latent_semantic_analysis pour commencer.

Edit Voici un exemple d'application LSA avec lequel vous pouvez jouer pour voir si vous souhaitez poursuivre. http://lsi.research.telcordia.com/lsi/demos.html

9
dfb

Pour de nombreuses phrases plus longues, il est difficile de dire ce qu'est exactement un sujet et il peut y en avoir plus d'un.

Une façon d'obtenir une approximation est:

1.) Commencez par marquer la phrase en utilisant openNLP, Stanford Parser ou n’importe lequel. 2.) Ensuite, supprimez tous les mots vides de la phrase. 3.) Choisissez les noms (proprement dit, singulier et pluriel).

Une autre façon est

1.) convertissez la phrase en phrases à l'aide d'un analyseur. 2.) Prenez toutes les phrases nominales. 3.) Supprimez les phrases de noms qui n'ont pas les noms comme un enfant. 4.) Ne conservez que les adjectifs et les noms, supprimez tous les mots des expressions nominales restantes.

Cela pourrait donner environ. devinant.

2
Naveen

Un article sur l'analyse syntaxique des expressions nominales a été publié dans le MIT journal de linguistique computationnelle: http://www.mitpressjournals.org/doi/pdf/10.1162/COLI_a_00076

1
ZeoS

Le terme "concept clé" n'est pas un terme bien défini en linguistique, mais il peut s'agir d'un point de départ: parse la phrase, recherchez le sujet dans l'arbre d'analyse ou la structure de dépendance que vous obtenez. (Cela ne marche pas toujours, par exemple, le sujet "Il pleut?" Est "Ça", alors que le concept clé est probablement "La pluie". De plus, quel est le concept clé dans "Les spaghettis et les lasagnes sont-ils la même chose?" ? ")

Ce type de problème (NLP + recherche) est plus correctement traité par des méthodes telles que LSA , mais c'est un sujet assez avancé.

1
Fred Foo

Si vous êtes prêt à dépenser de l'argent, http://www.connexor.com/ est supposé être capable de faire ce type d'analyse sémantique pour une grande variété de langues, y compris l'anglais. Je n'ai jamais utilisé directement leur produit et je ne peux donc pas dire à quel point il fonctionne correctement.

1
btilly

Les phrases composées ou complexes peuvent avoir plus d'un concept clé de phrase.

Vous pouvez utiliser stanfordNLP ou MaltParser qui peut donner la structure de dépendance d'une phrase. Il donne également les parties du marquage de la parole, y compris le sujet, le verbe, l'objet, etc.

Je pense que la plupart du temps, l'objet sera le concept clé de la phrase.

1
Naveen

Vous devriez regarder l'API Cloud Natural Language de Google. C'est leur service de PNL.

https://cloud.google.com/natural-language/

1
Tom

Au niveau le plus élémentaire, une question en anglais se présente généralement sous la forme <verb> <subject> ... ? ou <pronoun> <verb> <subject> ... ?. Ce n'est pas un bon algorithme, d'autant plus que le sujet peut couvrir plusieurs mots, mais en fonction de la complexité de la solution, cela peut constituer un point de départ utile.

Si vous avez besoin de précision, ignorez cette réponse.

1
biziclop

La solution simple consiste à taguer votre phrase avec un tagger de partie de speach (par exemple, à partir de NLTK library pour Python), puis de rechercher des correspondances avec des modèles de partie de speach prédéfinis dans lesquels il est clairement indiqué où se trouve le sujet principal de la requête. phrase

0
Andrey Sboev

Une option consiste à examiner quelque chose comme ceci dans un premier temps:

http://www.abisource.com/projects/link-grammar/

Mais comment tirer le sujet de ces liens est un autre problème en soi. Mais comme Abiword essaie de détecter des problèmes grammaticaux, vous pouvez pouvez l’utiliser pour déterminer le sujet.

0
Glenn