pattern__phrase_vers_dot~20171216-185642.py 2.1 KB

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