{"id":347,"date":"2016-09-30T17:58:23","date_gmt":"2016-09-30T15:58:23","guid":{"rendered":"http:\/\/members.loria.fr\/EColin\/?p=347"},"modified":"2016-09-30T18:18:55","modified_gmt":"2016-09-30T16:18:55","slug":"calcul-de-similarite-entre-des-roles","status":"publish","type":"post","link":"https:\/\/members.loria.fr\/EColin\/calcul-de-similarite-entre-des-roles\/","title":{"rendered":"Calcul de similarit\u00e9 entre des r\u00f4les"},"content":{"rendered":"<p><a href=\"http:\/\/wit.istc.cnr.it\/stlab-tools\/fred\/demo?text=Fred+eats.&amp;prefix=fred%3A&amp;namespace=http%3A%2F%2Fwww.ontologydesignpatterns.org%2Font%2Ffred%2Fdomain.owl%23&amp;textannotation=earmark&amp;format=image%2Fpng\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-353 size-thumbnail\" src=\"http:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-150x150.png\" alt=\"fred_mange\" width=\"150\" height=\"150\" srcset=\"https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-150x150.png 150w, https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-60x60.png 60w, https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1.png 266w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>Voici une petite portion de script.<\/p>\n<p>Imaginons que vous ayiez un r\u00f4le (\u00ab\u00a0Acteur\u00a0\u00bb, pour l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0mange\u00a0\u00bb).<\/p>\n<p>Vous trouvez une description (si, si) de cet \u00e9v\u00e8nement dans une autre ressource et voudriez savoir si ce r\u00f4le \u00ab\u00a0Acteur\u00a0\u00bb est appariable avec, par exemple, \u00ab\u00a0Agent\u00a0\u00bb. <!--more--><br \/>\nVous \u00eates en anglais, ce r\u00f4le et plus ou moins bien d\u00e9crit d&rsquo;un c\u00f4t\u00e9 ou de l&rsquo;autre&#8230; S&rsquo;il est <em>coancr\u00e9<\/em> d&rsquo;un c\u00f4t\u00e9 (pr\u00e9c\u00e9d\u00e9 syst\u00e9matiquement de telle pr\u00e9position pour un verbe par exemple intransitif) et ne l&rsquo;est pas de l&rsquo;autre, cela ne doit pas \u00eatre r\u00e9dhibitoire. Il peut aussi \u00eatre introduit aupr\u00e8s du verbe par une pr\u00e9position modifiant le sens du verbe : un <em>modifier<\/em>. <em>Aller <strong>dans<\/strong> la ruelle<\/em> diff\u00e8re d&rsquo;<em>aller <strong>hors de<\/strong> la ruelle<\/em>&#8230; on ne va pas dans le m\u00eame sens.<\/p>\n<p>Alors&#8230;<\/p>\n<ul>\n<li>Nous sommes en python.\n<ul>\n<li>Une classe \u00ab\u00a0Role\u00a0\u00bb, avec une <em>coancre<\/em> (on peut pousser \u00e0 v\u00e9rifier la <em>coancre<\/em>, ici c&rsquo;est hors de l&rsquo;exemple pour des raisons de l\u00e9g\u00e8ret\u00e9 c\u00f4t\u00e9 fiabilit\u00e9 de l&rsquo;information d\u00e9tenue) et\/ou un <em>modifier<\/em>. Si le r\u00f4le est introduit, par un modifier (<em>on_modified_event = True<\/em>) ou une coancre (<em>coancred=True<\/em>), nous avons un bool\u00e9en (<em>introduced<\/em> qui est \u00e9gal \u00e0 (<em>on_modified_event or coancred)<\/em>)<\/li>\n<li>Un objet de classe, \u00ab\u00a0proximit\u00e9s\u00a0\u00bb, pour stocker les proximit\u00e9s \u00e9valu\u00e9es : si les mots sont un peu vari\u00e9s, l&rsquo;usage de wordnet est gourmand. Un stockage dans du json des calculs pourra m\u00eame \u00eatre envisag\u00e9 sans complexe. Dans le init, si proximit\u00e9s est vide et json, chargement&#8230;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre>import itertools\r\nfrom nltk.corpus import wordnet\r\n\r\nclass Role:\r\n proximit\u00e9s={}<\/pre>\n<pre> def proximity_abs(self, other):\r\n    \"\"\" \r\n    renvoie un nombre compris entre 0 et 1\r\n    \"\"\"\r\n    proxi=0.\r\n    if self.nom==other.nom :\r\n        proxi=.7\r\n    else:\r\n        if other.nom+self.nom in Event.Relation.Role.proximit\u00e9s.keys():\r\n            proxi+=Event.Relation.Role.proximit\u00e9s[other.nom+self.nom]\r\n        else:\r\n            #jamais de max sur liste vide, et le mot a au moins le m\u00e9rite d'exister...\r\n            list=[.01]\r\n            syns1 = wordnet.synsets(self.nom)\r\n            syns2 = wordnet.synsets(other.nom)\r\n            for sense1, sense2 in itertools.product(syns1, syns2):\r\n                list.append( wordnet.wup_similarity(sense1, sense2))\r\n            Event.Relation.Role.proximit\u00e9s[other.nom + self.nom] = max(list)\r\n            Event.Relation.Role.proximit\u00e9s[self.nom + other.nom] = Event.Relation.Role.proximit\u00e9s[other.nom + self.nom]\r\n        #on calcule la proximit\u00e9 en retranchant 0.01 : des mots diff\u00e9rents ne vont pas obtenir autant que des mots \u00e9quivalents. \r\n        proxi+= ((Event.Relation.Role.proximit\u00e9s[other.nom + self.nom])*0.7)-.01\r\n    #la suite se discute, disons que l'id\u00e9e est de vouloir s\u00e9lectionner quelque chose qui a du sens, on ne se servira pas de cette classe pour faire du r\u00f4le \u00e0 r\u00f4le, mais de l'appariement pour des \u00e9v\u00e8nements proches).\r\n    if self.coanchored == other.coanchored:\r\n        proxi+=.1\r\n    if self.on_modified_event == other.modified_event:\r\n        proxi+=1\r\n    if other.introduced()== self.introduced():\r\n        proxi+=.1\r\n    return proxi<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p><a href=\"http:\/\/wit.istc.cnr.it\/stlab-tools\/fred\/demo?text=Fred+eats.&amp;prefix=fred%3A&amp;namespace=http%3A%2F%2Fwww.ontologydesignpatterns.org%2Font%2Ffred%2Fdomain.owl%23&amp;textannotation=earmark&amp;format=image%2Fpng\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-353 size-thumbnail\" src=\"http:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-150x150.png\" alt=\"fred_mange\" width=\"150\" height=\"150\" srcset=\"https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-150x150.png 150w, https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1-60x60.png 60w, https:\/\/members.loria.fr\/EColin\/wp-content\/blogs.dir\/132\/files\/sites\/132\/2016\/09\/fred_mange-1.png 266w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/a>Voici une petite portion de script.<\/p>\n<p>Imaginons que vous ayiez un r\u00f4le (\u00ab\u00a0Acteur\u00a0\u00bb, pour l&rsquo;\u00e9v\u00e8nement \u00ab\u00a0mange\u00a0\u00bb).<\/p>\n<p>Vous trouvez une description (si, si) de cet \u00e9v\u00e8nement dans une autre ressource et voudriez savoir si ce r\u00f4le \u00ab\u00a0Acteur\u00a0\u00bb est appariable avec, par exemple, \u00ab\u00a0Agent\u00a0\u00bb. <\/p>\n","protected":false},"author":115,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,6],"tags":[17,15,11,16],"class_list":["post-347","post","type-post","status-publish","format-standard","hentry","category-petits-outils-du-quotidien","category-professionnel","tag-itertools","tag-nltk","tag-python","tag-wordnet"],"_links":{"self":[{"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/posts\/347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/users\/115"}],"replies":[{"embeddable":true,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/comments?post=347"}],"version-history":[{"count":14,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/posts\/347\/revisions"}],"predecessor-version":[{"id":367,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/posts\/347\/revisions\/367"}],"wp:attachment":[{"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/categories?post=347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/members.loria.fr\/EColin\/wp-json\/wp\/v2\/tags?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}