diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4f38e59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Assignated folder for python venv +.env/ + +# Lock files from libreoffice +.~lock* diff --git a/CategoriesGramaticalesCombinatoire.ods b/CategoriesGramaticalesCombinatoire.ods index f9d6c81..18278a3 100644 Binary files a/CategoriesGramaticalesCombinatoire.ods and b/CategoriesGramaticalesCombinatoire.ods differ diff --git a/ccg-test.py b/ccg-test.py new file mode 100644 index 0000000..13b12b5 --- /dev/null +++ b/ccg-test.py @@ -0,0 +1,54 @@ +from nltk.ccg import chart, lexicon +import pandas as pd +import numpy as np + + +# On importe notre lexique sous forme de tableur +table = pd.read_excel("CategoriesGramaticalesCombinatoire.ods", engine="odf") + +# On récupère le nombre de mots qui ont été définis +n = len(table['MOT']) + +# On donne la liste des catégories primitives +lexstring=':- S,N,Pp\n' +# On ajoute la notation V pour N\S +lexstring+='V :: N\\S\n' + +# On lis les données depuis le tableur en une chaine de caractère parsable +for i in range(n): + for j in range(3): + if isinstance(table['Cat'+str(j)][i],str): + for mot in table['MOT'][i].split('/'): + lexstring+=mot+' => ' + table['Cat'+str(j)][i] + '\n' + +# Pour inverser les slash dans le lexicon +#lexstring = lexstring.replace('\\','#').replace('/','\\').replace('#','/') + +# On crée notre lexique +lex = lexicon.fromstring(lexstring) +#print(lex) + +# On crée le parser, on donne l'ensemble des règles qu'il est cencé connaître +#parser = chart.CCGChartParser(lex, chart.DefaultRuleSet) +parser = chart.CCGChartParser(lex, chart.ApplicationRuleSet) + +# On lit les phrases dans le fichier +with open('phrases.txt') as f: + lines = f.readlines() + + # On ajoute quelques phrases de test supplémentaires + lines.append("chat dort") + lines.append("pouet souris") + lines.append("quel chat mange la souris ?") + lines.append("pouet prout ?") + lines.append("chat surdort") + + for phrase in lines: + # On met tout en minuscule + phrase = phrase.lower().strip() + print('#',phrase) + + # Et on affiche tous les arbres de dérivation trouvés + for parse in parser.parse(phrase.split()): + chart.printCCGDerivation(parse) + diff --git a/phrases.txt b/phrases.txt new file mode 100644 index 0000000..81cbfcd --- /dev/null +++ b/phrases.txt @@ -0,0 +1,32 @@ +Le chat dort +Il dort +Le chat dort paisiblement +Le chat noir dort +Le méchant chat dort +Le très méchant chat dort +Le chat de la sœur de mon voisin dort +Le chat que mon voisin lui donne mange +Le chat qui dort est noir +Le chat mange la souris +Le chat la mange +Il la mange +Quel chat mange la souris ? +Qui mange la souris ? +Quelle souris mange le chat ? +La souris est mangée par le chat +Elle est mangée par le chat +Quelle souris est mangée par le chat ? +Le chat mange la souris avec ses dents +Le chat la mange avec ses dents +Avec quoi le chat mange la souris ? +Le rat donne un fromage à la souris +Un fromage est donné par le rat à la souris +A quelle souris un fromage est donné par le rat ? +Il le donne à la souris +Il le lui donne +Il souhaite que mon voisin lui donne le chat +Il souhaite donner le chat à mon voisin +Le chat de mon voisin pourchasse et aMrape la souris +La souris dort et le chat de mon voisin aMrape la souris +Le chat dort et la souris dort +Le chat et la souris dorment