Commit 9ffd72ac1638cf7af38dcf537a56549e9780d48d
1 parent
dcdaad1b02
Exists in
soap
ajout du test
Showing 4 changed files with 172 additions and 44 deletions Side-by-side Diff
liaSoap.py
... | ... | @@ -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') |