1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
|
mports System.IO
Imports System.Text
'cet imports est necessaire.Faire une reference à System.Linq
Imports System.Linq.Expressions
Public Class frmNouveau
'Cree un expression lamba pour analyse syntaxique
Private regleExpress As Expression(Of Func(Of RegleGram, Boolean))
'1 liste pour les regles
Private Regles As New List(Of RegleGram) 'liste des regles lues
'2 listes pour les phrases
Private lignesPhrase As New List(Of String()) 'liste des phrases lues
Private phrases As New List(Of Phrase) 'liste des phrases "expression" apres analyse lexicale
Private phraseRegleResultat As New List(Of String) 'Tabli
Private cheminApp As String = Directory.GetCurrentDirectory & "\"
Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
btnAnalyseRegles.Enabled = False
End Sub
Private Sub btnAnalyseRegles_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAnalyseRegles.Click
'Dim fichier As StreamReader = New StreamReader("C:\Users\samia\Desktop\Regles.txt", Encoding.UTF8)
Dim fichier As StreamReader = New StreamReader(cheminApp & "ReglesBis.txt", Encoding.UTF8)
Dim ligneLue As String = fichier.ReadLine
'Objet regle grammaire
Dim objRegle As RegleGram
'lecture de toutes les lignes(traite chaque ligne lue et remplit liste regles)
RtfBoxRegles.WordWrap = False
RtfBoxRegles.ScrollBars = RichTextBoxScrollBars.ForcedBoth
RtfBoxRegles.AppendText(vbCrLf & "Regles Lues :" & vbCrLf & vbCrLf)
While ligneLue IsNot Nothing
Dim strTable() As String = ligneLue.Split(" ")
'Affiche ligne lue
RtfBoxRegles.AppendText(ligneLue)
RtfBoxRegles.AppendText(vbCrLf)
'Ajoute aux lexemes de la nouvelle regle
objRegle = New RegleGram
For I As Integer = 0 To UBound(strTable)
objRegle.strRegle = objRegle.strRegle & strTable(I)
Next
'Ajoute à liste regles
Regles.Add(objRegle)
ligneLue = fichier.ReadLine
End While
'Ferme fichier
fichier.Close()
'Affiche les regles dans Classe RegGram
RtfBoxRegles.AppendText(vbCrLf & "Regles dans Classe RegGram :" & vbCrLf & vbCrLf)
For I As Integer = 0 To Regles.Count - 1
RtfBoxRegles.AppendText(Regles(I).strRegle)
RtfBoxRegles.AppendText(vbCrLf)
Next
RtfBoxAnalyse.WordWrap = False
RtfBoxAnalyse.ScrollBars = RichTextBoxScrollBars.ForcedBoth
'Analyse Syntaxique de chaque phrase
For Each objPhrase In phrases
'wrappe la phrase dans un objet grammaire de test
Dim objTest As RegleGram = New RegleGram
objTest.strRegle = objPhrase.strPhrase
For Each objRegle In Regles
'Cree une expression lamba(phrase est une variable lambda ou "whatever you want")
regleExpress = Function(phrase) phrase.strRegle = objRegle.strRegle
'Compile la regle, wrappe dans un delegate predicat
Dim predicat As Func(Of RegleGram, Boolean) = regleExpress.Compile()
'verifie phrase et renvoie un boolean
Dim isMatch As Boolean = predicat(objTest)
If isMatch Then 'phrase est conforme à une des regles
'Ajoute à phraseRegleResultat
phraseRegleResultat.Add(objPhrase.strPhrase)
'Affiche dans RtfBoxAnalyse
RtfBoxAnalyse.AppendText("Numero Phrase : " & phrases.IndexOf(objPhrase) + 1 & vbCrLf)
RtfBoxAnalyse.AppendText(objPhrase.strPhrase)
RtfBoxAnalyse.AppendText(vbCrLf)
End If
Next
Next
End Sub
'Charge le fichier phrase ,cree liste phrases
'Appelle Analyse Lexicale
Private Sub btnLoadPhrase_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadPhrase.Click
Dim fichier As StreamReader = New StreamReader(cheminApp & "Phrases.txt", Encoding.UTF8)
Dim ligneLue As String = fichier.ReadLine
While Not (ligneLue Is Nothing)
'On splitte les espaces
Dim strTable() As String = ligneLue.Split(" ")
'ajoute à lignePhrases
lignesPhrase.Add(strTable)
ligneLue = fichier.ReadLine
End While
fichier.Close()
'
'Affiche lignes lues
RtfBoxPhrase.WordWrap = False
RtfBoxPhrase.ScrollBars = RichTextBoxScrollBars.ForcedBoth
RtfBoxPhrase.AppendText(vbCrLf & "Phrases avant Analyse Lexicale :" & vbCrLf)
For Each tabStr As String() In lignesPhrase
For I As Integer = 0 To tabStr.Count - 1
RtfBoxPhrase.AppendText(tabStr(I))
Next
RtfBoxPhrase.AppendText(vbCrLf)
Next
'
'Appelle Analyse Lexicale
Call AnaLexicale()
'
'Active btnAnalyseRegles
btnAnalyseRegles.Enabled = True
End Sub
'
'Analyse lexicale => reduction de la phrase à la forme canonique
'fait appel à verifieSep & extractLexeme
'
Private Sub AnaLexicale()
Dim objPhrase As Phrase
For Each tabStr As String() In lignesPhrase
objPhrase = New Phrase
For I As Integer = 0 To tabStr.Count - 1
If verifieSep(tabStr(I)) > 1 Then ' lexeme valide il est extrait de la ligne
objPhrase.strPhrase = objPhrase.strPhrase & extractLexeme(tabStr(I))
End If
Next
'si la phrase contient des lexemes ajout
If objPhrase.strPhrase <> "" Then
phrases.Add(objPhrase)
End If
Next
'
'Affiche phrases sous forme "canonique"
RtfBoxPhrase.AppendText(vbCrLf & "Phrases apres Analyse Lexicale :" & vbCrLf)
For Each elemPhrase As Phrase In phrases
RtfBoxPhrase.AppendText(elemPhrase.strPhrase)
RtfBoxPhrase.AppendText(vbCrLf)
Next
End Sub
'
'Verifie position du separateur "/"
'Position =0 -inexistant ou position =1 -mauvaise position => lexeme invalide
'Position >1 => valide
'
Private Function verifieSep(ByVal x_lexeme As String) As Integer
Return Strings.InStr(1, x_lexeme, "/", CompareMethod.Text)
End Function
'
'Extrait un lexeme verifie
'
Private Function extractLexeme(ByVal objLexeme As String) As String
Dim posSeparateur As Integer = Strings.InStr(1, objLexeme, "/", CompareMethod.Text)
Dim strLexemeValide As String = Strings.Right(objLexeme, Len(objLexeme) - posSeparateur)
Return strLexemeValide
End Function
End Class
'
'Classe RegleGrammaire
'
Public Class RegleGram
'un lexeme de RegleGram
Public strRegle As String
Public Sub New()
strRegle = ""
End Sub
End Class
'
'Classe Phrase
'
Public Class Phrase
'un lexeme de Phrase
Public strPhrase As String
Public Sub New()
strPhrase = ""
End Sub
End Class |
Partager