Commit 9ffd72ac1638cf7af38dcf537a56549e9780d48d

Authored by Killian
1 parent dcdaad1b02
Exists in soap

ajout du test

Showing 4 changed files with 172 additions and 44 deletions Side-by-side Diff

... ... @@ -8,26 +8,25 @@
8 8 from spyne.server.wsgi import WsgiApplication
9 9 from processor.Orkis import Orkis
10 10  
11   -class HelloWorldService(ServiceBase):
  11 +class getPhonService(ServiceBase):
12 12 @srpc(Unicode, _returns=Unicode)
13   - def say_hello(name):
14   - orkis=Orkis(name)
  13 + def get_phon(string):
  14 + orkis=Orkis(string)
15 15 orkis.getDico()
16 16 return str(orkis)
17 17  
18   -application = Application([HelloWorldService],
19   - tns='spyne.examples.hello',
  18 +application = Application([getPhonService],
  19 + tns='lia.tools.phon',
20 20 in_protocol=Soap11(),
21 21 out_protocol=Soap11()
22 22 )
23   -
  23 +wsgi_app = WsgiApplication(application)
24 24 if __name__ == '__main__':
25 25 # You can use any Wsgi server. Here, we chose
26 26 # Python's built-in wsgi server but you're not
27 27 # supposed to use it in production.
28 28 from wsgiref.simple_server import make_server
29 29  
30   - wsgi_app = WsgiApplication(application)
31 30 server = make_server('0.0.0.0', 8000, wsgi_app)
32 31 server.serve_forever()
test/functional/data.txt
  1 +Nous proposons dans cet article une méthode non supervisée pour l’identification et
  2 +la modélisation de concepts associés à une recherche d’information. Nous utilisons l’alloca-
  3 +tion de Dirichlet latente (LDA), un modèle génératif probabiliste, pour détecter les concepts
  4 +implicites de la requête en utilisant les documents obtenus par un processus de retour de perti-
  5 +nence simulé (ou documents de
  6 +feedback
  7 +). Notre approche estime automatiquement le nombre
  8 +de concepts ainsi que le nombre de documents de
  9 +feedback
  10 +sans aucun apprentissage préalable
  11 +ni paramétrage. Les concepts implicites sont pondérés afin de refléter leur importance relative
  12 +par rapport à la requête et sont utilisés pour modifier l’ordre des documents renvoyés à l’utili-
  13 +sateur. Nous utilisons quatre sources d’information générales de natures différentes (web, jour-
  14 +nalistique, encyclopédique) à partir desquelles les documents de
  15 +feedback
  16 +sont extraits. Nous
  17 +comparons différentes approches état-de-l’art sur deux collections
  18 +ad-hoc
  19 +de TREC, et les ré-
  20 +sultats montrent que l’utilisation de concepts implicites identifiés par notre méthode améliore
  21 +significativement les performances de recherche documentaire.
  22 +ABSTRACT.
  23 +In this paper we introduce an unsupervised method for mining and modeling la-
  24 +tent search concepts. We use Latent Dirichlet Allocation (LDA), a generative probabilistic
  25 +topic model, to exhibit highly-specific query-related topics from pseudo-relevant feedback doc-
  26 +uments. Our approach automatically estimates the number of latent concepts as well as the
  27 +needed amount of feedback documents, without any prior training step. Latent concepts are
  28 +then weighted to reflect their relative adequacy and are further used to automatically reformu-
  29 +late the initial user query. We also explore the use of different types of sources of information for
  30 +modeling the latent concepts. For this purpose, we use four general sources of information of
  31 +various nature (web, news, encyclopedic) from which the feedback documents are extracted. We
  32 +evaluate our approach over two large ad-hoc TREC collections, and results show that it signif-
  33 +icantly improves document retrieval effectiveness while best results are achieved by combining
  34 +latent concepts modeled from all available sources.
  35 +Le but de la Recherche d’Information (RI) est de satisfaire le besoin d’information
  36 +d’un utilisateur, généralement en proposant des documents ou des passages provenant
  37 +d’une collection cible. Ce besoin est habituellement représenté par une requête com-
  38 +posée de quelques mots-clés, qui est soumise au système de recherche d’information.
  39 +Le système cherche alors les documents qui contiennent les mots-clés, afin de fournir
  40 +à l’utilisateur une liste de documents ordonnée en fonction de leur pertinence esti-
  41 +mée par rapport à la requête. Seulement, un besoin d’information complet peut être
  42 +trop complexe pour être exprimé en quelques mots, ou l’utilisateur peut ne pas avoir
  43 +le vocabulaire ou les compétences nécessaires pour formuler efficacement la requête.
  44 +Ingwersen (1994) dit en effet que la formulation d’une requête par un utilisateur est la
  45 +représentation de son état cognitif actuel concernant un besoin d’information. Une re-
  46 +quête peut ne pas être correctement formulée si l’utilisateur cherche des informations
  47 +sur une thématique pour laquelle il n’a pas de connaissances. Ainsi, sans contexte ad-
  48 +ditionnel, le système de recherche d’information peut manquer des nuances ou des
  49 +détails que l’utilisateur n’a pas fourni dans la requête. Ce contexte peut prendre la
  50 +forme d’un modèle des intérêts de l’utilisateur basé sur son historique personnel (ou
  51 +ses interactions sociales), ou peut être composé d’éléments extraits de documents si-
  52 +milaires représentant les thèmes de la recherche (Finkelstein
  53 +Ce deuxième type de contexte est plus généralement connu sous le nom de « re-
  54 +cherche d’information conceptuelle » et a reçu beaucoup d’attention au cours de ces
  55 +dernières années L’idée générale est d’étendre les requêtes avec des
  56 +ensembles de mots ou de multi-mots extraits de documents de
  57 +feedback. L’ensemble de feedback est composé de documents qui sont pertinents ou pseudo-pertinents par
  58 +rapport à la requête initiale, et qui sont à même de contenir des informations impor-
  59 +tantes sur le contexte de la recherche. Les mots exprimant le plus d’information par
  60 +rapport à la requête sont traités comme des concepts implicites. Ils sont alors utilisés
  61 +pour reformuler la requête. Le problème avec cette approche est que chaque mot re-
  62 +présente un concept spécifique. Seulement un concept représente une notion et peut
  63 +être vu comme un ensemble de connaissances. Stock (2010) donne une définition qui
  64 +suit cette direction en affirmant qu’un concept est défini comme une classe contenant
  65 +des objets possédant certaines propriétés et attributs.
  66 +L’objectif du travail présenté dans cet article est de représenter avec précision les
  67 +concepts sous-jacents associés à une requête, améliorant indirectement les informa-
  68 +tions contextuelles liées à la recherche documentaire. Nous introduisons ainsi une
  69 +méthode entièrement non supervisée qui permet de détecter les concepts implicites
  70 +liés à une requête donnée et d’améliorer les performances d’un système de recherche
  71 +documentaire en incorporant ces concepts à la requête initiale. Pour chaque requête,
  72 +les concepts implicites sont extraits d’un ensemble réduit de documents de
  73 +initialement récupérés par le système. Ces documents de
  74 +ous estimons la similarité entre deux modèles conceptuels en calculant les simi-
  75 +larités entre toutes les paires de concepts des deux modèles. Seulement, deux modèles
  76 +différents sont générés à partir de documents différents, ils ne partagent donc pas le
  77 +même espace probabiliste. Les distributions de probabilités ne sont donc pas compa-
  78 +rables, le calcul de similarité ne peut se faire qu’en prenant en compte les mots des
  79 +concepts. Les concepts sont donc ramenés à de simples sacs de mots, et nous utilisons
  80 +une mesure de similarité basée sur la fréquence inverse des mots dans les documents
  81 +de la collection.
  82 +La figure 1 présente des histogrammes traçant le nombre de requêtes en fonction
  83 +du nombre de concepts implicites estimé et du nombre de documents de
  84 +feedback
  85 +,et
  86 +ce pour les deux collections. On voit que le comportement est relativement identique
  87 +sur les deux collections. Entre deux et trois concepts sont identifiés pour la grande
  88 +majorité des requêtes. De même ces concepts sont généralement identifiés au sein d’un
  89 +nombre assez réduit de documents, entre deux et quatre pour les deux collections.
  90 +Il est toutefois intéressant de noter la différence entre le nombre de documents de utilisés par les ressources Web et Wikipédia. On peut voir en effet que 2
  91 +ou 3 articles Wikipédia suffisent pour un très grand nombre de requêtes, alors qu’un
  92 +plus grand nombre est nécessaire pour la ressource Web. Ce comportement est très
  93 +cohérent avec la nature même de Wikipédia, où les articles sont rédigés dans le but
  94 +d’être très précis et de ne pas trop s’éparpiller. Il est d’ailleurs fréquent qu’un article
  95 +devenu trop conséquent soit coupé en plusieurs autres articles traitant chacun un sujet
  96 +très spécifique.
  97 +Des idées empruntées à la physique ont déjà été utilisées dan
  98 +s l’analyse de textes. Les exemples
  99 +plus notables sont l’approche entropique de (Shannon, 1948
  100 +), les travaux de (Zipf, 1935; Zipf,
  101 +1949) et de (Mandelbrot, 1953) où les auteurs font des consid
  102 +érations thermodynamiques d’éner-
  103 +gie et de température dans leurs études sur la Statistique Te
  104 +xtuelle. Dernièrement se sont servi des notions de polarisation des système
  105 +orientations sémantiques des mots (désirable ou indésirable) à partir de mots amorce. La sortie
  106 +de ce système est une liste de mots indiquant leurs orientati
  107 +ons estimés selon l’approximation
  108 +du champ moyen. Dans notre travail, nous avons utilisé diffé
  109 +remment la notion de spin des mots dans les documents. À
  110 +partir de cet image, on aperçoit le document comme un matéria
  111 +ux composé d’un ensemble de
  112 +unités en interaction dont l’énergie peut être calculée. No
  113 +us avons étudié les problèmes du Trai-
  114 +tement Automatique de la Langue Naturelle (TALN) en utilisa
  115 +nt la notion d’énergie textuelle.
test/functional/testLiaSoap.py
  1 +from suds.client import Client
  2 +import time
  3 +import threading
  4 +
  5 + ### TODO : Tester en parallele x4 un million de fois pour voir ###
  6 +url = 'http://lrc2-kija.univ-avignon.fr:8000/?wsdl'
  7 +client = Client(url)
  8 +filename = "data.txt"
  9 +file = open(filename, "r")
  10 +nb_times=4
  11 +# Exp 1
  12 +debut =time.time()
  13 +contents = file.read().decode("utf8").encode("ascii", errors='ignore').rstrip()
  14 +client.service.get_phon(contents)
  15 +duree= time.time()- debut
  16 +print (" Exper 1 : " + str(duree))
  17 +# Exp 2
  18 +debut =time.time()
  19 +file.seek(0)
  20 +lines = file.readlines()
  21 +for line in lines:
  22 + line = line.decode("utf8").encode("ascii", errors='ignore').rstrip()
  23 + if line is not None:
  24 + try:
  25 + client.service.get_phon(line)
  26 + except:
  27 + continue
  28 +duree= time.time()- debut
  29 +print (" Exper 2 line by line 1 corpus : " + str(duree))
  30 +##Exp 3
  31 +debut = time.time()
  32 +file.seek(0)
  33 +contents = file.read().decode("utf8").encode("ascii", errors='ignore').rstrip()
  34 +tabs=[]
  35 +i=0
  36 +while i <= nb_times :
  37 + tabs.append(contents)
  38 + i+=1
  39 +client.service.get_phon("".join(tabs))
  40 +duree= time.time()- debut
  41 +print ("Exper 3 2pow4 time the content in once shot " + str(duree))
  42 +# EXP 4
  43 +#debut = time.time()
  44 +#contents = file.read().decode("utf8").encode("ascii", errors='ignore').rstrip()
  45 +#def envoie(datas):
  46 +# client.service.get_phon(datas)
  47 +#i =0
  48 +#threadTab= []
  49 +#while i <= nb_times:
  50 +# threadTab.append(threading.Thread(None, envoie, None,contents,None))
  51 +#duree = time.time() - debut
webtagger.py
1   -# -*- coding: utf-8 -*-
2   -import subprocess
3   -import os
4   -import json
5   -from lxml import etree
6   -from flask import Flask, request, render_template
7   -from processor.LiaTools import *
8   -from processor.Orkis import Orkis
9   -from flaskext.enterprise import Enterprise
10   -from time import ctime
11   -app = Flask(__name__)
12   -enterprise = Enterprise(app)
13   -
14   -@app.route("/")
15   -def docs():
16   - return render_template('index.html')
17   -
18   -@app.route("/tagger",methods=['POST'])
19   -def cleaner():
20   - # Receive String from post parametre Raw text
21   - dirtyString= request.values[u'string']
22   - # Charging Processor et check if they are okay ( aim is to dynamic charge later )
23   - orkisProc = Orkis(dirtyString)
24   - # Processing
25   - # Adding lemm of each words cause we went ther phonem too
26   - taggedTable= orkisProc.getDico()
27   - # Returning a row text to be parse client side
28   - return unicode(taggedTable)
29   -
30   -class OrkisService(enterprise.SOAPService):
31   - @enterprise.soap(returns=enterprise._sp.String)
32   - def get_phon(self):
33   - return ctime()
34   -
35   -if __name__ == '__main__':
36   - app.debug = True
37   - app.run(host='0.0.0.0')