Commit 44c17c42360e2e98b06235928db740cbdad99242

Authored by Killian
1 parent 127210d9ee
Exists in soap

Accents Ok

Showing 5 changed files with 68 additions and 66 deletions Side-by-side Diff

... ... @@ -16,13 +16,13 @@
16 16 def get_phon(string):
17 17 orkis=Orkis(string)
18 18 orkis.getDico()
19   - print(unicode(orkis))
  19 + #print(unicode(orkis))
20 20 return unicode(orkis)
21 21  
22 22 application = Application([getPhonService],
23 23 tns='lia.tools.phon',
24   - in_protocol=Soap11(),
25   - out_protocol=Soap11()
  24 + in_protocol=Soap11(encoding='UTF-8'),
  25 + out_protocol=Soap11(encoding='UTF-8')
26 26 )
27 27 wsgi_app = WsgiApplication(application)
28 28 if __name__ == '__main__':
processor/LiaTools.py
... ... @@ -11,22 +11,23 @@
11 11  
12 12 Change text to iso and clean it one word by line and separate sentences with <s> </s>"""
13 13 p=subprocess.Popen([os.environ["LIA_TAGG"]+'/script/lia_clean'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
14   - (cleanString, err) = p.communicate(input=dirtyString.encode('iso8859-1','backslashreplace'))
15   - return cleanString
  14 + (cleanString, err) = p.communicate(input=dirtyString.encode('iso8859-1'))
  15 + return cleanString.decode("iso8859-1").encode("utf8")
16 16  
17 17 def tagg(self,cleanString):
18 18 """POS Tagg and lemm a string which come from clean"""
19 19 p2=subprocess.Popen([os.environ["LIA_TAGG"]+'/script/lia_tagg+lemm','-guess'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
20   - (taggedString,err) =p2.communicate(input=cleanString)
21   - # This is used beceause lia_tagg deal with iso8859 only
22   - return taggedString.decode('iso8859').encode("utf8")
  20 + (taggedString,err) =p2.communicate(input=cleanString.decode("utf8").encode('iso8859-1'))
  21 + # This is used beceause lia_tagg deal with iso8859 only
  22 + return taggedString.decode('iso8859-1').encode("utf8")
23 23  
24 24 def lemm(self,cleanString):
25   - """ use the pos tagger to lemm word and return lemm only"""
26   - taggedString = self.tagg(cleanString)
27   - # sub the string to get only lemm ( cut markup and origin word ) Can be Delete with better use of lia_tagg
28   - sub = re.sub(r' </s>','',re.sub(r'<s> ',''," ".join([ x.rstrip().split().pop(2) for x in taggedString.rstrip().split("\n") if x])))
29   - return sub
  25 + """ use the pos tagger to lemm word and return lemm only"""
  26 + taggedString = self.tagg(cleanString)
  27 + # sub the string to get only lemm ( cut markup and origin word ) Can be Delete with better use of lia_tagg
  28 + sub = re.sub(r' </s>',u'', re.sub(r'<s> ','',u" ".join([ x.rstrip().split().pop(2) for x in taggedString.rstrip().split(u"\n") if x])))
  29 + return sub
  30 +
30 31 def isReady(self):
31 32 """ Check if the Tagger can be used ( depends on LIA_TAGG )"""
32 33 os.environ["LIA_TAGG"]
33 34  
... ... @@ -36,14 +37,14 @@
36 37 """ a class which call the lia phoner """
37 38 def clean(self,dirtyString):
38 39 p=subprocess.Popen([os.environ["LIA_PHON_REP"]+'/script/lia_nett'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
39   - (cleanString, err) = p.communicate(input=dirtyString.encode('iso8859-1','backslashreplace'))
40   - return cleanString
  40 + (cleanString, err) = p.communicate(input=dirtyString.decode("utf8").encode('iso8859-1'))
  41 + return cleanString.decode("iso8859-1").encode("utf8")
41 42 def phon(self,cleanString):
42 43 p2=subprocess.Popen([os.environ["LIA_PHON_REP"]+'/script/lia_lex2phon'],stdin=subprocess.PIPE,stdout=subprocess.PIPE)
43 44 (taggedString,err) =p2.communicate(input=cleanString)
44 45 # This is used beceause lia_phon deal with iso8859 only
45 46 # We reconverte the output to utf8 back
46   - return taggedString.decode('iso8859').encode("utf8")
  47 + return taggedString.decode('iso8859-1').encode("utf8")
47 48 def isReady(self):
48 49 os.environ["LIA_PHON_REP"]
49 50 return True
... ... @@ -10,14 +10,15 @@
10 10 self.tagger=Tagger()
11 11 self.dico ={}
12 12 self.string=dirtyString
  13 + print(dirtyString)
13 14 def isReady(self):
14 15 self.tagger.isReady()
15 16 def __unicode__(self):
16 17 string = u""
17 18 for word in self.dico:
18   - string += ( unicode(word.decode("utf-8")))+unicode (u";")
  19 + string += word+u";"
19 20 for lemWord in self.dico[word][0]:
20   - string += (unicode(lemWord.decode("utf-8"))+ unicode(u" "))
  21 + string += lemWord + u" "
21 22 string+=u"\n"
22 23 return string
23 24 def clean(self):
24 25  
... ... @@ -26,16 +27,16 @@
26 27 def insertLem(self):
27 28 self.lem=u""
28 29 self.cleanString=self.tagger.clean(self.string).rstrip()
29   - taggedString=self.tagger.tagg(self.cleanString).rstrip()
30   - self.tableLem = taggedString.rstrip().split("\n")
31   - for line in taggedString.rstrip().split("\n"):
32   - table = line.rstrip().split(" ")
33   - print("table2" + table[2])
  30 + taggedString=self.tagger.tagg(self.cleanString).rstrip().decode("utf8")
  31 + self.tableLem = taggedString.split(u"\n")
  32 + for line in taggedString.rstrip().split(u"\n"):
  33 + table = line.rstrip().split(u" ")
  34 + #print(u"table2" + table[2])
34 35 if not table[2].isspace():
35 36 if not table[0] in self.dico :
36 37 self.dico[table[0]]=[set(),set()]
37 38 self.dico[table[0]][0].add(table[2])
38   - self.lem = self.lem +"\n"+ table[2]
  39 + self.lem = self.lem +u"\n"+ table[2]
39 40 def getDico(self):
40 41 self.clean()
41 42 self.insertLem()
... ... @@ -48,5 +49,5 @@
48 49 list.append(indice)
49 50 ligne= " ".join(list)
50 51 self.table.append(ligne)
51   - return "\n".join(self.table)
  52 + return u"\n".join(self.table)
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-
  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 3 tion de Dirichlet latente (LDA), un modèle génératif probabiliste, pour détecter les concepts
4 4 implicites de la requête en utilisant les documents obtenus par un processus de retour de perti-
5 5 nence simulé (ou documents de
6 6  
7 7  
... ... @@ -9,15 +9,15 @@
9 9 feedback
10 10 sans aucun apprentissage préalable
11 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-
  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 14 nalistique, encyclopédique) à partir desquelles les documents de
15 15 feedback
16 16 sont extraits. Nous
17   -comparons différentes approches état-de-lart sur deux collections
  17 +comparons différentes approches état-de-l art sur deux collections
18 18 ad-hoc
19 19 de TREC, et les ré-
20   -sultats montrent que lutilisation de concepts implicites identifiés par notre méthode améliore
  20 +sultats montrent que l utilisation de concepts implicites identifiés par notre méthode améliore
21 21 significativement les performances de recherche documentaire.
22 22 ABSTRACT.
23 23 In this paper we introduce an unsupervised method for mining and modeling la-
24 24  
25 25  
26 26  
27 27  
28 28  
29 29  
30 30  
31 31  
32 32  
33 33  
... ... @@ -32,50 +32,50 @@
32 32 evaluate our approach over two large ad-hoc TREC collections, and results show that it signif-
33 33 icantly improves document retrieval effectiveness while best results are achieved by combining
34 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.
  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 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
  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 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-
  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 52 milaires représentant les thèmes de la recherche (Finkelstein
53 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
  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 56 ensembles de mots ou de multi-mots extraits de documents de
57   -feedback. Lensemble de feedback est composé de documents qui sont pertinents ou pseudo-pertinents par
  57 +feedback. L ensemble de feedback est composé de documents qui sont pertinents ou pseudo-pertinents par
58 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 dinformation par
  59 +tantes sur le contexte de la recherche. Les mots exprimant le plus d information par
60 60 rapport à la requête sont traités comme des concepts implicites. Ils sont alors utilisés
61 61 pour reformuler la requête. Le problème avec cette approche est que chaque mot re-
62 62 présente un concept spécifique. Seulement un concept représente une notion et peut
63 63 être vu comme un ensemble de connaissances. Stock (2010) donne une définition qui
64   -suit cette direction en affirmant quun concept est défini comme une classe contenant
  64 +suit cette direction en affirmant qu un concept est défini comme une classe contenant
65 65 des objets possédant certaines propriétés et attributs.
66   -Lobjectif du travail présenté dans cet article est de représenter avec précision les
  66 +L objectif du travail présenté dans cet article est de représenter avec précision les
67 67 concepts sous-jacents associés à une requête, améliorant indirectement les informa-
68 68 tions contextuelles liées à la recherche documentaire. Nous introduisons ainsi une
69 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
  70 +liés à une requête donnée et d améliorer les performances d un système de recherche
71 71 documentaire en incorporant ces concepts à la requête initiale. Pour chaque requête,
72   -les concepts implicites sont extraits dun ensemble réduit de documents de
  72 +les concepts implicites sont extraits d un ensemble réduit de documents de
73 73 initialement récupérés par le système. Ces documents de
74 74 ous estimons la similarité entre deux modèles conceptuels en calculant les simi-
75 75 larités entre toutes les paires de concepts des deux modèles. Seulement, deux modèles
76 76 différents sont générés à partir de documents différents, ils ne partagent donc pas le
77 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 quen prenant en compte les mots des
  78 +rables, le calcul de similarité ne peut se faire qu en prenant en compte les mots des
79 79 concepts. Les concepts sont donc ramenés à de simples sacs de mots, et nous utilisons
80 80 une mesure de similarité basée sur la fréquence inverse des mots dans les documents
81 81 de la collection.
82 82  
83 83  
84 84  
85 85  
86 86  
87 87  
88 88  
... ... @@ -85,32 +85,32 @@
85 85 ,et
86 86 ce pour les deux collections. On voit que le comportement est relativement identique
87 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 dun
  88 +majorité des requêtes. De même ces concepts sont généralement identifiés au sein d un
89 89 nombre assez réduit de documents, entre deux et quatre pour les deux collections.
90 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 quun
  91 +ou 3 articles Wikipédia suffisent pour un très grand nombre de requêtes, alors qu un
92 92 plus grand nombre est nécessaire pour la ressource Web. Ce comportement est très
93 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
  94 +d être très précis et de ne pas trop s éparpiller. Il est d ailleurs fréquent qu un article
95 95 devenu trop conséquent soit coupé en plusieurs autres articles traitant chacun un sujet
96 96 très spécifique.
97 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
  98 +s l analyse de textes. Les exemples
  99 +plus notables sont l approche entropique de (Shannon, 1948
100 100 ), les travaux de (Zipf, 1935; Zipf,
101 101 1949) et de (Mandelbrot, 1953) où les auteurs font des consid
102   -érations thermodynamiques déner-
  102 +érations thermodynamiques d éner-
103 103 gie et de température dans leurs études sur la Statistique Te
104 104 xtuelle. Dernièrement se sont servi des notions de polarisation des système
105 105 orientations sémantiques des mots (désirable ou indésirable) à partir de mots amorce. La sortie
106 106 de ce système est une liste de mots indiquant leurs orientati
107   -ons estimés selon lapproximation
  107 +ons estimés selon l approximation
108 108 du champ moyen. Dans notre travail, nous avons utilisé diffé
109 109 remment la notion de spin des mots dans les documents. À
110 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
  111 +ux composé d un ensemble de
  112 +unités en interaction dont l énergie peut être calculée. No
113 113 us avons étudié les problèmes du Trai-
114 114 tement Automatique de la Langue Naturelle (TALN) en utilisa
115   -nt la notion d’énergie textuelle.
  115 +nt la notion d énergie textuelle.
test/functional/testLiaSoap.py
... ... @@ -10,7 +10,7 @@
10 10 nb_times=4
11 11 # Exp 1
12 12 debut =time.time()
13   -contents = file.read().decode("utf8").encode("ascii", errors='ignore').rstrip()
  13 +contents = file.read().decode("utf8").rstrip()
14 14 res =client.service.get_phon(contents)
15 15 print(res)
16 16 duree= time.time()- debut