Commit 9ffd72ac1638cf7af38dcf537a56549e9780d48d

Authored by Killian
1 parent dcdaad1b02
Exists in soap

ajout du test

Showing 4 changed files with 172 additions and 44 deletions Inline Diff

1 from spyne.application import Application 1 from spyne.application import Application
2 from spyne.decorator import srpc 2 from spyne.decorator import srpc
3 from spyne.service import ServiceBase 3 from spyne.service import ServiceBase
4 from spyne.model.primitive import Integer 4 from spyne.model.primitive import Integer
5 from spyne.model.primitive import Unicode 5 from spyne.model.primitive import Unicode
6 from spyne.model.complex import Iterable 6 from spyne.model.complex import Iterable
7 from spyne.protocol.soap import Soap11 7 from spyne.protocol.soap import Soap11
8 from spyne.server.wsgi import WsgiApplication 8 from spyne.server.wsgi import WsgiApplication
9 from processor.Orkis import Orkis 9 from processor.Orkis import Orkis
10 10
11 class HelloWorldService(ServiceBase): 11 class getPhonService(ServiceBase):
12 @srpc(Unicode, _returns=Unicode) 12 @srpc(Unicode, _returns=Unicode)
13 def say_hello(name): 13 def get_phon(string):
14 orkis=Orkis(name) 14 orkis=Orkis(string)
15 orkis.getDico() 15 orkis.getDico()
16 return str(orkis) 16 return str(orkis)
17 17
18 application = Application([HelloWorldService], 18 application = Application([getPhonService],
19 tns='spyne.examples.hello', 19 tns='lia.tools.phon',
20 in_protocol=Soap11(), 20 in_protocol=Soap11(),
21 out_protocol=Soap11() 21 out_protocol=Soap11()
22 ) 22 )
23 23 wsgi_app = WsgiApplication(application)
24 if __name__ == '__main__': 24 if __name__ == '__main__':
25 # You can use any Wsgi server. Here, we chose 25 # You can use any Wsgi server. Here, we chose
26 # Python's built-in wsgi server but you're not 26 # Python's built-in wsgi server but you're not
27 # supposed to use it in production. 27 # supposed to use it in production.
28 from wsgiref.simple_server import make_server 28 from wsgiref.simple_server import make_server
29 29
30 wsgi_app = WsgiApplication(application)
31 server = make_server('0.0.0.0', 8000, wsgi_app) 30 server = make_server('0.0.0.0', 8000, wsgi_app)
32 server.serve_forever() 31 server.serve_forever()
33 32
test/functional/data.txt
File was created 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.
116
test/functional/testLiaSoap.py
File was created 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
52
webtagger.py
1 # -*- coding: utf-8 -*- File was deleted
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')
38 1 # -*- coding: utf-8 -*-