tag:linuxfr.org,2005:/tags/taln/publicLinuxFr.org : les contenus étiquetés avec « taln »2022-11-28T04:51:52+01:00/favicon.pngtag:linuxfr.org,2005:Post/432662022-11-21T10:48:28+01:002022-11-21T10:48:28+01:00Envie de traduire automatiquement un livre et de le faire imprimer<p>Bonjour à tous,</p>
<p>J'ai découvert récemment un bouquin en anglais que je trouve passionnant et que j'aimerai traduire et imprimer pour un usage privé (pas pour le revendre).</p>
<p>N'étant ni traducteur, ni imprimeur, je voudrai bien sûr passer par des outils existants et je me suis dis que la communauté linuxfr avait sans doute quelques conseils à donner sur ce sujet :).</p>
<p>Voici donc plein de questions en vrac :</p>
<ol>
<li>Est-ce légal de traduire et d'imprimer un livre à titre personnel ?</li>
<li>Je voulais le faire traduire automatiquement, quel logiciel/site conseillez vous ? J'ai déjà entendu parlé ici de DeepL, est-ce toujours une référence ? Pour info, le livre que je veux traduire c'est de l'histoire des sciences avec pas mal de termes techniques et médicaux</li>
<li>Je peux avoir le livre sous plusieurs format : epub, pdf. Quel est le format le plus adapté pour une traduction automatique ? Et pour le faire imprimer ? C'est pratique d'imprimer du epub ?</li>
<li>Enfin, est-ce que vous avez des bons site d'imprimeurs en ligne pour des ouvrages type livre avec quelques graphiques et schéma ? J'en avais testé un plutôt bien pour imprimer un livre sous format numérique, mais le souci c'est qu'il ajoutait sur chaque page un truc genre : "ce document est la propriété exclusive de…" pas trop gênant, mais si on peut faire sans c'est mieux. J'imagine que c'est pour éviter des problèmes légaux.</li>
</ol>
<p>Voilà, si vous avez une réponse à l'une de ces questions ça m'intéresse !</p>
<p>Bonne journée,<br>
Andréas </p>
<div><a href="https://linuxfr.org/forums/general-hors-sujets/posts/envie-de-traduire-automatiquement-un-livre-et-de-le-faire-imprimer.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129367/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-hors-sujets/posts/envie-de-traduire-automatiquement-un-livre-et-de-le-faire-imprimer#comments">ouvrir dans le navigateur</a>
</p>
Andréas Livethttps://linuxfr.org/nodes/129367/comments.atomtag:linuxfr.org,2005:Diary/401462022-02-13T14:50:26+01:002022-02-13T19:07:49+01:00Le dictionnaire des francophones : un dictionnaire francophone structuré libreLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Les mots sont à la mode alors j’en profite pour parler d’un projet intéressant de quelques mois d’age, pour sa sortie officielle : le dictionnaire des francophones réalisé avec <a href="https://2if.universite-lyon.fr/">l’institut international de la francophonie</a>.</p>
<p><a href="https://www.dictionnairedesfrancophones.org/">https://www.dictionnairedesfrancophones.org/</a></p>
<p>C’est un projet de dictionnaire structuré collaboratif, créé entre autre avec les données du wiktionnaire. Réalisé (entre autre ?) par le wikimédien Noé<br>
On peut y consulter un mot comme <a href="https://www.dictionnairedesfrancophones.org/form/motus">motus</a>.</p>
<p>Jusque là rien de très original, des dictionnaires comme ça on en a plutôt pas mal en consultation sur le net.</p>
<p>Ce qui est beaucoup plus original c’est la présence d’un <a href="https://www.dictionnairedesfrancophones.org/sparql">point d’accès SPARQL</a> pour faire des requêtes sur les données ! On a donc un graphe RDF structuré par un modèle de donnée <a href="https://mnemotix.gitlab.io/ddf/ddf-models/">documenté</a> et des relations entre les mots et leurs formes, leur définition, leur étymologie …</p>
<p>La communauté du wiktionnaire liste <a href="https://fr.wiktionary.org/wiki/Projet:Requ%C3%AAter_le_Wiktionnaire">des requêtes intéressantes sur cette page</a>.</p>
<p>Quel est le prétexte à cette assez fruste introduction du projet des mois après sa sortie ? <a href="https://www.dictionnairedesfrancophones.org/sparql#query=%0APREFIX%20ontolex%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2Fns%2Flemon%2Fontolex%23%3E%0A%0ASELECT%20distinct%20%3Fmot%0AWHERE%20%7B%0A%20%20%5B%5D%20ontolex%3AwrittenRep%20%3Fmot%20.%0A%20%20FILTER%20(%20strlen(%3Fmot)%20%3D%205%20)%0A%7D%0AORDER%20BY%20DESC(%3Fmot)&endpoint=https%3A%2F%2Fwww.dictionnairedesfrancophones.org%2Fapi%2Fsparql&requestMethod=POST&tabTitle=Query&headers=%7B%7D&contentTypeConstruct=application%2Fn-triples%2C*%2F*%3Bq%3D0.9&contentTypeSelect=application%2Fsparql-results%2Bjson%2C*%2F*%3Bq%3D0.9&outputFormat=table">Une tentative de requête de plus</a> pour trouver les suites de 5 lettres qui pourraient servir à un wordle francophone .</p>
<p>On peut discuter des résultats en commentaires, mais j’ai l’impression qu’il en manque :)</p>
<p>La prochaine fois, les données lexicale structurées de Wikidata.</p>
<div><a href="https://linuxfr.org/users/thoasm/journaux/le-dictionnaire-des-francophones-un-dictionnaire-francophone-structure-libre.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/126906/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/thoasm/journaux/le-dictionnaire-des-francophones-un-dictionnaire-francophone-structure-libre#comments">ouvrir dans le navigateur</a>
</p>
Thomas Douillardhttps://linuxfr.org/nodes/126906/comments.atomtag:linuxfr.org,2005:Bookmark/17602020-07-06T08:29:28+02:002020-07-06T08:29:28+02:00Abstract Wikipédia<a href="https://www.developpez.com/actu/306881/Abstract-Wikipedia-le-projet-experimental-de-l-encyclopedie-en-ligne-utilise-un-langage-de-description-pour-generer-du-contenu-dans-d-autres-langues/">https://www.developpez.com/actu/306881/Abstract-Wikipedia-le-projet-experimental-de-l-encyclopedie-en-ligne-utilise-un-langage-de-description-pour-generer-du-contenu-dans-d-autres-langues/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/121001/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/gusterhack/liens/abstract-wikipedia#comments">ouvrir dans le navigateur</a>
</p>
gusterhackhttps://linuxfr.org/nodes/121001/comments.atomtag:linuxfr.org,2005:Diary/362592015-12-15T01:13:52+01:002015-12-15T08:46:59+01:00Analyse de texteLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Mon but est d’analyser la fréquence de syllabes ou de mots depuis différents textes. Les fréquences d’apparition de chaque mot/syllabe étant cumulées dans une base de données.</p>
<p>À chaque fois que j’ai posté du code ici je n’ai reçu que des critiques constructives alors je vous soumets celui-là :)</p>
<p>Le code fait ce que je lui demande mais il est très lent sur de gros textes. Je pense que le problème se situe dans mes interactions avec la base de données. J’ai <s>quelques</s> une idée pour remédier à ce problème, vous verrez plus bas, vous me donnerez peut-être votre avis.</p>
<pre><code class="python3"><span class="c">#!/usr/bin/env python3</span>
<span class="sd">"""Reader.py: Read text for strings frequency."""</span>
<span class="n">__author__</span> <span class="o">=</span> <span class="s">"M4rotte"</span>
<span class="n">__copyright__</span> <span class="o">=</span> <span class="s">"Copyright 2015, Institut Marotte pour un Mouling de Qualitäy"</span>
<span class="n">__license__</span> <span class="o">=</span> <span class="s">"GPL"</span>
<span class="n">__version__</span> <span class="o">=</span> <span class="s">"0.1"</span>
<span class="kn">import</span> <span class="nn">sys</span> <span class="c"># SYS module (used for argument management)</span>
<span class="kn">import</span> <span class="nn">re</span> <span class="c"># Regular expressions</span>
<span class="kn">import</span> <span class="nn">sqlite3</span> <span class="c"># SQLite</span>
<span class="kn">import</span> <span class="nn">time</span> <span class="c"># Time is something you've never have enough</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">deque</span> <span class="c"># Read buffer</span>
<span class="n">MAXLEN</span> <span class="o">=</span> <span class="mi">24</span>
<span class="n">KEEPMAXLEN</span> <span class="o">=</span> <span class="mi">3</span> <span class="c"># Over this length we only keep strings which don't match following regexp to avoid too many splitted words</span>
<span class="n">reKEEP</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">r'^( |[A-ZÉÀÔ])(.*)( |\n|\.|,|\;)$'</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="s">''</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">MAXLEN</span><span class="p">)])</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">string</span> <span class="o">=</span> <span class="s">''</span>
<span class="n">strings</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">strings_ok</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">dbfile</span> <span class="o">=</span> <span class="s">'./reader.sqlite'</span>
<span class="c">### Read input and populate `strings{}`</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">while</span> <span class="k">True</span><span class="p">:</span>
<span class="n">c</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">MAXLEN</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">c</span><span class="p">:</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)):</span>
<span class="n">buf</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
<span class="n">buf</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="c">#print(buf)</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">MAXLEN</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">c</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">MAXLEN</span><span class="p">):</span>
<span class="n">string</span> <span class="o">=</span> <span class="s">''</span>
<span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">MAXLEN</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="c">#print("(i,j):"+str(i)+","+str(j))</span>
<span class="k">if</span> <span class="n">buf</span><span class="p">[</span><span class="n">i</span><span class="p">]:</span>
<span class="n">string</span> <span class="o">+=</span> <span class="n">buf</span><span class="p">[</span><span class="n">j</span><span class="p">]</span>
<span class="n">s</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">replace</span> <span class="p">(</span><span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="s">" "</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">" "</span><span class="p">,</span><span class="s">" "</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
<span class="n">strings</span><span class="p">[</span><span class="n">string</span><span class="p">]</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c">#print ("ANOTHER:"+string)</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="n">strings</span><span class="p">[</span><span class="n">string</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="c">#print ("NEW:"+string) </span>
<span class="c">#print(strings)</span>
<span class="n">counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">except</span> <span class="ne">KeyboardInterrupt</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">counter</span><span class="p">)</span> <span class="o">+</span> <span class="s">"</span><span class="se">\t</span><span class="s">×"</span><span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">MAXLEN</span><span class="p">)</span> <span class="o">+</span> <span class="s">" bytes read.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">strings</span><span class="p">))</span> <span class="o">+</span> <span class="s">"</span><span class="se">\t</span><span class="s">raw strings.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="c">### Remove unwanted strings</span>
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">strings</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> <span class="o"><</span> <span class="n">KEEPMAXLEN</span><span class="p">:</span>
<span class="n">strings_ok</span><span class="p">[</span><span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">strings</span><span class="p">[</span><span class="n">s</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">reKEEP</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
<span class="n">strings_ok</span><span class="p">[</span><span class="n">s</span><span class="p">]</span> <span class="o">=</span> <span class="n">strings</span><span class="p">[</span><span class="n">s</span><span class="p">]</span>
<span class="c">#print(s) </span>
<span class="c">### Free some memory</span>
<span class="n">buf</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">strings</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">strings_ok</span><span class="p">))</span> <span class="o">+</span> <span class="s">"</span><span class="se">\t</span><span class="s">OK strings.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="c"># Open database</span>
<span class="n">connection</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">dbfile</span><span class="p">)</span>
<span class="n">cursor</span> <span class="o">=</span> <span class="n">connection</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
<span class="c"># Create SQLite table if not exists, to store shits…</span>
<span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">'create table if not exists strings (string text primary key, freq int)'</span><span class="p">)</span>
<span class="c"># Store `strings_ok{}` into database</span>
<span class="n">inserted</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">updated</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">strings_ok</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">"insert into strings values (?, ?)"</span><span class="p">,(</span><span class="n">s</span><span class="p">,</span> <span class="n">strings_ok</span><span class="p">[</span><span class="n">s</span><span class="p">]))</span>
<span class="n">inserted</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">except</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">IntegrityError</span><span class="p">:</span>
<span class="n">updated</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">"update strings set freq=freq+? where string like ?"</span><span class="p">,(</span><span class="n">strings_ok</span><span class="p">[</span><span class="n">s</span><span class="p">],</span><span class="n">s</span><span class="p">))</span>
<span class="k">if</span> <span class="p">((</span><span class="n">inserted</span><span class="o">+</span><span class="n">updated</span><span class="p">)</span> <span class="o">%</span> <span class="mi">100</span> <span class="o">==</span> <span class="mi">0</span><span class="p">):</span>
<span class="n">prog</span> <span class="o">=</span> <span class="p">(</span><span class="n">inserted</span><span class="o">+</span><span class="n">updated</span><span class="p">)</span><span class="o">/</span><span class="nb">len</span><span class="p">(</span><span class="n">strings_ok</span><span class="p">)</span><span class="o">*</span><span class="mi">100</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="s">"Database update: "</span><span class="o">+</span><span class="nb">str</span><span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">prog</span><span class="p">,</span><span class="mi">1</span><span class="p">))</span><span class="o">+</span><span class="s">"%</span><span class="se">\r</span><span class="s">"</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="s">"Database update:</span><span class="se">\t</span><span class="s">OK. "</span><span class="p">)</span>
<span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">"select count(*) from strings"</span><span class="p">)</span>
<span class="n">count</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">inserted</span><span class="p">)</span><span class="o">+</span><span class="s">"</span><span class="se">\t</span><span class="s">strings inserted in database.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">updated</span><span class="p">)</span><span class="o">+</span><span class="s">"</span><span class="se">\t</span><span class="s">strings updated in database.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">write</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">count</span><span class="p">)</span><span class="o">+</span><span class="s">"</span><span class="se">\t</span><span class="s">records in database.</span><span class="se">\n</span><span class="s">"</span><span class="p">)</span>
<span class="n">connection</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></code></pre>
<p>Je pense que la grosse erreur se situe ici :</p>
<pre><code class="python"><span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s">"update strings set freq=freq+? where string like ?"</span><span class="p">,(</span><span class="n">strings_ok</span><span class="p">[</span><span class="n">s</span><span class="p">],</span><span class="n">s</span><span class="p">))</span></code></pre>
<p>ce doit être une requête coûteuse à cause de la clause <em>where</em>…</p>
<p>Donc mon idée serait de reporter l’incrément des compteurs au niveau du code Python, ce qui ne nécessite qu’un <em>select</em>, puis de remplacer l’<em>update</em> par un <em>insert or replace</em>…</p><div><a href="https://linuxfr.org/users/m4rotte/journaux/analyse-de-texte.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/107635/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/m4rotte/journaux/analyse-de-texte#comments">ouvrir dans le navigateur</a>
</p>
Marotte ⛧https://linuxfr.org/nodes/107635/comments.atomtag:linuxfr.org,2005:Diary/355572015-01-25T14:11:59+01:002015-01-25T14:11:59+01:00Galaxie Wikidata : le hub est en extensionLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>On a régulièrement parlé ici de Wikidata (pour ceux qui ne seraient pas convaincus, consultez <a href="//linuxfr.org/tags/wikidata/public">le tag idoine</a>. C'est un projet bas niveau, qui ne prend sens que si les données que la bases stocke sont utilisées.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f732d6d656469612d63616368652d616b302e70696e696d672e636f6d2f373336782f32622f32302f32652f32623230326565346138326262646566313766663433633832313531663637632e6a7067/2b202ee4a82bbdef17ff43c82151f67c.jpg" alt="Le Point Central de la série Valérian, par Mézière" title="Source : https://s-media-cache-ak0.pinimg.com/736x/2b/20/2e/2b202ee4a82bbdef17ff43c82151f67c.jpg"></p>
<p>Ça fournit une explication au titre de mon journal à dessin obscur a dessin, dans l'immense espace à explorer qu'est le cyberespace, il existe des connexions infinies et des étoiles à explorer. Des nouveaux outils et des routes galactiques viennent en permanence le peupler, certaines constituant des hubs permettant de créer des ponts entre les différents univers du web</p>
<p>Trève de lyrisme, du concret : dans les nouvelles hebdomadaires Wikidata [1], deux projets intéressant illustrant cette notion de Hub (encore plus central depuis que google va intégrer freebase dans Wikidata):<br>
* Un outil de traduction automatique des articles Wikipédia, utilisant les labels des items Wikidata pour les ébauches de traduction<br>
* Une intégration de Wikidata dans gnome shell, pour intégrer Wikidata dans les recherches de gnome [3]. C'est moins ambitieux que Nepomuk, mais c'est un début.</p>
<p>Au passage je découvre <a href="https://www.apertium.org/index.eng.html?dir=spa-por#translation">Apertium</a>, l'outil libre utilisé pour la traduction automatique. À suivre.</p>
<p>[1] <a href="https://www.wikidata.org/wiki/Wikidata:Status_updates/2015_01_24">https://www.wikidata.org/wiki/Wikidata:Status_updates/2015_01_24</a><br>
[2] <a href="https://blog.wikimedia.org/2015/01/20/try-content-translation/">https://blog.wikimedia.org/2015/01/20/try-content-translation/</a><br>
[3] <a href="https://github.com/6ahodir/wikidata-search-provider">https://github.com/6ahodir/wikidata-search-provider</a></p>
<p>PS: j'en profite encore pour tenter de repousser <a href="//linuxfr.org/suivi/tags-semantiques">l'entrée 1291</a> du suivi. Oui je suis lourd.</p><div><a href="https://linuxfr.org/users/thoasm/journaux/galaxie-wikidata-le-hub-est-en-extension.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/104602/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/thoasm/journaux/galaxie-wikidata-le-hub-est-en-extension#comments">ouvrir dans le navigateur</a>
</p>
Thomas Douillardhttps://linuxfr.org/nodes/104602/comments.atomtag:linuxfr.org,2005:Diary/352572014-09-19T01:08:06+02:002014-09-19T01:08:06+02:00Un entretien avec le conseiller scientifique de TBBTLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>/. nous gratifie d'un entretien avec le conseiller scientifique de <a href="https://fr.wikipedia.org/wiki/The%20Big%20Bang%20Theory" title="Définition Wikipédia">The Big Bang Theory</a>, une série américaine que vous connaissez sans doute ;-)</p>
<p><a href="http://entertainment.slashdot.org/story/14/09/17/0116249/interviews-david-saltzberg-answers-your-questions-about-the-big-bang-theory">http://entertainment.slashdot.org/story/14/09/17/0116249/interviews-david-saltzberg-answers-your-questions-about-the-big-bang-theory</a></p>
<p>C'est en anglais, j'imagine que certains pourront proposer des traducteurs en ligne un peu plus efficaces que google trad, ou même que <a href="http://apertium.org">http://apertium.org</a> (qui obligerait sans doute à passer par l'espagnol ou l’espéranto pour faire la traduction anglais => français).</p>
<p>On y apprend que ce conseiller s'est efforcé de ne pas laisser passer d'erreurs scientifiques, en accord avec les scénaristes et les acteurs, même s'il reconnaît qu'il peut y avoir une ou deux coquilles. Ce scientifique reconnaît qu'il n'a plus le temps de s'intéresser à la culture geek :/ Même s'il est content de pouvoir parler de matière noire et autres termes, qui donneront l'envie à certains d'aller approfondir via wikipedia, voire susciter des vocations scientifiques. La série a tout de même mobilisé quelques invités de renom : que ce soit Stephen Hawking, Steve Wozniak, Stan Lee ou Buzz Aldrin.</p>
<p>Si vous trouvez intéressants ce genre d'<a href="//linuxfr.org/tags/entretien/public">entretien</a>, il serait possible d'en préparer dans l'<a href="//linuxfr.org/redaction">espace de rédaction</a> (il y en a d'ailleurs en cours). Mais qui serait-il possible de contacter en restant dans le domaine des séries ? Monsieur Poulpe pour <a href="https://fr.wikipedia.org/wiki/Nerdz" title="Définition Wikipédia">Nerdz</a> ? Simon Astier pour <a href="dont%20la%20suite%20de%20la%20saison%203%20est%20attendue...">[Hero Corp]</a> ? Un des auteurs de <a href="https://fr.wikipedia.org/wiki/M%C3%A9tal%20Hurlant%20Chronicles" title="Définition Wikipédia">Métal Hurlant Chronicles</a> ? D'autres envies ou possibilités ?</p>
<p>À vous les studios ! </p><div><a href="https://linuxfr.org/users/baud/journaux/un-entretien-avec-le-conseiller-scientifique-de-tbbt.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/103332/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/baud/journaux/un-entretien-avec-le-conseiller-scientifique-de-tbbt#comments">ouvrir dans le navigateur</a>
</p>
BAudhttps://linuxfr.org/nodes/103332/comments.atomtag:linuxfr.org,2005:Diary/324512012-04-12T15:27:54+02:002012-04-12T15:27:54+02:00De la prédiction de l'auteur d'un journal sur linuxfrLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p>Voici un journal relatant une petite expérience que j'ai faite, c'est peut-être un peu HS, mais je trouve ça cool donc je m'y risque :)</p>
<p>Je me suis récemment demandé si il était possible, à partir d'une base de données de messages, de deviner l'auteur d'un message donné.<br />
J'ai donc codé un script qui, à partir de l'analyse statistique de nombreux journaux sur linuxfr, devrait déterminer l'auteur d'un journal inconnu.</p>
<p>Le principe est simple : On regroupe les journaux de chaque auteur, et on regarde la densité de chaque mot, des caractères spéciaux (ponctuation…), des majuscules…<br />
Il suffit ensuite, de regarder si la densité de ces éléments dans un journal inconnu est plus ou moins proche de celle des journaux de chaque auteur connu.</p>
<p>Il s'avère que ce système est plutôt concluant :</p>
<p>Prenons <a href="http://linuxfr.org/users/paladar/journaux/surveillance-des-populations-siemens-recommence-en-syrie">le dernier journal de paladar</a>.<br />
Je le donne à manger à mon script, qui va classer les 77 personnes pour lesquelles j'ai plus de 5 journaux en mémoire (histoire d'avoir une base à peu près solide de référence pour chaque personne), par ordre de probabilité qu'elle ait posté le message.<br />
Après passage à la moulinette, mon script renvoie en première position paladar !<br />
Il a donc, à partir de 8 lignes de texte, trouvé l'auteur du message parmi 77 personnes.</p>
<p>Si je prend le dernier <a href="http://linuxfr.org/users/gnumdk/journaux/unity-vs-gnome-panel">journal</a> de gnumdk, mon script sort gnumdk en 4è position (sur 77), il n'est donc pas premier, mais il est bien sorti de la masse.<br />
Pour <a href="http://linuxfr.org/users/niconico/journaux/hs-hacker-le-probleme-du-logement">ce journal</a>, niconico se retrouve en 2è position.<br />
Et pour finir, si je prend <a href="http://linuxfr.org/news/sortie-de-la-version-4-7-du-compilateur-gcc">une dépêche</a>, patrick_g sort bien en première place, alors que mon script à seulement vu quelques journaux qu'il a pu rédiger.</p>
<p>On voit donc, qu'en faisant quelques statistiques sur un texte, on peut arriver à sortir l'auteur probable de ce dernier, avec pas mal de facilité.</p>
<p>Après, il arrive parfois que le script ne soit pas du tout pertinent (pour des personnes ayant un style d'écriture ressemblant trop à d'autres, si il y a des citations…), mais il l'est dans un bon nombre de cas.<br />
La pertinence dépend d'ailleurs beaucoup de la taille du texte inconnu : Si il est tout petit, il est logique qu'il soit bien plus dur de trouver l'auteur.</p>
<p>On imagine donc qu'avec des techniques plus évoluées, il est possible d'avoir des résultats assez impressionnants.</p>
<p>Je vous donne l'archive contenant le fichier contenant les journaux ainsi que mes scripts, si vous souhaitez vous amuser, ou regarder le code source (les commentaires à ce sujet sont bienvenus). Je vous conseille d'utiliser <a href="http://pypy.org/">pypy</a> pour faire tourner les scripts (ça pourra les accélérer).</p>
<ul><li><a href="http://www.palkeo.com/lib/exe/fetch.php?media=projets:detecteur-auteur.zip">Code source (licence WTFPL)</a></li>
<li><a href="https://fr.wikipedia.org/wiki/Stylom%C3%A9trie">Stylométrie sur wikipédia</a></li>
</ul><p>PS : Je tiens à remercier les serveur de linuxfr pour leur coopération lors de l'aspiration des journaux.</p><div><a href="https://linuxfr.org/users/palkeo/journaux/de-la-prediction-de-l-auteur-d-un-journal-sur-linuxfr.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/90267/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/palkeo/journaux/de-la-prediction-de-l-auteur-d-un-journal-sur-linuxfr#comments">ouvrir dans le navigateur</a>
</p>
palkeohttps://linuxfr.org/nodes/90267/comments.atomtag:linuxfr.org,2005:Diary/309192011-03-20T18:58:06+01:002011-03-20T18:58:06+01:00La stéganographie et le traitement automatique des languesLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<h2>La stéganographie et le traitement automatique des langues</h2>
<p>Bon-jour-nal,</p>
<p>Alors, ceci n'a pas vraiment de rapport avec le logiciel libre, mais je me dis que ça intéressera sûrement les gens du coin. J'avais envie de partager mes petites connaissances accumulées ces derniers jours sur le sujet. Au pire, je me ferai moinsser et je ne le referai plus :)</p>
<p>Déjà, qu'est-ce que la <a href="http://fr.wikipedia.org/wiki/St%C3%A9ganographie">stéganographie</a> ? Sa problématique est de transmettre un message de manière à ce que seul le destinataire remarque son importance. Généralement un support (une image, un son ou un texte par exemple) est utilisé afin de cacher un message. Un domaine lié est le <a href="http://fr.wikipedia.org/wiki/tatouage%20num%C3%A9rique" title="Définition Wikipédia">tatouage numérique</a>, les concepts sont similaires, modifier peu le document support, mais dans une optique différente, le marquage du support, souvent pour pouvoir le tracer.</p>
<p>Le <a href="http://fr.wikipedia.org/wiki/TAL">Traitement Automatique des Langues</a> (TAL) consiste à utiliser l'informatique pour analyser et traiter les langues.</p>
<p>Les recherches dans le domaine de la stéganographie linguistique sont récentes, les premiers articles semblent dater des années 2001-2002. Cela paraît normal quand on sait que les grandes avancées dans le domaine du traitement automatique des langues ont été faites peu avant et qu'elles étaient prérequises aux recherches en stéganographie linguistique.</p>
<p>Bon, rentrons dans le vif du sujet, c'est-à-dire le fonctionnement de la stéganographie linguistique. La méthode décrite ici correspond à celle de <a href="http://www.cl.cam.ac.uk/~sc609/pubs/naacl10frannie.pdf">cet article</a>. Cette méthode n'est bien sûr pas la seule mais elle permet de comprendre le principe. Nous devons d'abord décider comment nous obtiendrons des informations (des bits) à partir modifications que nous espérons non-détectables. Tout d'abord, nous avons besoin d'un «dictionnaire» contenant en entrée des expressions et en définition des expressions équivalentes. L'idée est d'abord d'avoir un algorithme qui évalue les expressions du texte que nous pouvons remplacer. Ensuite, afin d'obtenir un bit, nous posons que le remplacement par une expression équivalente égale 0 et que le non-remplacement égale 1. Nous avons donc un algorithme, très basique, qui nous permet de cacher des informations dans un texte. Cet algorithme n'est cependant pas très efficace en terme de ratio longueur texte/longueur message caché, mais il n'est destiné qu'à expliquer le principe.</p>
<p>Ensuite, pour recouvrer le message, le destinataire doit simplement posséder le même dictionnaire, le même système d'évaluation et réaliser l'opération en sens inverse.</p>
<p>Tout cela n'était que le fonctionnement simplifié de l'algorithme. En pratique, il faut aussi vérifier que les remplacements effectués soient corrects sémantiquement et grammaticalement, sinon le document paraîtra suspect. Les auteurs de l'article proposent d'utiliser Google N-gram afin de vérifier que les remplacements existent bien dans la langue. Ensuite, afin d'obtenir un meilleur ratio bit par phrase, il est possible d'utiliser plusieurs dictionnaires, dans un ordre prédéfini, traitant de problème différents : synonyme et syntaxe(passivation, thématisation ou emphase) par exemple. En ce qui concerne la clef, nous pouvons par exemple définir un nombre qui définit les phrases à traiter ou leur ordre de traitement si nous utilisons plusieurs dictionnaires.</p>
<p>Concernant les limites de cette méthode, il est fort probable que ses performances dépendent de la langue utilisée, ou formulé différemment, il est fort probable que les langues, suivant leur fonctionnement se prête mieux à certains traitements. Certains texte ne sont pas appropriés à ces changements, notamment les textes fameux...<br />
Le dernier point, le plus important il me semble, c'est le calcul de la résistance de ces systèmes de stéganographie, comment les évaluer ?<br />
(Si vous avez des idées, n'hésitez pas à les exprimer dans les commentaires)</p><div><a href="https://linuxfr.org/users/lejocelyn/journaux/la-st%C3%A9ganographie-et-le-traitement-automatique-des-langues.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/85234/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/lejocelyn/journaux/la-st%C3%A9ganographie-et-le-traitement-automatique-des-langues#comments">ouvrir dans le navigateur</a>
</p>
lejocelynhttps://linuxfr.org/nodes/85234/comments.atomtag:linuxfr.org,2005:Diary/308332011-03-02T04:25:50+01:002011-03-02T04:25:50+01:00Zino, RMS<p>Alors <a href="https://linuxfr.org/users/samwang">SamWang</a>, il a répondu quoi RMS ?</p><div><a href="https://linuxfr.org/users/duncan_idaho/journaux/zino-rms.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/84866/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/duncan_idaho/journaux/zino-rms#comments">ouvrir dans le navigateur</a>
</p>
Duncan Idahohttps://linuxfr.org/nodes/84866/comments.atomtag:linuxfr.org,2005:Diary/306822011-01-17T18:00:15+01:002011-01-17T18:00:15+01:00Watson, Jeopardy et le test de Turing
Vous connaissez tous le jeu <a href="http://fr.wikipedia.org/wiki/Jeopardy!">Jeopardy</a> qui passe sur les télévisions de plusieurs pays. En gros les candidats gagnent de l'argent en répondant à des questions. Mouaif pas très nouveau tout ça.<br />
Le seul truc un peu original c'est qu'en fait l'interrogateur donne la réponse et que c'est au candidat de reconstituer la question.<br />
Exemple: Si l'interrogateur vous dit "LinuxFR" vous devez répondre "Quel est le site francophone qui rassemble le plus de trolleurs"....ou un truc de ce style.<br />
<br />
C'est un jeu télévisé très populaire aux USA ou il est diffusé depuis des décennies. C'est sans doute cette popularité qui a décidé IBM a tenter un gros coup technologique et publicitaire.<br />
Il y a 15 ans IBM avait déjà défié et vaincu le champion du monde d'échecs avec son calculateur <a href="http://fr.wikipedia.org/wiki/Deep_Blue">Deep Blue</a>. Cette fois c'est au Jeopardy que s'attaque la firme américaine avec son programme d'intelligence artificielle <a href="http://fr.wikipedia.org/wiki/Watson_%28intelligence_artificielle%29">Watson</a>.<br />
Ce programme tourne sur une bonne machine: 10 racks de serveurs Power 750 ce qui représente 360 processeurs Power7 pour un total de 2 880 coeurs de calcul (80 teraflops). On ajoute à ça une tonne de RAM (15 Teraoctets) pour stocker la base de connaissances et la bête est maintenant prête à défier ces chétifs humains.<br />
Bien entendu, comme l'immense majorité des supercalculateurs, Watson fonctionne sous Linux et utilise plusieurs logiciels libres (<a href="http://en.wikipedia.org/wiki/Eclipse_%28software%29">Eclipse</a>, <a href="http://en.wikipedia.org/wiki/Hadoop">Hadoop</a>, <a href="http://en.wikipedia.org/wiki/UIMA">UIMA</a>, etc).<br />
<br />
Si on y réfléchit on se rend compte que le Jeopardy, bien que moins prestigieux intellectuellement que le jeu d'échecs, est sans doute bien plus difficile à aborder pour un ordinateur. Aux échecs tout est mathématisable et la difficulté réside presque uniquement dans la profondeur de calcul que la machine peut atteindre. Avec le Jeopardy on rentre dans la zone floue du "<a href="http://fr.wikipedia.org/wiki/Langage_Naturel">langage naturel</a>" et la programmation d'une machine devient d'un seul coup plus ardue. Pour vraiment prétendre être un maître de ce jeu il faudrait <i>comprendre réellement</i> les questions ce qui impliquerait d'être capable de passer le fameux <a href="http://fr.wikipedia.org/wiki/Test_de_turing">test de Turing</a>.<br />
<br />
IBM n'a pas (encore) cette prétention mais il semble que Watson se défende déjà plus que correctement. La confrontation télévisée est prévue pour le mois de février (un million pour le gagnant !) mais <a href="http://www.linuxfordevices.com/c/a/News/IBMs-Watson-wins-Jeopardy-practice-round/?kc=rss">une répétition à déjà eu lieu</a> le 13 janvier entre deux champions humains (Ken Jennings et Brad Rutter) et le calculateur d'IBM.<br />
En dépit du fait que Jennings et Rutter sont des super spécialistes (74 victoires d'affilée pour l'un et 3.25 millions de dollars de gain pour l'autre) c'est la machine qui a remporté la manche lors de cette répétition. Les gains s'établissent à 4 400$ pour Watson, 3 400$ Jennings et 1 200$ pour Rutter.<br />
<br />
Évidemment pour arriver à ce résultat la base de connaissance est cruciale. IBM annonce que Watson a été "nourri" avec 200 millions de pages de texte et plus d'un million de livres divers et variés (encyclopédies, scénarios de films, journaux, magazines, livres pour enfants, etc).<br />
A partir de cette énorme base les algorithmes moulinent toute l'information et établissent des corrélations entre les données pour pouvoir reconstituer les questions du Jeopardy. Pour bien jouer il faut pouvoir prendre en compte l'ironie, l'argot, les jeux de mots, la subtilité de certaines questions. Comme les questions du jeu valent de plus en plus cher il faut aussi un petit peu de sens stratégique pour savoir quand répondre (si la probabilité de succès est forte) et quand passer la main (au cas ou la machine n'est pas sûre de sa réponse et risque de tout perdre).<br />
<br />
IBM affirme que ce programme de développement (nommé <i>DeepQA research project</i>) pourra avoir des applications dans divers domaines. La vice-présidente d'IBM Research, Katharine Frase, évoque une assistance aux médecins sous la forme d'un programme d'intelligence artificielle capable d'interpréter les réponses des malades: "<i>Les patients n'emploient pas les termes que les médecins ont appris à la faculté pour décrire leurs maux. Ils emploient simplement les termes qu'ils ont appris auprès de leurs parents en grandissant</i>".<br />
Selon elle un programme du type de Watson pourrait interpréter ces déclarations floues et établir des corrélations avec les informations médicales pertinentes disponibles dans les journaux spécialisés.<br />
On évoque aussi une assistance juridique pour les avocats ou même, pourquoi pas, une intégration dans les moteurs de recherche que nous utilisons tous.<br />
<br />
Bien entendu ces perspectives ne sont pas pour tout de suite. Pour l'instant il n'y a eu qu'une répétition et le vrai test contre les humains n'aura lieu que le mois prochain. Il n'empêche qu'au tout début du programme <i>DeepQA research project</i> les représentants d'IBM avaient déclarés que: "<i>Si le programme parvient à battre les humains alors le domaine de l'intelligence artificielle aura fait un bond en avant</i>".<br />
Nous y sommes !<div><a href="https://linuxfr.org/users/patrick_g/journaux/watson-jeopardy-et-le-test-de-turing.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/56937/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/patrick_g/journaux/watson-jeopardy-et-le-test-de-turing#comments">ouvrir dans le navigateur</a>
</p>
patrick_ghttps://linuxfr.org/nodes/56937/comments.atomtag:linuxfr.org,2005:Diary/298732010-06-24T14:07:06+02:002010-06-24T14:07:06+02:00Chat80
Chat80 est bien connu dans le monde de l'intelligence artificielle et le traitement automatique du langage naturel (TALN).<br />
Ce logiciel a été écrit en Prolog entre 1978 et 1982 par Francisco Pereira et David H. Warren. Prolog en était alors à ses balbutiements, et encore assez peu considéré sérieusement par la communauté scientifique d'alors.<br />
<br />
Chat80 possédait à l'époque une petite base de données prolog de géographie. On y trouvait quelques informations sur les pays frontaliers les un aux autres, leur population, leur capital, leur surface ou encore les fleuves qui y coulent.<br />
Chat80 est ce que l'on appel un NLIDB : Natural Language Interface to DataBase. On peut donc lui poser quelques questions en anglais et voir s'afficher la réponse.<br />
<br />
Un simple exemple est tout de suite parlant : <br />
<cite>Which country bordering the Mediterranean borders a country that is bordered by a country whose population exceeds the population of India ?</cite><br />
Et de nous répondre :<cite> Turkey</cite> (eh oui à l'époque l'URSS était un grand pays...)<br />
<br />
(Petite parenthèse pour dire que je viens de découvrir que le fameux Wolfram Alpha qui était soit disant révolutionnaire, est quand même capable de répondre ce genre de question : <a href="http://www.wolframalpha.com/input/?i=What+are+the+capitals+of+the+countries+bordering+the+atlantic+sea+%3F">http://www.wolframalpha.com/input/?i=What+are+the+capitals+o(...)</a> )<br />
<br />
Comment est-ce possible ?<br />
La réponse est résumable en quelques mots, mais difficile à comprendre profondément.<br />
Chat80 analyse la structure grammaticale de la question, dans la plus pure perspective de la grammaire générative inventée par Noam Chomsky.<br />
Il en produit une arbre grammatical, qui va être analysé pour être transformé en requête logique, qui est exécutée. A l'époque vu les performances limités des machines, un "planner" similaires à ceux que l'on trouve dans les SGBD a été ajouté afin d'améliorer les temps de réponse.<br />
<br />
Prenons une phrase plus simple pour l'exemple :<br />
<cite> What are the capitals of the countries bordering the Baltic ?</cite> <br />
<br />
Etiquetons la grammaticalement :<br />
What/Whq are/Verb the/det capitals/noun of/prep the/det countries/noun bordering/Verb the/det Baltic/Noun ?<br />
<br />
Ce qui nous donne après analyse une <a href="http://img153.imageshack.us/img153/7130/gramf.png">structure grammaticale de la phrase</a>.<br />
<br />
<br />
C'est à partir de cette arbre que l'on construit la requêtes logique :<br />
Le <tt>what</tt> initial dans la phrase, qui est un pronom, initie ce qui sera la <i>variable</i><br />
Le verbe être indique que l'on cherche un existence, donc une liste<br />
Le COD (rappelez vous vos vieux cours de grammaire ... ;-) ) indique que l'on cherche les capitales<br />
<br />
La Prepositional Phrase (le COI si vous préférez*) est une phrase entière <tt> The countries bordering the Baltic</tt>.<br />
Là encore on a une structure SVO (Sujet Verbe Complément). Elle s'analyse simplement : border(X,baltic) **<br />
Or comme cette phrase se trouve dans une Prepositional Phrase, X est une variable liée<br />
<br />
Chat80, en mode trace, nous donne :<br />
<code><br />
answer([$VAR(0)]) :-<br />
$VAR(0) = setof ( [$VAR(1)]: $VAR(2) , country($VAR(1)) ) <br />
&<br />
borders($VAR(1), baltic) <br />
&<br />
$VAR(2) = setof ( $VAR(3) capital($VAR(1), $VAR(3)) )<br />
</code><br />
<br />
<br />
Le set of est une sorte de select/where<br />
<br />
<br />
On pourrait l'écrire :<br />
<code><br />
Select $country,$capital where<br />
country($country)<br />
and <br />
borders($country,Baltic)<br />
and<br />
capital($country,$capital)<br />
</code><br />
<br />
<br />
<br />
<a href="http://scholar.google.fr/scholar?q=nlidb&hl=fr&btnG=Rechercher&lr=">Quelques progrès on été réalisés depuis</a> (compréhension d'une conversation et de l'implicite), ainsi que quelques tentatives commerciales.<br />
Cette approche a plusieurs problème : l'anglais doit être grammaticalement correcte, et reconnue par le logiciel. Des ambigüités peuvent apparaître.<br />
Si l'on se connecte à un SGBD relationnel, il faut pouvoir faire la liaison entre l'anglais pur et propre et des champs du genre Client_no ou Client_adresse.<br />
Malgré cela, ce genre d'approche recèle une puissance inexploitée : imaginez le gain de temps que l'on peut faire sur des requêtes complexes, des algorithmes, etc... <br />
<br />
Un mot sur le libre.<br />
J'ai écrit à Pereira (impossible de trouver le mail de Warren) pour lui demander si 30 ans après cela ne le dérangeait pas de laisser son logiciel dans une licence libre (celle qu'il veut, c'est du détail).<br />
Toujours pas de réponse au bout de 10 jours.<br />
<br />
Il y a quelques ressources de ce genre dans le monde libre, mais ces approches sont surtout statistiques (ie. la machine apprend à reconnaitre des formes grammaticales), ce qui est très bien pour de l'analyse de texte, mais pas très adapté à des requêtes précises. Bref, rien de très exploitable en prolog dans le monde libre, à moins que je l'ai loupé...<br />
A part ça, pas mal de choses en python (nltk, etc...).<br />
Je vais me faire taper, mais même si je trouve python très bien, cela reste un langage impératif/objet classique. Je pense que c'est absolument pas adpté pour ce genre de problème.<br />
Pour se donner une idée de ce qui me fait avancer cela : une implémentation un peu similaire à chat80, "Pytalk" qui fait à peine plus et pas mal de choses en moins a été faite en python. <br />
Plus de 38 000 lignes de code. <br />
Un parser à n'en plus finir (12 074 lignes de codes !!).<br />
<br />
Chat80, c'est 5335 de prolog dont 1901 ligne pour les données brutes.<br />
<br />
Cela montre l'efficacité impressionnante de ce langage pour ce genre de problème (on est bien d'accord que pour plein d'autres choses, c'est pas adapté).<br />
Voilà, le troll est lancé, et si vous avez des liens..<br />
<br />
<br />
<br />
* Les canons de la grammaire générative ne font pas d'analyse de la <b>fonction</b> grammaticale à la française, où l'on cherche les Sujet, COD, COI, Complément circonstanciel, propositions relatives, subordonnées, etc...<br />
Ce que je trouve particulièrement dommage car cela simplifie énormément l'analyse en obtenant des arbre très profond.<br />
La grammaire générative est basé sur l'idée de pouvoir utiliser une machine à état fini pour le parsing (comme les parsers de langage de programmation) et (c'est lié) de grammaire hors contexte.<br />
je trouve ça un peu dommage, car ce genre d'analyse de fonction grammaticale apporte une très grande aide dans l'analyse de la logique de la phrase<br />
<br />
** Intro ultra rapide à prolog pour ceux qui ne connaissent pas : Prolog est une sorte de SGBD orienté logique et ultra puissant. On y stocke des fait : <br />
<code><br />
border(france,italy).<br />
border(france,belgium).<br />
</code><br />
Et on peut l'interroger :<br />
<code><br />
border(france,X).<br />
X = italy<br />
X = belgium<br />
</code><br />
On reconnait ici une forme verbe(sujet , complément)<div><a href="https://linuxfr.org/users/montaigne/journaux/chat80.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/56155/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/montaigne/journaux/chat80#comments">ouvrir dans le navigateur</a>
</p>
Ontologiahttps://linuxfr.org/nodes/56155/comments.atomtag:linuxfr.org,2005:Diary/294682010-03-09T22:19:00+01:002010-03-09T22:19:00+01:00Bientôt des journaux LinuxFr générées automatiquement ?
Un article intéressant sur le site du Monde aujourd'hui : <a href="http://www.lemonde.fr/web/imprimer_element/0,40-0@2-3236,50-1316608,0.html">http://www.lemonde.fr/web/imprimer_element/0,40-0@2-3236,50-(...)</a><br />
Merci d'aller le lire avant de continuer ce journal.<br />
<br />
<span>Le résumé bête façon machine</span>:<br />
Le titre est "L'ère des robots-journalistes" et l'article évoque les travaux du laboratoire d'Intelligence Artificielle de l'université du Northwestern près de Chicago.<br />
Tout d'abord le projet "Stats Monkey" : En gros c'est un robot qui parcours les sites web de base ball pour collecter les données et les statistiques sur un match et qui, à partir de ces stats, génère un résumé à propos du match qui ressemble comme une goutte d'eau à un article de la presse sportive. En fait, comme beaucoup de bots, il se contente "d'habiller" les données brutes avec une base de de vocabulaire restreinte.<br />
Un autre projet est "News at Seven" qui aspire des articles de news et qui présente ensuite des avatars qui lisent le texte par synthèse vocale comme s'ils présentaient un journal.<br />
Le projet "Tell Me More" se consacre lui à la fusion d'articles pour présenter une vue enrichie d'un sujet. On débute par recopier un article déjà existant sur un sujet donné et on y insère automatiquement des phrases, des infos ou des stats complémentaires qui viennent d'autres articles sur le même sujet. Le produit fini, qualifié de "méta-article" est censé être une meilleure version de l'article original.<br />
<br />
<span>Le résumé critique façon humain</span> :<br />
Si on réfléchit à ces projets est-ce qu'on est impressionné ? J'ai envie de de répondre non. Après tout la génération de phrases toutes faites à partir d'une base préétablie ça existe depuis longtemps (<a href="https://linuxfr.org/~patrick_g/26264.html">ELIZA</a> ?). Le fait de crawler les sites web pour aspirer les stats on ne peux pas dire que ce soit le top conceptuel non plus. L'assemblage des deux est donc assez trivial il me semble. Sans doute difficile à peaufiner mais loin d'être révolutionnaire conceptuellement parlant.<br />
<br />
Ensuite analysons la tournure de l'article du Monde qui joue un peu la carte du "On va tous mourir, ces machines vont nous remplacer". Qui sont vraiment les journalistes menacés par ces systèmes ? Est-ce que c'est le mec qui va bosser des mois pour mettre au jour une histoire de corruption ? Est-ce que c'est l'analyste stratégique pointu qui va décortiquer la politique extérieure d'un pays ? Est-ce que c'est la plume redoutable qui fait les délices des amoureux de la littérature ? <br />
Il y a peu de chances. Les gens menacés sont, au pire, les stagiaires de l'AFP qui pondent de l'article au kilomètre. Peut-être aussi les pigistes de "20 minutes" qui, sans vouloir vexer personne, ressemblent souvent à des bots cracheur de news.<br />
Bien entendu c'est une vue exigeante du journalisme. Tout le monde n'est pas Albert Londres c'est entendu...mais le progrès technique sera impitoyable envers la médiocrité !<br />
<br />
Et puis un point qui n'est pas du tout abordé par l'article du Monde: Les sports étasuniens sont infestés de statistiques diverses et variées. Les curieux habitants de cette contrée lointaine adorent compulser des almanachs de stats pour savoir qui a le plus de home runs en baseball, qui a gagné le plus de yards sur une saison en football américain, qui est le plus jeune MVP des playoffs en basket, etc etc<br />
C'est cet amour curieux des statistiques qui explique l'existence d'une multitude de sites constituant la matière première des bots journalistes mis au point au IA lab de Northwestern. En Europe je ne suis pas certain qu'un tel bot trouverait aussi facilement à manger. Ici on préfère faire des résumés de matchs avec des mots et je doute que des phrases comme "Bidule de l'équipe de Madrid a fait 54 passes hier. C'est 21% de moins que Machin de l'équipe de Manchester qui en contrepartie tire au but 2,14 fois plus souvent" passionnent les foules. C'est la subjectivité du journaliste qui fait vendre. C'est son expertise, son ton, sa voix....et pas l'annonce de stats au kilomètre.<br />
<br />
En résumé, et comme toujours, les tâches mécaniques absurdes sont faciles à automatiser. En revanche dès qu'il s'agit de faire appel à de la réflexion et du sens critique (comme l'écriture d'un journal LinuxFr autoréférentiel ?) c'est plus dur et les journalistes peuvent encore dormir tranquille.<div><a href="https://linuxfr.org/users/patrick_g/journaux/bient%C3%B4t-des-journaux-linuxfr-g%C3%A9n%C3%A9r%C3%A9es-automatiquement.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/55763/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/patrick_g/journaux/bient%C3%B4t-des-journaux-linuxfr-g%C3%A9n%C3%A9r%C3%A9es-automatiquement#comments">ouvrir dans le navigateur</a>
</p>
patrick_ghttps://linuxfr.org/nodes/55763/comments.atomtag:linuxfr.org,2005:News/254982009-05-22T00:38:42+02:002009-05-22T00:38:42+02:00Apertium intègre le premier traducteur automatique breton-français<div>L'Office de la Langue Bretonne a présenté le lundi 18 Mai 2009 le premier traducteur automatique breton-français, développé conjointement avec l'université espagnole d'Alicante, dans le cadre du système de traduction libre <a href="http://www.apertium.org/">Apertium</a> (sous licence GPL).
<br />
<br />
Apertium était initialement destiné à traduire entre des langues suffisamment voisines, mais a réussi aujourd'hui à créer des paires linguistiques plus éloignées. Il a bénéficié du soutien financier du gouvernement espagnol et du gouvernement autonome de Catalogne, ainsi que de la contribution de plusieurs entreprises et universités européennes.</div><ul><li>lien nᵒ 1 : <a title="http://www.apertium.org/" hreflang="fr" href="https://linuxfr.org/redirect/62356">Apertium : plate-forme libre/de code source ouvert pour traduction automatique</a></li><li>lien nᵒ 2 : <a title="http://www.ofis-bzh.org/" hreflang="fr" href="https://linuxfr.org/redirect/62357">Office de la langue bretonne</a></li><li>lien nᵒ 3 : <a title="http://www.ofis-bzh.org/fr/actualite/zoom/index.php?actualite_id=274" hreflang="fr" href="https://linuxfr.org/redirect/62358">Office de la langue bretonne - Dépêche</a></li><li>lien nᵒ 4 : <a title="http://xixona.dlsi.ua.es/~fran/breton/troer/index.php" hreflang="fr" href="https://linuxfr.org/redirect/62359">Interface web de la paire breton-français d'Apertium</a></li></ul><div>Grâce à une bourse de recherche octroyée par l'Université d'Alicante, l'Office de la langue Bretonne a pu déployer un jeune technicien <a href="http://fr.wiktionary.org/wiki/brittophone">brittophone</a>, Gwenvael Jequel, qui a pu collaborer avec Francis Tyers, développeur de l'équipe d'Apertium.
<br />
<br />
Dans sa première version, cet outil est capable de reconnaître et d'analyser 85% du vocabulaire de la langue bretonne et atteint un taux de correction de 55% par rapport à des traductions de référence. Son modèle de développement libre promet d'améliorer ses performances dans les prochaines versions, et d'intégrer le breton dans de nouvelles paires, plus particulièrement galloises, espagnoles et anglaises.
<br />
<br />
Un service de traduction web est disponible à l'adresse <a href="http://xixona.dlsi.ua.es/~fran/breton/troer/index.php">http://xixona.dlsi.ua.es/~fran/breton/troer/index.php</a>. L'Office de la Langue Bretonne envisage de le rendre disponible aux côtés de TermOfis et de KerOfis avant l'été 2009.</div><div><a href="https://linuxfr.org/news/apertium-integre-le-premier-traducteur-automatique-breton-franca.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/24544/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/apertium-integre-le-premier-traducteur-automatique-breton-franca#comments">ouvrir dans le navigateur</a>
</p>
youchahttps://linuxfr.org/nodes/24544/comments.atomtag:linuxfr.org,2005:News/238112008-03-07T19:55:28+01:002008-03-07T19:55:28+01:00Apertium français-espagnol 0.8.0 vient de sortir<div>Le monde du logiciel libre ne compte que très peu de solutions de <a href="http://fr.wikipedia.org/wiki/Traduction_automatique">traduction automatique</a> :<ul><li><a href="http://en.wikipedia.org/wiki/OpenLogos">OpenLogos</a>, projet peu actif ;
<br />
</li><li><a href="http://www.statmt.org/moses/">Moses</a>, qui réalise des traductions automatiques basées sur des statistiques ;
<br />
</li><li><a href="http://fr.wikipedia.org/wiki/Apertium">Apertium</a>, projet en GPL reposant sur une communauté active.</li></ul>
<br />
Apertium est une plateforme de traduction automatique libre et d'outils linguistiques conçue initialement pour des langues proches, comme par exemple la paire <a href="http://fr.wikipedia.org/wiki/catalan">catalan</a> - <a href="http://fr.wikipedia.org/wiki/espagnol">espagnol</a>. La version 0.8.0 de la paire français-espagnol est sortie le 21 février 2008. Cette paire a bénéficié du soutien de l'entreprise Eleka Ingeniaritza Linguistikoa et a été développée par Prompsit.</div><ul><li>lien nᵒ 1 : <a title="http://xixona.dlsi.ua.es/wiki/index.php/Image:Pantallazo-apertium-tolk.png" hreflang="en" href="https://linuxfr.org/redirect/56226">Capture d'écran</a></li><li>lien nᵒ 2 : <a title="http://xixona.dlsi.ua.es/apertium-www/?id=whatisapertium&lang=f" hreflang="en" href="https://linuxfr.org/redirect/56227">Page officielle d'Apertium</a></li><li>lien nᵒ 3 : <a title="http://xixona.dlsi.ua.es/wiki/index.php" hreflang="en" href="https://linuxfr.org/redirect/56228">Le wiki d'Apertium</a></li><li>lien nᵒ 4 : <a title="http://xixona.dlsi.ua.es/apertium/" hreflang="en" href="https://linuxfr.org/redirect/56229">Tester Apertium</a></li><li>lien nᵒ 5 : <a title="http://www.statmt.org/moses/" hreflang="en" href="https://linuxfr.org/redirect/56230">Moses</a></li><li>lien nᵒ 6 : <a title="http://logos-os.dfki.de/" hreflang="en" href="https://linuxfr.org/redirect/56231">OpenLogos</a></li></ul><div>Apertium est soutenu financièrement par le ministère espagnol de l'industrie,du tourisme et du commerce, du gouvernement de la communauté autonome de Catalagone, et l'université d'Alicante, le ministère des affaires étrangères de Roumanie et par Prompsit et Eleka, deux entreprises. Plusieurs universités contribuent activement au code et outils linguistiques :
<br />
l'université d'<a href="http://fr.wikipedia.org/wiki/Alicante">Alicante</a> (<a href="http://fr.wikipedia.org/wiki/Valence_(Espagne)">Valence</a>), de <a href="http://fr.wikipedia.org/wiki/Vigo_%28Espagne%29">Vigo</a> (<a href="http://fr.wikipedia.org/wiki/Galice">Galice</a>), de <a href="http://fr.wikipedia.org/wiki/Pompeu_Fabra">Pompeu Fabra</a> (<a href="http://fr.wikipedia.org/wiki/Barcelone">Barcelone</a> en <a href="http://fr.wikipedia.org/wiki/Catalogne">Catalogne</a>).
<br />
<br />
Apertium recherche des développeurs tant pour le moteur écrit en C++, que des non informaticiens pour les données linguistiques stockés dans de simples fichiers <a href="http://fr.wikipedia.org/wiki/Extensible_Markup_Language">XML</a>, ou des personnes pour réaliser des interfaces.
<br />
<br />
Vous pouvez télécharger une archive, la dernière version via <a href="http://fr.wikipedia.org/wiki/Subversion_%28logiciel%29"> svn</a>, ou tester via l'interface web.</div><div><a href="https://linuxfr.org/news/apertium-francais-espagnol-080-vient-de-sortir--2.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/22919/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/apertium-francais-espagnol-080-vient-de-sortir--2#comments">ouvrir dans le navigateur</a>
</p>
Youssef Oualmakranhttps://linuxfr.org/nodes/22919/comments.atomtag:linuxfr.org,2005:Diary/20732003-04-03T11:04:47+02:002003-04-03T11:04:47+02:00TALN, resultatsJe bosse sur un projet de TALN, allez voir quelques resultats...
<br />
<br />
http://f.rodrigo.free.fr/programs/taln/resultat.php
<br />
juste pour le fun...<div><a href="https://linuxfr.org/users/frodrigo/journaux/taln-resultats.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/28826/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/frodrigo/journaux/taln-resultats#comments">ouvrir dans le navigateur</a>
</p>
Frédéric Rodrigohttps://linuxfr.org/nodes/28826/comments.atom