Comment puis-je extraire des mots d'une phrase et déterminer quelle partie du discours chacun est? [fermé]

19

Je veux écrire quelque chose qui prend une phrase et identifie chaque mot qu'elle contient et définit quelle partie du discours chaque mot est.

Par exemple

Bonjour tout le monde, je suis une phrase

retournerait ceci

verb noun, pronoun verb adjective noun

Idéalement, j'aimerais éventuellement aller un peu plus loin et prendre une phrase et lui faire comprendre par programme ce qu'il essaie d'interpréter et peut-être faire quelque chose à ce sujet.

Ma question est donc: quelqu'un a-t-il entendu parler de quelque chose comme ça?

Vinny
la source
2
"Bonjour" est un verbe? Je veux dire, je ne sais pas ce que ce serait d'autre, mais ça ne semble pas être un verbe.
Dan Ray
@DanRay: C'est peut-être une question pour english.stackexchange.com?
StriplingWarrior
1
@DanRay haha, vous voyez? C'est pourquoi j'essaie de comprendre si quelque chose peut faire cela, car apparemment je suis terrible en grammaire.
Vinny
@Vinny - Bien sûr, c'est possible. Le problème est ... c'est la prochaine idée de billion de dollars, et pour le moment, elle n'est toujours pas transformée en produit.
Ramhound
1
@Vinny Oui, quelqu'un a entendu parler de quelque chose comme ça.
Tulains Córdova

Réponses:

18

C'est ce qu'on appelle le traitement du langage naturel et c'est un domaine immense et complexe. Quelque chose comme vous décrivez est une réalisation monumentale, et même les meilleures solutions, comme Watson , sont loin d'être parfaites.

Des choses comme ça le rendent difficile: "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo"

une phrase grammaticalement correcte en anglais américain, utilisée comme exemple de la façon dont les homonymes et les homophones peuvent être utilisés pour créer des constructions linguistiques compliquées. Il a été discuté dans la littérature depuis 1972 ... Il a également été présenté dans le livre The Steven Instinct de 1994 de Steven Pinker comme exemple d'une phrase qui est "apparemment absurde" mais grammaticale ...

Le sens de la phrase devient plus clair quand on comprend qu'elle utilise la ville de Buffalo, New York et le verbe quelque peu inhabituel "buffler" (signifiant "intimider ou intimider"), et lorsque la ponctuation et la grammaire sont développées pour que la phrase se lit comme suit: "Buffalo buffalo that Buffalo buffalo buffalo, buffalo Buffalo buffalo." Le sens devient encore plus clair lorsque des synonymes sont utilisés: "Buffalo bison que d'autres Buffalo bison bully, eux-mêmes bully Buffalo bison."

Ryathal
la source
1
Voilà ce que je recherche! Quelqu'un a-t-il entendu parler de quelqu'un adaptant cela à une plus petite échelle? Open source? Des exemples de cette utilisation à plus petite échelle?
Vinny
@Vinny AFAIK rien n'est disponible en open source car la résolution de ces problèmes est très rentable pour les entreprises, comme la détection de la grammaire MS Word. Il y a cependant des programmes de chatter-bot qui sont disponibles.
Ryathal
1
@Vinny Sa difficulté n'a rien à voir avec l'échelle. Le traitement du langage naturel a une complexité inhérente qui n'est pas réduite lorsque vous réduisez l '"échelle".
Tulains Córdova
6

Bien que fractionner une phrase et déterminer l'exactitude grammaticale tout en résolvant votre premier problème soit plus facile que votre deuxième problème, de nombreuses complexités comme les noms verbaux ou les gérondifs comme la natation, la programmation, etc. et d'autres subtilités de ce genre, c'est toujours un défi - Voir Morons ' répondre.

Mais votre deuxième problème - les gens ont fait d'énormes efforts pour trouver une solution parfaite, mais un algorithme "d'interprétation" vraiment parfait n'est pratiquement réalisable pour aucune langue naturelle comme l'anglais - il existe des variantes qui vont bousiller votre algorithme. Ce domaine - un hybride entre l'IA, l'informatique et la linguistique est connu sous le nom de PNL . Considérez ceci: même Google Translate n'est pas parfait pour "interpréter" des phrases.

Mais néanmoins, c'est un domaine très intéressant à essayer.

yati sagade
la source
@StriplingWarrior Je voulais juste faire un contraste suffisant entre les deux problèmes posés par l'OP. C'est noté. Modifier sur son chemin
yati sagade
4

Je pense que vous devriez commencer à lire cet article Wikipedia:

http://en.wikipedia.org/wiki/Part-of-speech_tagging

(c'est un domaine de recherche, ne vous attendez pas à une solution facile.)

Doc Brown
la source
2
Il convient d'ajouter que, bien que la PNL soit énorme, difficile et probablement insoluble sur les ordinateurs d'aujourd'hui, le balisage POS est la partie la plus simple, et avec une taille de corpus suffisante ou beaucoup de dévouement et d'écriture manuelle de règles, il peut être résolu presque parfaitement, certainement supérieur à 99% de correction. Cela pourrait bien suffire à vos besoins.
Kilian Foth, le
merci, c'est exactement ce que je cherchais aussi.
Amc_rtty
en fait basé sur la description de l'OP, cela devrait être la réponse acceptée car vous observez correctement @KilianFoth
Amc_rtty
-1

Une façon peu coûteuse de le faire serait de créer une base de données du dictionnaire (je suis presque certain que quelqu'un l'a fait).

Besoin de deux champs dans le tableau: wordetusage

Transformez la phrase en un tableau de chaînes (chaque mot étant une chaîne) et indépendamment:

select 'usage' from Dictionary WHERE 'word' = $word; 

C'est une solution lourde, mais que j'ai utilisée dans le passé.

mheinke
la source
5
Cela suppose que chaque mot n'a qu'un seul POS possible, et je vous assure que ce n'est pas du tout le cas.
microtherion
D'accord - il n'y a aucun moyen que cela puisse fonctionner (au moins en anglais) avec tous les mots qui peuvent agir comme des noms, des verbes, etc., selon le contexte.
Derek