chapitre expressions régulières
This commit is contained in:
parent
7803dbd5fa
commit
fb18d8b5d6
5 changed files with 227 additions and 73 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
.Rproj.user
|
||||
.Rhistory
|
||||
.RData
|
||||
.Ruserdata
|
|
@ -1,73 +0,0 @@
|
|||
# Expressions régulières
|
||||
|
||||
# Tokenisation de mots et segmentation de phrases
|
||||
|
||||
# Normalisation
|
||||
|
||||
## Stemming
|
||||
|
||||
## Lemmatisation
|
||||
|
||||
## Analyse morphologique
|
||||
|
||||
# Distance minimale d'édition
|
||||
|
||||
# Modèles de langue N-grammes
|
||||
|
||||
## Modèles
|
||||
|
||||
## Estimation des probabilités
|
||||
|
||||
## Lissage
|
||||
|
||||
# Correction d'orthographe
|
||||
|
||||
# Classification de textes
|
||||
|
||||
## Naive Bayes
|
||||
|
||||
## Régression logistique
|
||||
|
||||
## Évaluation
|
||||
|
||||
## Métriques
|
||||
|
||||
## Validation croisée
|
||||
|
||||
# Analyse grammaticale
|
||||
|
||||
## Classe de mots
|
||||
|
||||
## POS Tags
|
||||
|
||||
## Analyseur
|
||||
|
||||
## Algorithme de Viterbi
|
||||
|
||||
## MEMM
|
||||
|
||||
## Choix d'attributs
|
||||
|
||||
# Analyse syntaxique
|
||||
|
||||
## Groupes syntaxiques
|
||||
|
||||
## Grammaire
|
||||
|
||||
## Analyseur
|
||||
|
||||
## CKY
|
||||
|
||||
## Probabiliste
|
||||
|
||||
## Analyseur de dépendances
|
||||
|
||||
## Chunking
|
||||
|
||||
# Recherche d'information
|
||||
|
||||
# Wordnet
|
||||
|
||||
# Cooccurences
|
||||
|
||||
# Premier travail pratique
|
4
Makefile
Normal file
4
Makefile
Normal file
|
@ -0,0 +1,4 @@
|
|||
dot_compile:
|
||||
dot -Tpng fsa_sheep.dot -o fsa_sheep.png
|
||||
build: examen_partiel.md dot_compile
|
||||
pandoc examen_partiel.md -o examen_partiel.pdf
|
203
examen_partiel.md
Normal file
203
examen_partiel.md
Normal file
|
@ -0,0 +1,203 @@
|
|||
---
|
||||
author: François Pelletier
|
||||
title: Notes de cours - examen partiel
|
||||
fig_caption: yes
|
||||
highlight: pygments
|
||||
number_sections: yes
|
||||
toc: yes
|
||||
toc_depth: 3
|
||||
---
|
||||
|
||||
# Expressions régulières
|
||||
|
||||
## Définitions
|
||||
|
||||
- **Patron**: représentation compacte d’un ensemble de chaînes de caractères
|
||||
- **Recherche**: filtrer les textes qui correspondent au patron
|
||||
|
||||
## Types de recherches
|
||||
|
||||
- Litéral
|
||||
- Classe de caractères
|
||||
- Alphanumériques: `/\w/`
|
||||
- Numériques: `/\d/`
|
||||
- Registre de valeurs
|
||||
- Lettres: `/[a-z]/`
|
||||
- Chiffres: `/[0-9]/`
|
||||
- Négation
|
||||
- Aucun chiffre: `/[^0-9]/`
|
||||
- Aucun espace: `/[^\s]/`
|
||||
- Optionnel
|
||||
- Orthographes alternatives: `/colou?r/`
|
||||
- Mot facultatif: `/(\w+)?/`
|
||||
- N'importe quel caractère: `/./`
|
||||
- Alias
|
||||
- Compteurs
|
||||
- Zéro ou plusieurs espaces (en début de ligne): `/^\s*/`
|
||||
- Un ou plusieurs caractères (un mot): `/\w+/`
|
||||
- Groupes de capture
|
||||
- Multiple, optionnel ou non-quantifié: `/(groupe 1)+(groupe 2)?(groupe 3)*/`
|
||||
- Conditions
|
||||
- `/(?(?=si_expression)alors|sinon)/`
|
||||
|
||||
## Erreurs possibles
|
||||
|
||||
- Faux positifs
|
||||
- n'auraient pas dû correspondre au patron
|
||||
- métrique: précision
|
||||
- Faux négatifs
|
||||
- auraient dû correspondre au patron
|
||||
- métrique: rappel
|
||||
|
||||
## Python
|
||||
|
||||
Module **re**
|
||||
|
||||
|fonction|usage|
|
||||
|---|---|
|
||||
|compile|générer une version compilée de l'expression régulière|
|
||||
|match|rechercher depuis le début d'une chaîne de caractères|
|
||||
|search|rechercher dans une chaîne de caractères|
|
||||
|sub|remplacer la première occurence d'un patron|
|
||||
|
||||
## Automates à états finis
|
||||
|
||||
- Servent à implémenter une version compilée des expressions régulières
|
||||
- Deux types:
|
||||
- Déterministes
|
||||
- Probabilistes (non-déterministes)
|
||||
- Représentés sous forme de graphes
|
||||
- Alphabet: ensemble fini de symboles. Peuvent désigner de plus gros objets.
|
||||
- Tableau: représente la fonction de transition $q_{i+1} = f(q_i,I)$ pour un état $q_i$ et un symbole en entrée $I$.
|
||||
|
||||
### Exemple: langage des moutons
|
||||
|
||||
- Expression régulière: `/baa+!/`
|
||||
- Graphe:
|
||||
- ![FSA sheep language](fsa_sheep.png)
|
||||
- Caractéristiques:
|
||||
- 5 états:
|
||||
- Alphabet: a,b,!
|
||||
- $q_0$ est l'état de départ
|
||||
- $q_4$ est un état terminal
|
||||
- 5 transitions
|
||||
- Tableau
|
||||
|
||||
| |b|a|!|e|
|
||||
|---|---|---|---|---|
|
||||
|0|1||||
|
||||
|1||1|||
|
||||
|2||3|||
|
||||
|3||3|4||
|
||||
|4:|||||
|
||||
|
||||
### Reconnaissance déterministe
|
||||
|
||||
Processus qui:
|
||||
|
||||
- Démarre dans l'état initial
|
||||
- Examine le symbole en entrée
|
||||
- Consulte la table
|
||||
- Sélectionne le nouvel état et met à jour le ruban
|
||||
- Continue jusqu'à ce qu'on atteigne le bout du ruban
|
||||
|
||||
Algorithme déterministe: D-Recognise
|
||||
|
||||
- Une seule transition possible à chaque instant
|
||||
- Interpréteur dirigé par une table de transition
|
||||
- Trivial: On sait qu'on démarre sur le premier caractère et qu'on a un succès si on atteint l'état terminal à la fin du ruban. Mais, on peut atteindre l'état terminal avant la fin du ruban, et débuter ailleurs qu'au début du ruban.
|
||||
|
||||
Vérification d'expressions régulières:
|
||||
|
||||
- Traduire l'expression en table de transition
|
||||
- Passer la table et la chaîne à un interpréteur
|
||||
|
||||
### Reconnaissance non-déterministe
|
||||
|
||||
Deux approches de base:
|
||||
|
||||
- Convertir un automate non-déterministe en automate déterministe.
|
||||
- Transition $\epsilon$ qui n'avance pas le ruban.
|
||||
- Gérer les différentes options comme une exploration dans un espace d'états
|
||||
- Il existe au moins un chemin complet pour une chaîne définie par le langage de l'automate.
|
||||
- Les chemins ne mènent pas tous à un état final.
|
||||
- Aucun chemin ne mène à un état final si la chaîne ne fait pas partie du langage
|
||||
- Les états de l'espace sont des paires (position du ruban, état de l'automate)
|
||||
- On garde une trace des états non-explorés. Exploration en profondeur.
|
||||
- Pour éviter le catastrophic backtracking, il fait éviter d'avoir deux match possibles pour le même caractère dans un groupe.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Toute expression régulière peut être compilée automatiquement en un automate non-déterministe, que l'on peut convertir en automate déterministe.
|
||||
|
||||
# Tokenisation de mots et segmentation de phrases
|
||||
|
||||
# Normalisation
|
||||
|
||||
## Stemming
|
||||
|
||||
## Lemmatisation
|
||||
|
||||
## Analyse morphologique
|
||||
|
||||
# Distance minimale d'édition
|
||||
|
||||
# Modèles de langue N-grammes
|
||||
|
||||
## Modèles
|
||||
|
||||
## Estimation des probabilités
|
||||
|
||||
## Lissage
|
||||
|
||||
# Correction d'orthographe
|
||||
|
||||
# Classification de textes
|
||||
|
||||
## Naive Bayes
|
||||
|
||||
## Régression logistique
|
||||
|
||||
## Évaluation
|
||||
|
||||
## Métriques
|
||||
|
||||
## Validation croisée
|
||||
|
||||
# Analyse grammaticale
|
||||
|
||||
## Classe de mots
|
||||
|
||||
## POS Tags
|
||||
|
||||
## Analyseur
|
||||
|
||||
## Algorithme de Viterbi
|
||||
|
||||
## MEMM
|
||||
|
||||
## Choix d'attributs
|
||||
|
||||
# Analyse syntaxique
|
||||
|
||||
## Groupes syntaxiques
|
||||
|
||||
## Grammaire
|
||||
|
||||
## Analyseur
|
||||
|
||||
## CKY
|
||||
|
||||
## Probabiliste
|
||||
|
||||
## Analyseur de dépendances
|
||||
|
||||
## Chunking
|
||||
|
||||
# Recherche d'information
|
||||
|
||||
# Wordnet
|
||||
|
||||
# Cooccurences
|
||||
|
||||
# Premier travail pratique
|
16
fsa_sheep.dot
Normal file
16
fsa_sheep.dot
Normal file
|
@ -0,0 +1,16 @@
|
|||
digraph fsa_sheep {
|
||||
rankdir=LR;
|
||||
node [shape = point, color=white, fontcolor=white]; start;
|
||||
node [shape = doublecircle, color=black, fontcolor=black]; q4 [label=<q<SUB>4</SUB>>];
|
||||
node [shape = circle];
|
||||
q0 [label=<q<SUB>0</SUB>>];
|
||||
q1 [label=<q<SUB>1</SUB>>];
|
||||
q2 [label=<q<SUB>2</SUB>>];
|
||||
q3 [label=<q<SUB>3</SUB>>];
|
||||
start -> q0;
|
||||
q0 -> q1 [ label = "b" ];
|
||||
q1 -> q2 [ label = "a" ];
|
||||
q2 -> q3 [ label = "a" ];
|
||||
q3 -> q3 [ label = "a" ];
|
||||
q3 -> q4 [ label = "!" ];
|
||||
}
|
Loading…
Reference in a new issue