Finished before reread
This commit is contained in:
parent
735a28f18b
commit
103ee6af0e
3 changed files with 111 additions and 73 deletions
|
@ -148,8 +148,9 @@ This is the second sentence that was plainly wrong. I started in the wrong direc
|
|||
## Think
|
||||
|
||||
After some times, I just stopped to work. Tell myself *"it is enough, now, I must finish it!"*.
|
||||
I took a sheet of paper, a pen and began to write down some trees.
|
||||
I took a sheet of paper, a pen and began to draw some trees.
|
||||
|
||||
I began by make by removing most of the verbosity.
|
||||
I first renamed `<item name="Menu">` by simpler name `M` for example.
|
||||
I obtained something like:
|
||||
|
||||
|
@ -160,18 +161,19 @@ and
|
|||
<%= blogimage('formal_Menu_tree.png', 'The destination tree') %>
|
||||
|
||||
|
||||
And I made myself the following reflexion:
|
||||
Then I made myself the following reflexion:
|
||||
|
||||
Considering Tree Edit Distance, each unitary transformation of tree correspond to a simple search and replace on my XML source.
|
||||
I did a program which generate automatically the weight in a matrix of each edit distance.
|
||||
Considering Tree Edit Distance, each unitary transformation of tree correspond to a simple search and replace on my <sc>xml</sc> source[^nb].
|
||||
We consider three atomic transformations on trees:
|
||||
|
||||
- *substitution*: renaming a node
|
||||
- *insertion*: adding a node
|
||||
- *deletion*: remove a node
|
||||
|
||||
The particularity with trees, is that, removing a node, do the following:
|
||||
all children of this node, became children of its father.
|
||||
|
||||
[^nb]: I did a program which generate automatically the weight in a matrix of each edit distance from data.
|
||||
|
||||
One of the particularity of atomic transformations on trees, is ; if you remove a node, all children of this node, became children of its father.
|
||||
|
||||
An example:
|
||||
|
||||
|
@ -192,7 +194,7 @@ r - b
|
|||
y - c
|
||||
</pre>
|
||||
|
||||
And look at what it implies when you write it in <sc>xml</sc>:
|
||||
Et regardez ce que ça implique quand on l'écrit en <sc>xml</sc> :
|
||||
|
||||
<code class="xml">
|
||||
<r>
|
||||
|
@ -206,13 +208,13 @@ And look at what it implies when you write it in <sc>xml</sc>:
|
|||
</r>
|
||||
</code>
|
||||
|
||||
Then deleting all `x` nodes is equivalent to pass the <sc>xml</sc> via the following search and replace:
|
||||
Then deleting all `x` nodes is equivalent to pass the <sc>xml</sc> via the following search and replace script:
|
||||
|
||||
<code class="perl">
|
||||
s/<\/?x>//g
|
||||
</code>
|
||||
|
||||
Therefore, if there exists a one state deterministic transducer to transform the source tree to the destination tree.
|
||||
Therefore, if there exists a one state deterministic transducer which transform my trees ;
|
||||
I can transform the <sc>xml</sc> from one format to another with just a simple list of search and replace directives.
|
||||
|
||||
# Solution
|
||||
|
@ -250,14 +252,15 @@ M - V - M - V - tag2 tag1
|
|||
M
|
||||
</pre>
|
||||
|
||||
using only an acyclic deterministic tree transducer:
|
||||
|
||||
can be done using the following one state deterministic tree transducer:
|
||||
|
||||
|
||||
> C -> ε
|
||||
> E -> R
|
||||
> R -> V
|
||||
|
||||
Wich can be traduced by the following simple regular expression expression:
|
||||
Wich can be traduced by the following simple search and replace directives:
|
||||
|
||||
<code class="perl">
|
||||
s/C//g
|
||||
|
@ -265,7 +268,7 @@ s/E/M/g
|
|||
s/R/V/g
|
||||
</code>
|
||||
|
||||
Adapted to XML it becomes:
|
||||
Once adapted to <sc>xml</sc> it becomes:
|
||||
|
||||
<code class="perl">
|
||||
s%</?contenu>%%g
|
||||
|
@ -277,6 +280,6 @@ s%</rubrique>%</value>%g
|
|||
|
||||
That is all.
|
||||
|
||||
# conclusion
|
||||
# Conclusion
|
||||
|
||||
It should seems a bit paradoxal, but sometimes the most pragmatic approach to a pragmatic problem is to use the theoretical methodology. Not the commonly accepted pragmatic one. This simple experience prove this point.
|
||||
It should seems a bit paradoxal, but sometimes the most efficient approach to a pragmatic problem is to use the theoretical methodology.
|
||||
|
|
|
@ -51,7 +51,7 @@ J'ai pris un stylo et une feuille de papier. Je me suis souvenu de de ce que j'a
|
|||
Finalement, le problème fut résolu en moins de 20 minutes.
|
||||
|
||||
Je pense que la leçon à retenir de cette expérience est de se souvenir que la méthodologie la plus efficace pour résoudre ce problème *pragamtique* était la méthode *théorique*.
|
||||
Et par conséquent, les arguments qui opposent la science et la théories au pragmatisme et à l'efficacité sont faux.
|
||||
Ça ne signifie pas que la méthode théorique est toujours la meilleure, mais en tout cas, il ne faut pas l'écarter.
|
||||
|
||||
newcorps
|
||||
|
||||
|
@ -152,33 +152,36 @@ C'est la deuxième phrase qui est complètement fausse. Parce que j'avais mal co
|
|||
|
||||
## Réfléchir
|
||||
|
||||
After some times, I just stopped to work. Tell myself *"it is enough, now, I must finish it!"*.
|
||||
I took a sheet of paper, a pen and began to write down some trees.
|
||||
Après un certain temps, j'ai arrêté de programmer et je me suis dit : «Maintenant, ça suffit !».
|
||||
J'ai pris une feuille et un stylo et j'ai commencé à dessiner des arbres.
|
||||
|
||||
I first renamed `<item name="Menu">` by simpler name `M` for example.
|
||||
I obtained something like:
|
||||
J'ai commencer par simplifier un peu en enlevant le maximum de verbiage.
|
||||
Tout d'abord en renommant `<item name="Menu">` par un simple `M` par exemple.
|
||||
J'ai obtenu quelque chose comme :
|
||||
|
||||
<%= blogimage('formal_DCR_tree.png', 'The source tree') %>
|
||||
|
||||
and
|
||||
et
|
||||
|
||||
<%= blogimage('formal_Menu_tree.png', 'The destination tree') %>
|
||||
|
||||
|
||||
And I made myself the following reflexion:
|
||||
Puis, je me suis fait la réflexion suivante :
|
||||
|
||||
Considering Tree Edit Distance, each unitary transformation of tree correspond to a simple search and replace on my XML source.
|
||||
I did a program which generate automatically the weight in a matrix of each edit distance.
|
||||
We consider three atomic transformations on trees:
|
||||
Dans les distances d'éditions sur les arbres, chaque opération atomique correspond à un simple *search and replace* sur mon fichier <sc>xml</sc> source[^nb].
|
||||
On considère trois opérations atomiques sur les arbres :
|
||||
|
||||
- *substitution*: renaming a node
|
||||
- *insertion*: adding a node
|
||||
- *deletion*: remove a node
|
||||
- *substitution*: renommer un nœud
|
||||
- *insertion*: ajouter un nœud
|
||||
- *délétion*: supprimer un nœud
|
||||
|
||||
The particularity with trees, is that, removing a node, do the following:
|
||||
all children of this node, became children of its father.
|
||||
|
||||
An example:
|
||||
[^nb]: J'ai programmé un outil qui calcule automatiquement le poids de chaque élément des matrices d'édition à partir de données.
|
||||
|
||||
Une des particularité avec les transformations sur les arbres est celle-ci :
|
||||
supprimer un nœud et tous ses enfants deviendront les enfants du père de ce nœud.
|
||||
|
||||
Un exemple:
|
||||
|
||||
<pre class="twilight">
|
||||
r - x - a
|
||||
|
@ -187,7 +190,7 @@ r - x - a
|
|||
y - c
|
||||
</pre>
|
||||
|
||||
If you delete the `x` node, you obtain
|
||||
Si vous supprimez le nœud `x`, vous obtenez
|
||||
|
||||
<pre class="twilight">
|
||||
a
|
||||
|
@ -211,18 +214,18 @@ And look at what it implies when you write it in <sc>xml</sc>:
|
|||
</r>
|
||||
</code>
|
||||
|
||||
Then deleting all `x` nodes is equivalent to pass the <sc>xml</sc> via the following search and replace:
|
||||
Alors supprimer tous les nœuds `x` revient à faire passer le <sc>xml</sc> à travers le filtre suivant :
|
||||
|
||||
<code class="perl">
|
||||
s/<\/?x>//g
|
||||
</code>
|
||||
|
||||
Therefore, if there exists a one state deterministic transducer to transform the source tree to the destination tree.
|
||||
I can transform the <sc>xml</sc> from one format to another with just a simple list of search and replace directives.
|
||||
Par conséquent, s'il existe un transducteur déterministe à un état qui permet de transformer mes arbres ;
|
||||
je suis capable de transformer le <sc>xml</sc> d'un format à l'autre en utilisant une simple liste de *search and replace*.
|
||||
|
||||
# Solution
|
||||
|
||||
Transform this tree:
|
||||
Transformer cet arbre :
|
||||
|
||||
<pre class="twilight">
|
||||
R - C - tag1
|
||||
|
@ -238,7 +241,7 @@ R - C - tag1
|
|||
E ...
|
||||
</pre>
|
||||
|
||||
to this tree:
|
||||
en celui-ci :
|
||||
|
||||
<pre class="twilight">
|
||||
tag1
|
||||
|
@ -255,14 +258,15 @@ M - V - M - V - tag2 tag1
|
|||
M
|
||||
</pre>
|
||||
|
||||
using only an acyclic deterministic tree transducer:
|
||||
|
||||
peut-être fait en utilisant le transducteur déterministe à un état suivant:
|
||||
|
||||
|
||||
> C -> ε
|
||||
> E -> R
|
||||
> R -> V
|
||||
|
||||
Wich can be traduced by the following simple regular expression expression:
|
||||
Ce qui peut-être traduit par les simples directives Perl suivantes :
|
||||
|
||||
<code class="perl">
|
||||
s/C//g
|
||||
|
@ -270,7 +274,7 @@ s/E/M/g
|
|||
s/R/V/g
|
||||
</code>
|
||||
|
||||
Adapted to XML it becomes:
|
||||
Une fois adapté au <sc>xml</sc> cela devient :
|
||||
|
||||
<code class="perl">
|
||||
s%</?contenu>%%g
|
||||
|
@ -280,8 +284,8 @@ s%</?rubrique>%<value>%g
|
|||
s%</rubrique>%</value>%g
|
||||
</code>
|
||||
|
||||
That is all.
|
||||
Et c'est tout.
|
||||
|
||||
# conclusion
|
||||
# Conclusion
|
||||
|
||||
It should seems a bit paradoxal, but sometimes the most pragmatic approach to a pragmatic problem is to use the theoretical methodology. Not the commonly accepted pragmatic one. This simple experience prove this point.
|
||||
Même si cela peut sembler paradoxal, parfois la solution la plus efficace à un problème pragmatique est d'utiliser une méthodologie théorique.
|
||||
|
|
|
@ -215,33 +215,51 @@ fr: C'est la deuxième phrase qui est complètement fausse. Parce que j'avais ma
|
|||
en: ## Think
|
||||
fr: ## Réfléchir
|
||||
|
||||
After some times, I just stopped to work. Tell myself *"it is enough, now, I must finish it!"*.
|
||||
I took a sheet of paper, a pen and began to write down some trees.
|
||||
en: After some times, I just stopped to work. Tell myself *"it is enough, now, I must finish it!"*.
|
||||
en: I took a sheet of paper, a pen and began to draw some trees.
|
||||
fr: Après un certain temps, j'ai arrêté de programmer et je me suis dit : «Maintenant, ça suffit !».
|
||||
fr: J'ai pris une feuille et un stylo et j'ai commencé à dessiner des arbres.
|
||||
|
||||
I first renamed `<item name="Menu">` by simpler name `M` for example.
|
||||
I obtained something like:
|
||||
en: I began by make by removing most of the verbosity.
|
||||
en: I first renamed `<item name="Menu">` by simpler name `M` for example.
|
||||
en: I obtained something like:
|
||||
fr: J'ai commencer par simplifier un peu en enlevant le maximum de verbiage.
|
||||
fr: Tout d'abord en renommant `<item name="Menu">` par un simple `M` par exemple.
|
||||
fr: J'ai obtenu quelque chose comme :
|
||||
|
||||
<%= blogimage('formal_DCR_tree.png', 'The source tree') %>
|
||||
|
||||
and
|
||||
en: and
|
||||
fr: et
|
||||
|
||||
<%= blogimage('formal_Menu_tree.png', 'The destination tree') %>
|
||||
|
||||
|
||||
And I made myself the following reflexion:
|
||||
en: Then I made myself the following reflexion:
|
||||
fr: Puis, je me suis fait la réflexion suivante :
|
||||
|
||||
Considering Tree Edit Distance, each unitary transformation of tree correspond to a simple search and replace on my XML source.
|
||||
I did a program which generate automatically the weight in a matrix of each edit distance.
|
||||
We consider three atomic transformations on trees:
|
||||
en: Considering Tree Edit Distance, each unitary transformation of tree correspond to a simple search and replace on my <sc>xml</sc> source[^nb].
|
||||
en: We consider three atomic transformations on trees:
|
||||
fr: Dans les distances d'éditions sur les arbres, chaque opération atomique correspond à un simple *search and replace* sur mon fichier <sc>xml</sc> source[^nb].
|
||||
fr: On considère trois opérations atomiques sur les arbres :
|
||||
|
||||
- *substitution*: renaming a node
|
||||
- *insertion*: adding a node
|
||||
- *deletion*: remove a node
|
||||
en: - *substitution*: renaming a node
|
||||
en: - *insertion*: adding a node
|
||||
en: - *deletion*: remove a node
|
||||
fr: - *substitution*: renommer un nœud
|
||||
fr: - *insertion*: ajouter un nœud
|
||||
fr: - *délétion*: supprimer un nœud
|
||||
|
||||
The particularity with trees, is that, removing a node, do the following:
|
||||
all children of this node, became children of its father.
|
||||
|
||||
An example:
|
||||
en: [^nb]: I did a program which generate automatically the weight in a matrix of each edit distance from data.
|
||||
fr: [^nb]: J'ai programmé un outil qui calcule automatiquement le poids de chaque élément des matrices d'édition à partir de données.
|
||||
|
||||
en: One of the particularity of atomic transformations on trees, is ; if you remove a node, all children of this node, became children of its father.
|
||||
fr: Une des particularité avec les transformations sur les arbres est celle-ci :
|
||||
fr: supprimer un nœud et tous ses enfants deviendront les enfants du père de ce nœud.
|
||||
|
||||
en: An example:
|
||||
fr: Un exemple:
|
||||
|
||||
<pre class="twilight">
|
||||
r - x - a
|
||||
|
@ -250,7 +268,8 @@ r - x - a
|
|||
y - c
|
||||
</pre>
|
||||
|
||||
If you delete the `x` node, you obtain
|
||||
en: If you delete the `x` node, you obtain
|
||||
fr: Si vous supprimez le nœud `x`, vous obtenez
|
||||
|
||||
<pre class="twilight">
|
||||
a
|
||||
|
@ -260,7 +279,8 @@ r - b
|
|||
y - c
|
||||
</pre>
|
||||
|
||||
And look at what it implies when you write it in <sc>xml</sc>:
|
||||
fr: And look at what it implies when you write it in <sc>xml</sc>:
|
||||
en: Et regardez ce que ça implique quand on l'écrit en <sc>xml</sc> :
|
||||
|
||||
<code class="xml">
|
||||
<r>
|
||||
|
@ -274,18 +294,22 @@ And look at what it implies when you write it in <sc>xml</sc>:
|
|||
</r>
|
||||
</code>
|
||||
|
||||
Then deleting all `x` nodes is equivalent to pass the <sc>xml</sc> via the following search and replace:
|
||||
en: Then deleting all `x` nodes is equivalent to pass the <sc>xml</sc> via the following search and replace script:
|
||||
fr: Alors supprimer tous les nœuds `x` revient à faire passer le <sc>xml</sc> à travers le filtre suivant :
|
||||
|
||||
<code class="perl">
|
||||
s/<\/?x>//g
|
||||
</code>
|
||||
|
||||
Therefore, if there exists a one state deterministic transducer to transform the source tree to the destination tree.
|
||||
I can transform the <sc>xml</sc> from one format to another with just a simple list of search and replace directives.
|
||||
en: Therefore, if there exists a one state deterministic transducer which transform my trees ;
|
||||
en: I can transform the <sc>xml</sc> from one format to another with just a simple list of search and replace directives.
|
||||
fr: Par conséquent, s'il existe un transducteur déterministe à un état qui permet de transformer mes arbres ;
|
||||
fr: je suis capable de transformer le <sc>xml</sc> d'un format à l'autre en utilisant une simple liste de *search and replace*.
|
||||
|
||||
# Solution
|
||||
|
||||
Transform this tree:
|
||||
en: Transform this tree:
|
||||
fr: Transformer cet arbre :
|
||||
|
||||
<pre class="twilight">
|
||||
R - C - tag1
|
||||
|
@ -301,7 +325,8 @@ R - C - tag1
|
|||
E ...
|
||||
</pre>
|
||||
|
||||
to this tree:
|
||||
en: to this tree:
|
||||
fr: en celui-ci :
|
||||
|
||||
<pre class="twilight">
|
||||
tag1
|
||||
|
@ -318,14 +343,17 @@ M - V - M - V - tag2 tag1
|
|||
M
|
||||
</pre>
|
||||
|
||||
using only an acyclic deterministic tree transducer:
|
||||
|
||||
en: can be done using the following one state deterministic tree transducer:
|
||||
fr: peut-être fait en utilisant le transducteur déterministe à un état suivant:
|
||||
|
||||
|
||||
> C -> ε
|
||||
> E -> R
|
||||
> R -> V
|
||||
|
||||
Wich can be traduced by the following simple regular expression expression:
|
||||
en: Wich can be traduced by the following simple search and replace directives:
|
||||
fr: Ce qui peut-être traduit par les simples directives Perl suivantes :
|
||||
|
||||
<code class="perl">
|
||||
s/C//g
|
||||
|
@ -333,7 +361,8 @@ s/E/M/g
|
|||
s/R/V/g
|
||||
</code>
|
||||
|
||||
Adapted to XML it becomes:
|
||||
en: Once adapted to <sc>xml</sc> it becomes:
|
||||
fr: Une fois adapté au <sc>xml</sc> cela devient :
|
||||
|
||||
<code class="perl">
|
||||
s%</?contenu>%%g
|
||||
|
@ -343,8 +372,10 @@ s%</?rubrique>%<value>%g
|
|||
s%</rubrique>%</value>%g
|
||||
</code>
|
||||
|
||||
That is all.
|
||||
en: That is all.
|
||||
fr: Et c'est tout.
|
||||
|
||||
# conclusion
|
||||
# Conclusion
|
||||
|
||||
It should seems a bit paradoxal, but sometimes the most pragmatic approach to a pragmatic problem is to use the theoretical methodology. Not the commonly accepted pragmatic one. This simple experience prove this point.
|
||||
en: It should seems a bit paradoxal, but sometimes the most efficient approach to a pragmatic problem is to use the theoretical methodology.
|
||||
fr: Même si cela peut sembler paradoxal, parfois la solution la plus efficace à un problème pragmatique est d'utiliser une méthodologie théorique.
|
||||
|
|
Loading…
Reference in a new issue