61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
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 :: S\\N\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)
|
|
|
|
# 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)
|
|
|
|
printTotal=True
|
|
printDerivations=not printTotal
|
|
|
|
# On lit les phrases dans le fichier
|
|
with open('phrases.txt') as f:
|
|
lines = f.readlines()
|
|
|
|
lines.append("mon voisin lui donne le chat")
|
|
|
|
for phrase in lines:
|
|
# On met tout en minuscule
|
|
phrase = phrase.lower().strip()
|
|
if printDerivations:
|
|
print("============================================================================")
|
|
print('#',phrase)
|
|
lex = lexicon.fromstring(lexstring)
|
|
parser = chart.CCGChartParser(lex, chart.ApplicationRuleSet)
|
|
|
|
# Et on affiche tous les arbres de dérivation trouvés
|
|
i=0
|
|
for parse in parser.parse(phrase.split()):
|
|
i+=1
|
|
if printDerivations:
|
|
chart.printCCGDerivation(parse)
|
|
|
|
if printTotal:
|
|
print(i,phrase)
|