Le projet en Java du cours M2-IM pour 2010-2011 concerne une nouvelle version électronique du Dictionnaire de la langue française, d'Émile Littré.
Étant donné la richesse et la variété des citations, remarques et indications diverses que l'auteur a intégrées dans son ouvrage, le Littré est un monument de la langue.
Le but du projet est donc d'explorer l'usage du dictionnaire non plus en consultation (chercher des informations sur un mot donné), mais comme une source de connaissances linguistiques, comme un corpus.
La communication présentée par l'équipe du M2-IM à la Journée d’étude Lexicographie et Informatique, le 21 janvier dernier à Cergy, s'intitulait le dictionnaire comme corpus.
Un premier exemple de cette démarche est proposé par Frédéric Glorieux : il a rassemblé les indications données par Littré sur les nuances entre mots de sens voisins, dans la ligne des dictionnaires de synonymes, et il traite cet ensemble comme un document à lire ou a consulter.
Regardez...
L'expérience que je propose ici est d'extraire du document de Frédéric une petite base de données en RDF, commodément interrogeable en SPARQL.
Cette extraction se fait très simplement par une transformation XSLT de 30 lignes.
On doit pouvoir aller beaucoup plus loin !
http://francois.gannaz.free.fr/Littre/xmlittre.php?requete=projet
http://artflx.uchicago.edu/cgi-bin/dicos/pubdico1look.pl?strippedhw=projet&headword=&docyear=ALL&dicoid=LITTRE1872
http://littre.reverso.net/dictionnaire-francais/definition/projet
http://javacrim.sourceforge.net/littre/nuances.html
,jaboter
:<entry xml:id="jaboter">
........
<re type="S">JABOTER, JASER, CAQUETER. Jaboter, c'est
parler ensemble d'une voix peu élevée ; jaser, c'est parler ensemble
sans vouloir ni baisser ni élever la voix ; caqueter, c'est parler
ensemble, mais avec du bruit, avec de l'éclat. En effet,
étymologiquement, jaboter, c'est parler, pour ainsi dire, dans son
jabot, de près ; jaser, c'est, il semble, faire le jars, le mâle de
l'oie ; enfin caqueter, c'est crier comme la poule qui vient de pondre
son œuf et qui le fait savoir à grand bruit. </re>
...
</entry>
nuances.html
:<p class="entry" id="1020">
<small>1020.</small> <strong
id="jaboter">JABOTER</strong>, <strong
id="jaser">JASER</strong>, <strong
id="caqueter">CAQUETER</strong>.
<em>Jaboter</em>, c’est
<dfn>“parler ensemble d’une
voix peu élevée”</dfn> ; <em>jaser</em>, c’est
<dfn>“parler ensemble sans vouloir ni <a
href="#">baisser</a> ni élever la voix”</dfn> ;
<em>caqueter</em>, c’est <dfn>“parler ensemble, mais
avec du bruit”</dfn>, avec de l’éclat. En effet,
étymologiquement, <em>jaboter</em>, c’est parler, pour
ainsi dire, dans son <em>jabot</em>, de <a
href="#">près</a> ; <em>jaser</em>, c’est, il
<a href="#">semble</a>, faire le jars, le mâle de l’oie ;
enfin <em>caqueter</em>, c’est crier comme la poule qui
vient de pondre son œuf et qui le fait savoir à grand bruit.
</p>
<strong>
séparant les trois
termes synonymes qui rend notre entreprise aisée...a_un_sens_voisin_de
,
http://inalco/M2Trad/
.http://inalco/M2Trad/nuances
.jaboter
, seront donc @prefix m2trad: <http://inalco/M2Trad/>
.
@prefix rdf:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
...............
<http://inalco/M2Trad/nuances#jaboter>
m2trad:a_un_sens_voisin_de
<http://inalco/M2Trad/nuances#caqueter> ,
<http://inalco/M2Trad/nuances#jaser> .
..............
.nuances.rdf
)<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:m2trad="http://inalco/M2Trad/"
xmlns:h="http://www.w3.org/1999/xhtml"
xml:base="http://inalco/M2Trad/nuances">
...................
<rdf:Description rdf:about="#jaboter">
<m2trad:a_un_sens_voisin_de
rdf:resource="#jaser"/>
<m2trad:a_un_sens_voisin_de
rdf:resource="#caqueter"/>
</rdf:Description>
...................
FROM
rempli "en
dur".jaboter
[fichier jaboter.rq
]PREFIX m2trad: <http://inalco/M2Trad/>
SELECT ?syn
FROM
<http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RDF/Littre/nuances.rdf>
WHERE {
<http://inalco/M2Trad/nuances#jaboter>
m2trad:a_un_sens_voisin_de ?syn .
}
-------------------------------------------
|
syn
|
===========================================
| <http://inalco/M2Trad/nuances#caqueter> |
| <http://inalco/M2Trad/nuances#jaser> |
-------------------------------------------
jaser.rq
]jaser
,
nous faisons chou blanc... a_un_sens_voisin_de
n'est
pas symétrique !
PREFIX m2trad: <http://inalco/M2Trad/>
SELECT ?syn
FROM
<http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RDF/Littre/nuances.rdf>
WHERE {
{<http://inalco/M2Trad/nuances#jaser>
m2trad:a_un_sens_voisin_de ?syn}
UNION
{?syn m2trad:a_un_sens_voisin_de
<http://inalco/M2Trad/nuances#jaser>}.
}
------------------------------------------
|
syn
|
==========================================
| <http://inalco/M2Trad/nuances#jaboter> |
------------------------------------------
jaboter
) [fichier syn2.rq
]
PREFIX m2trad: <http://inalco/M2Trad/>
SELECT DISTINCT ?syn
FROM
<http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RDF/Littre/nuances.rdf>
WHERE {
?syn m2trad:a_un_sens_voisin_de ?x .
?syn m2trad:a_un_sens_voisin_de ?y .
FILTER (?x != ?y)
}
--------------------------------------------------------
|
syn
|
========================================================
|
<http://inalco/M2Trad/nuances#guerrier>
|
|
<http://inalco/M2Trad/nuances#aptitude>
|
|
<http://inalco/M2Trad/nuances#ainsi>
|
|
<http://inalco/M2Trad/nuances#terme>
|
| <http://inalco/M2Trad/nuances#maigrir>
........................................................... au
total, 257 sur 1341 recensés
|
<http://inalco/M2Trad/nuances#cabane>
|
|
<http://inalco/M2Trad/nuances#commandement>
|
|
<http://inalco/M2Trad/nuances#ensemencement>
|
|
<http://inalco/M2Trad/nuances#race>
|
--------------------------------------------------------
syn3.rq
]
PREFIX m2trad: <http://inalco/M2Trad/>
SELECT ?x ?y ?z
FROM
<http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/RDF/Littre/nuances.rdf>
WHERE {
?x m2trad:a_un_sens_voisin_de ?y .
?y m2trad:a_un_sens_voisin_de ?z .
FILTER (?x != ?y && ?z != ?y)
}
--------------------------------------------------------------------------------------------
|
x
|
y
|
z
============================================================================================
|
<http://inalco/M2Trad/nuances#réserve>
| #retenue> |
#modestie> |
|
<http://inalco/M2Trad/nuances#durant>
|
#pendant> | #
durant
>
|
|
...
|
|
<http://inalco/M2Trad/nuances#axiome>
|
#maxime>
| #sentence> |
|
................. au total 238 triplets
<strong>
de (par exemple)<strong id="jaboter">JABOTER</strong>,
<strong id="jaser">JASER</strong>, <strong
id="caqueter">CAQUETER</strong>
id
" ou dans le contenu textuel ?id
" est séduisant :
sa valeur est en minuscules, ce qui nous dispense d'un changement de
casse. <p class="entry" id="1196">
<small>1196.</small> <strong
id="dépouiller">DÉPOUILLER UN VÊTEMENT</strong>, <strong
id="">SE DÉPOUILLER D’UN VÊTEMENT</strong>, <strong
id="">DÉPOUILLER L’ORGUEIL, L’AMOUR</strong>, <strong
id="">SE DÉPOUILLER DE L’ORGUEIL, DE L’AMOUR</strong>.
...............
</p>
id
"
ait une valeur vide, même en première position
<p class="entry" id="776">
<small>776.</small> <strong
id="">ÊTRE ALLÉ</strong>, <strong id="">AVOIR
ÉTÉ</strong>, <strong id="aller">ALLER</strong>.
...............
</p>
<p class="entry" id="1126">
<small>1126.</small> <strong
id="">CE QUI VOUS PLAÎT</strong>, <strong id="">CE
QU’IL VOUS PLAÎT</strong>.
...............
</p>
<p class="entry" id="1197">
<small>1197.</small> <strong
id="">S’APPROCHER DE QUELQU’UN</strong>, <strong
id="approcher">APPROCHER QUELQU’UN</strong>.
..............
</p>
id
"
n'est pas un support fiable, et que l'information véritable se
trouve dans le contenu textuel.translate
va nous tirer d'affaire.translate( "UNE LOC EN MAJ",
'AÀBCÇDEÉÈÊËFGHIÎÏJKLMNOÔŒPQRSTUÙÛÜVW XYZ',
'aàbcçdeéèêëfghiîïjklmnoôœpqrstuùûüvw_xyz')
une_loc_en_maj
".nuances.xsl
]<?xml version='1.0'?>
<!DOCTYPE stylesheet [
<!ENTITY maj
"'AÀBCÇDEÉÈÊËFGHIÎÏJKLMNOÔŒPQRSTUÙÛÜVW XYZ'">
<!ENTITY min
"'aàbcçdeéèêëfghiîïjklmnoôœpqrstuùûüvw_xyz'">
]>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version='1.0'
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:m2trad="http://inalco/M2Trad/"
xmlns:h="http://www.w3.org/1999/xhtml"
>
<xsl:output method="xml" indent="yes" encoding="utf-8" />
<xsl:template match="/">
<rdf:RDF
xml:base="http://inalco/M2Trad/nuances">
<xsl:apply-templates
select="h:html//h:p[@class='entry']" />
</rdf:RDF>
</xsl:template>
<xsl:template match="h:p[@class='entry']">
<rdf:Description
rdf:about="#{translate(h:strong[1]/text(), &maj;, &min;)}">
<xsl:apply-templates
select="h:strong[position()>1]" />
</rdf:Description>
</xsl:template>
<xsl:template match="h:strong">
<m2trad:a_un_sens_voisin_de
rdf:resource="#{translate(text(), &maj;, &min;)}" />
</xsl:template>
</xsl:stylesheet>
"http://www.w3.org/1999/xhtml"
est de droit puisqu'il figure dans le fichier-source.h:html
, h:p
et h:strong
pour désigner sans méprise les éléments html
,
p
et strong
de la source."{une exp. XPath}"
dans les attributs, qui demande l'évaluation (dynamique) de
l'expression XPath