pattern__phrase_vers_dot--3-label-pos-longs.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import imports.arguments as ARG
  4. from pattern.fr import parse, split
  5. texte_brut = ARG.obtenir( '-p', u"Suivez les flèches, attention aux trous." )
  6. texte_traite = parse( texte_brut )
  7. numero_mot = -1
  8. posse = {
  9. "CC" : u"conjonction de coordination",
  10. "CD" : u"nombre cardinal",
  11. "DT" : u"déterminant",
  12. "EX" : u"Existential there",
  13. "FW" : u"mot étranger",
  14. "IN" : u"préposition ou conjonction de subordination",
  15. "JJ" : u"adjectif",
  16. "JJR" : u"adjectif comparatif",
  17. "JJS" : u"adjectif superlatif",
  18. "LS" : u"marqueur d'élément de liste",
  19. "MD" : u"modal",
  20. "NN" : u"nm, singulier ou mass",
  21. "NNS" : u"nom, pluriel",
  22. "NNP" : u"nom propre, singulier",
  23. "NNPS" : u"nom propre, pluriel",
  24. "PDT" : u"predeterminer",
  25. "POS" : u"possessive ending",
  26. "PRP" : u"pronom personnel",
  27. "PRP$" : u"pronom possessif",
  28. "RB" : u"adverbe",
  29. "RBR" : u"adverbe, comparatif",
  30. "RBS" : u"adverbe, superlatif",
  31. "RP" : u"particle",
  32. "SYM" : u"symbole",
  33. }
  34. def imprimer_erreur ( erreur ):
  35. print '💩 erreur : ' + str( erreur )
  36. def demarrer_graphe () :
  37. print 'digraph G {'
  38. print ' graph [ rankdir=LR ];'
  39. def ajouter_noeud_mot ( word, numero ):
  40. print ' ' + str( numero ) + ' [label="' + word.string + '"];'
  41. def ajouter_noeud_type ( word, numero ):
  42. if word.type in posse:
  43. type_pos_label = posse[word.type]
  44. else:
  45. type_pos_label = word.type
  46. type_pos = word.type.replace( '.', 'point' ).replace( ',', 'virgule' )
  47. print ' type__' + str( numero ) + '__' + type_pos + ' [label="' + type_pos_label + '"];'
  48. print ' ' + str( numero ) +' -> type__' + str( numero ) + '__' + type_pos;
  49. def lier_a_noeud_precedent ( numero ):
  50. if ( numero_mot > 0 ):
  51. print ' ' + str( numero - 1 ) + ' -> ' + str ( numero )
  52. def clore_graphe () :
  53. print '}'
  54. demarrer_graphe ()
  55. # pour chaque phrase
  56. for phrase in split( texte_traite ):
  57. # pour chaque mot
  58. for word in phrase.words:
  59. # on incrément le numéro du mot
  60. numero_mot = numero_mot + 1
  61. ajouter_noeud_mot ( word, numero_mot )
  62. ajouter_noeud_type ( word, numero_mot )
  63. lier_a_noeud_precedent ( numero_mot )
  64. clore_graphe ()