Langages pour établir des règles

Bonjour,
Je voudrais récrire un logiciel qui permet de décliner les mots d’une langue à déclinaison.
Pour ma première version, j’y étais allé sans beaucoup de réflexion préalable, ça marchait mais c’était pas propre. Je veux changer de langue et en même temps avoir une certaine forme de généralité qui permettrait de ne pas écrire soit même tout le code mais de déclarer des règles et d’avoir ensuite des fonctions qui appliquent ces règles.

Pour illustrer, par exemple, pour ma première version, j’avais une fonction pour l’accusatif masculin singulier des adjectif. Dans cette fonction, il y avait une fonction qui testait si le nom était animé ou pas et qui choisissait alors le génitif ou le nominatif de l’adjectif. Supposons que je passe à une langue qui ne fasse pas la différence inanimé/animé , cette fonction est caduque.
J’aimerais plutôt un truc ou je puisse déclarer des règles du style
Règle 1 : cas possibles : nominatif, vocatif, accusatif…etc.
Règle n : accusatif si animé génitif, si inanimé nominatif
et avoir ensuite des fonctions qui vont directement chercher dans la base de données la bonne forme du mot.
Existe-t-il des langages qui pourraient convenir à une telle utilisation ?
Merci de vos idées.

Il existe des langages qui créent des syntaxes comme le couple bison/flex mais ce que tu demandes nécessite de la sémantique : les mots animés ou inanimés.
https://langevin.univ-tln.fr/CDE/LEXYACC/Lex-Yacc.html

Merci de ta suggestion. Que veux-tu dire par

ce que tu demandes nécessite de la sémantique ?

Je précise que je n’ai pratiquement aucune formation théorique en programmation, je suis uniquement un amateur autodidacte, d’où peut-être des questions pas forcément pertinentes.

Ce que je veux dire, c’est que le fait qu’un nom soit animé ou non ne dépend pas de sa position dans le texte mais de son sens. En gros, il te faudra faire une liste de noms animés et de noms inanimés voire même de noms animés ou non selon le sens de la phrase (par exemple un animal mort est-il animé ou non ?)

OK. Oui, ce truc là n’est pas un problème. Pour les différentes formes, je parse la db de Wikidic et pour les langues où la distinction est pertinente, c’est indiqué. Pour répondre à ta question, c’est la grammaire qui compte, donc un animal mort est animé :wink:

Par les asticots ?

Plus sérieusement, tu devrais demander de l’aide auprès de linguistes.

Oui, tu as raison, c’est tellement un problème de base qu’il est impossible qu’il n’ait pas été sérieusement étudié. Inutile de réinventer la roue.
Bonne journée.

Ca dépend de la langue en fait.

En fait il se trouve que ce n’est pas un problème de base justement, sinon les traducteurs automatiques seraient bien meilleurs :slight_smile: .

Pour pouvoir traiter un tel problème il faut d’une part avoir les connaissances des sciences du langages, qu’on appelle la linguistique qui comprend en fait plusieurs domaines:

  • la phonétique/phonologie
  • la morphologie
  • la lexicologie
  • la syntaxe
  • la sémantique
  • l’ énonciation/pragmatique

Bon courage :slight_smile:

Et pour paraphraser Ferdinand de Saussure: les Sciences du langage consistent à étudier ce qui est réellement dit et non ce qui devrait se dire

1 J'aime

Justement, dans mon premier message, j’explique le but limité de mon programme, qui n’est absolument pas de faire de la traduction : décliner les mots qui en ont besoin dans certaines langues. Donc, très peu de lexicologie, pas besoin de phonétique, ni de sémantique et encore moins de pragmatique.

Sans sémantique j’ai des doutes :slight_smile:

C’est dans la base de données de Wikidic. Donc, non, pas besoin de sémantique, juste d’appliquer des règles.

On ne s’improvise pas linguiste.

Pour quel usage précisément? générer une présentation des déclinaisons pour un manuel scolaire? un guide touristique?

pourquoi pas linguiste amateur? je suis pour les conaissances partagées, donc étudiées; toi aussi si tu es ici, d’ailleurs :slight_smile:

soit, mais quel niveau, quel effort, quelle quantité de travail, pour atteindre quel objectif?

Pour décliner des mots en latin, on établi des tables de déclinaison, ensuite on l’utilise selon sa syntaxe en fonction de sa sémantique, quel mode convient pour donner quelle signification (quel signifiant pour quel signifié…). Je ne comprends pas ce que doit faire votre logiciel, sinon afficher des tables (ce que vous savez certainement faire beaucoup mieux que moi)

Bonsoir @Ianig,

Comme le mentionne @nicola, le couple flex/Bison pourrait être utile pour générer un analyseur. Quel langage de programmation utilises-tu ? Je m’étais amusé à analyser un texte en faisant usage du langage Python et la moindre règle implique du code; ce langage est bien adapté pour effectuer assez facilement des traitements sur des chaînes de caractères ainsi que des statistiques. Là où ça va se compliquer, c’est dans la richesse de la langue française et des exceptions ainsi que des éventuelles ambiguïtés. Qu’appelles-tu "nom animé " ? Je doute qu’il y ait beaucoup de linguistes ici aussi l’expression du besoin mériterait à être plus explicite, plus détaillée avec des exemples précis pour faciliter la compréhension. ChatGPT peut aussi aider à mieux formuler le besoin tout en aidant à trouver des axes de solutions en développement sans pour autant se substituer à nos quelques neurones encore intacts !

Merci de ta réponse.
Nom animé : dans (au moins) certaines langues slaves, la déclinaison des noms masculins d’êtres vivants (animé) est différente de celle des noms masculins de choses (inanimés).
Je pense utiliser python.
En fait, je crois avoir trouvé un moyen qui consisterait à décrire les déclinaisons sous forme d’un arbre (xml) qui pourrait être parcouru de manière récursive par un script qui générerait les fonctions.
Le point clé, c’est de bien (simplement) décrire l’arbre des déclinaisons. Par exemple, au lieu de considérer que masculin animé et masculin inanimé sont des variantes de la même déclinaison comme c’est fait classiquement, les considérer comme des déclinaisons séparées.

j’ai dit une bêtise peut être.

Désolé. j’ai édité le message pour plus de clareté.