MIOLO20
Carregando...
Procurando...
Nenhuma entrada encontrada
misr.class
Ir para a documentação deste ficheiro.
1<?php
2class MISR
3{
4 var $conn; // connection identifier
7
8 function __construct($conn)
9 {
10 $this->conn = $conn;
11 $this->phonetic = new MPhonetic();
12 }
13
14 private function setStopWords()
15 {
16 $this->stopWords = array
17 (
18 'QUE',
19 'PARA',
20 'COM',
21 'NÃO',
22 'UMA',
23 'POR',
24 'MAIS',
25 'DOS',
26 'COMO',
27 'MAS',
28 'FOI',
29 'ELE',
30 'DAS',
31 'TEM',
32 'SEU',
33 'SUA',
34 'SER',
35 'QUANDO',
36 'MUITO',
37 'NOS',
38 'ESTÁ',
39 'TAMBÉM',
40 'PELO',
41 'PELA',
42 'ATÉ',
43 'ISSO',
44 'ELA',
45 'ENTRE',
46 'ERA',
47 'DEPOIS',
48 'SEM',
49 'MESMO',
50 'AOS',
51 'SEUS',
52 'QUEM',
53 'NAS',
54 'ESSE',
55 'ESTÃO',
56 'VOCÊ',
57 'ESSA',
58 'NUM',
59 'NEM',
60 'SUAS',
61 'MEU',
62 'MINHA',
63 'NUMA',
64 'PELOS',
65 'ELAS',
66 'HAVIA',
67 'SEJA',
68 'QUAL',
69 'NÓS',
70 'LHE',
71 'DELES',
72 'ESSAS',
73 'ESSES',
74 'PELAS',
75 'ESTE',
76 'DELE',
77 'VOCÊS',
78 'VOS',
79 'LHES',
80 'MEUS',
81 'MINHAS',
82 'TEU',
83 'TUA',
84 'TEUS',
85 'TUAS',
86 'NOSSO',
87 'NOSSA',
88 'NOSSOS',
89 'NOSSAS',
90 'DELA',
91 'DELAS',
92 'ESTA',
93 'ESTES',
94 'ESTAS',
95 'AQUELE',
96 'AQUELA',
97 'AQUELES',
98 'AQUELAS',
99 'ISTO',
100 'AQUILO',
101 'ESTOU',
102 'ESTÁ',
103 'ESTAMOS',
104 'ESTÃO',
105 'ESTIVE',
106 'ESTEVE',
107 'ESTIVEMOS',
108 'ESTIVERAM',
109 'ESTAVA',
110 'ESTÁVAMOS',
111 'ESTAVAM',
112 'ESTIVERA',
113 'ESTIVÉRAMOS',
114 'ESTEJA',
115 'ESTEJAMOS',
116 'ESTEJAM',
117 'ESTIVESSE',
118 'ESTIVÉSSEMOS',
119 'ESTIVESSEM',
120 'ESTIVER',
121 'ESTIVERMOS',
122 'ESTIVEREM',
123 'HEI',
124 'HAVEMOS',
125 'HÃO',
126 'HOUVE',
127 'HOUVEMOS',
128 'HOUVERAM',
129 'HOUVERA',
130 'HOUVÉRAMOS',
131 'HAJA',
132 'HAJAMOS',
133 'HAJAM',
134 'HOUVESSE',
135 'HOUVÉSSEMOS',
136 'HOUVESSEM',
137 'HOUVER',
138 'HOUVERMOS',
139 'HOUVEREM',
140 'HOUVEREI',
141 'HOUVERÁ',
142 'HOUVEREMOS',
143 'HOUVERÃO',
144 'HOUVERIA',
145 'HOUVERÍAMOS',
146 'HOUVERIAM',
147 'SOU',
148 'SOMOS',
149 'SÃO',
150 'ERA',
151 'ÉRAMOS',
152 'ERAM',
153 'FUI',
154 'FOI',
155 'FOMOS',
156 'FORAM',
157 'FORA',
158 'FÔRAMOS',
159 'SEJA',
160 'SEJAMOS',
161 'SEJAM',
162 'FOSSE',
163 'FÔSSEMOS',
164 'FOSSEM',
165 'FOR',
166 'FORMOS',
167 'FOREM',
168 'SEREI',
169 'SERÁ',
170 'SEREMOS',
171 'SERÃO',
172 'SERIA',
173 'SERÍAMOS',
174 'SERIAM',
175 'TENHO',
176 'TEM',
177 'TEMOS',
178 'TÉM',
179 'TINHA',
180 'TÍNHAMOS',
181 'TINHAM',
182 'TIVE',
183 'TEVE',
184 'TIVEMOS',
185 'TIVERAM',
186 'TIVERA',
187 'TIVÉRAMOS',
188 'TENHA',
189 'TENHAMOS',
190 'TENHAM',
191 'TIVESSE',
192 'TIVÉSSEMOS',
193 'TIVESSEM',
194 'TIVER',
195 'TIVERMOS',
196 'TIVEREM',
197 'TEREI',
198 'TERÁ',
199 'TEREMOS',
200 'TERÃO',
201 'TERIA',
202 'TERÍAMOS',
203 'TERIAM'
204 );
205 }
206
207 private function isValid($word)
208 {
209 $isValid = false;
210
211 if (strlen($word) > 2)
212 {
213 $isValid = (array_search($word, $this->stopWords) === false);
214 }
215
216 return $isValid;
217 }
218
219 private function getTokens($string, &$array)
220 {
221 $tok = strtok($string, " ");
222
223 while ($tok)
224 {
225 $tok = trim($tok);
226
227 if (strlen($tok) > 2)
228 $array[] = $tok;
229
230 $tok = strtok(" ");
231 }
232 }
233
234 function getIdField($tableName, $fieldName)
235 {
236 $sql = new sql('idField', 'ISR_FIELD', '(TableName = ?) and (FieldName = ?)');
237 $sql->SetParameters(strtoupper($tableName), strtoupper($fieldName));
238 $query = $this->conn->getQuery($sql);
239
240 if (!$query->eof)
241 {
242 $idField = $query->fields('idfield');
243 }
244 else
245 {
246 $db = $this->conn->db;
247 $idField = $db->GETNewId('seq_isr_field');
248 $sql = new sql('idField,TableName,FieldName', 'ISR_FIELD');
249 $sql->SetParameters($idField, strtoupper($tableName), strtoupper($fieldName));
250 $this->conn->Execute($sql->Insert());
251 }
252
253 return $idField;
254 }
255
256 function getIdWord($word)
257 {
258 $sql = new sql('idWord', 'ISR_WORD', "(word = '$word')");
259 $query = $this->conn->getQuery($sql);
260
261 if (!$query->eof)
262 {
263 $idWord = $query->fields('idWord');
264 }
265 else
266 {
267 $db = $this->conn->db;
268 $idWord = $db->GETNewId('seq_isr_word');
269 $sql = new sql('idWord,Word', 'ISR_WORD');
270 $sql->SetParameters($idWord, $word);
271 $this->conn->Execute($sql->Insert());
272 }
273
274 return $idWord;
275 }
276
277 function getIdWordFono($word)
278 {
279 $fonoWord = $this->fonetize($word);
280 $sql = new sql('idWord', 'ISR_WORDFONO', "(word = '$fonoWord')");
281 $query = $this->conn->getQuery($sql);
282
283 if (!$query->eof)
284 {
285 $idWord = $query->fields('idWord');
286 }
287 else
288 {
289 $db = $this->conn->db;
290 $idWord = $db->GETNewId('seq_isr_word');
291 $sql = new sql('idWord,Word', 'ISR_WORDFONO');
292 $sql->SetParameters($idWord, $fonoWord);
293 $this->conn->Execute($sql->Insert());
294 }
295
296 return $idWord;
297 }
298
299 function indexer($tableName, $fieldname, $pk, $phrase, $fono = true)
300 {
301 $this->setStopWords();
302 $idField = $this->getIdField($tableName, $fieldname);
303 $this->getTokens($phrase, $words);
304 $n = count($words);
305
306 for ($i = 0; $i < $n; $i++)
307 {
308 $word = strtoupper(trim($words[$i]));
309
310 if ($this->isValid($word))
311 {
312 $idWord = $this->getIdWord($word);
313 $sql = new sql('idField, idWord, PK', 'ISR_INDEX');
314 $sql->SetParameters($idField, $idWord, $pk);
315 $this->conn->Execute($sql->Insert());
316
317 if ($fono)
318 {
319 $idWord = $this->getIdWordFono($word);
320 $sql = new sql('idField, idWord, PK', 'ISR_INDEXFONO');
321 $sql->SetParameters($idField, $idWord, $pk);
322 $this->conn->Execute($sql->Insert());
323 }
324 }
325 }
326 }
327
328 function delete($tableName, $fieldname, $pk)
329 {
330 $idField = $this->getIdField($tableName, $fieldname);
331 $sql = new sql('', 'ISR_INDEX', '(idField = ?) and (pk = ?)');
332 $sql->SetParameters($idField, $pk);
333 $this->conn->Execute($sql->Delete());
334 }
335
336 function retrieve($tableName, $fieldName, $phrase, $key, $fields = '*', $fono = true)
337 {
338 $phrase = trim(strtoupper($phrase));
339 $phrase = $this->phonetic->removeMultiple($phrase);
340 $phrase = $this->phonetic->removeStrange($phrase);
341 $phrase = $this->phonetic->removeAccentuation($phrase);
342
343 $idField = $this->getIdField($tableName, $fieldName);
344 $phrase .= ' ';
345 $n = strlen($phrase);
346 $w = '';
347 $cmd = '';
348
349 for ($i = 0; $i < $n; $i++)
350 {
351 $c = $phrase{$i};
352 if ($c == chr(32))
353 {
354 if ($w != '')
355 {
356 if (strlen($w) < 3)
357 {
358 if (($w == 'OU') || ($w == 'E'))
359 $last = $w;
360 else
361 $w = '';
362 }
363 else
364 {
365 $word = str_replace('(', '', str_replace(')', '', $w));
366 if ($fono)
367 {
368 $wordfono = $this->fonetize($word);
369 $idWord = $this->getIdWordFono($wordfono);
370 $w = str_replace($word, "select PK from ISR_INDEXFONO where (IdWord = $idWord) and (IdField = $idField )", $w);
371 }
372 else
373 {
374 $idWord = $this->getIdWord($word);
375 $w = str_replace($word, "select PK from ISR_INDEX where (IdWord = $idWord) and (IdField = $idField )", $w);
376 }
377
378 $last = $w = (($last != 'E') && ($last != 'OU') && strlen($cmd)) ? "E ($w)" : "($w)";
379 }
380 $cmd .= " $w ";
381 $w = '';
382 }
383 }
384 else
385 $w .= $c;
386 }
387
388 $cmd = str_replace(' OU ', ' UNION ', $cmd);
389 $cmd = str_replace(' E ', ' INTERSECT ', $cmd);
390 $query = $this->conn->getQueryCommand($cmd);
391 $check = $query->chunkResult(0, 0);
392 $n = 0;
393 $s = '';
394 $cmd = '';
395 foreach ($check as $pk)
396 {
397 $s .= (($s != '') ? ',' : '') . "'$pk'";
398
399 if ($n++ == 100)
400 {
401 $cmd .= (($cmd != '') ? ' UNION ' : '') . "select $fields from $tableName where $key in ($s)";
402 $n = 0;
403 $s = '';
404 }
405 }
406 if ($n != 0)
407 {
408 $cmd .= (($cmd != '') ? ' UNION ' : '') . "select $fields from $tableName where $key in ($s)";
409 }
410 if ($cmd == '')
411 $cmd = "select $fields from $tableName where $key in ('')";
412 $q = $this->conn->getQueryCommand($cmd);
413 return $q;
414 }
415
416 function fonetize($word)
417 {
418 return $this->phonetic->fonetize($word);
419 }
420}
421?>
Definição misr.class:3
$stopWords
Definição misr.class:6
getIdField($tableName, $fieldName)
Definição misr.class:234
fonetize($word)
Definição misr.class:416
retrieve($tableName, $fieldName, $phrase, $key, $fields=' *', $fono=true)
Definição misr.class:336
$phonetic
Definição misr.class:5
getIdWordFono($word)
Definição misr.class:277
__construct($conn)
Definição misr.class:8
$conn
Definição misr.class:4
indexer($tableName, $fieldname, $pk, $phrase, $fono=true)
Definição misr.class:299
getIdWord($word)
Definição misr.class:256