MIOLO20
Carregando...
Procurando...
Nenhuma entrada encontrada
mphonetic.class
Ir para a documentação deste ficheiro.
1<?php
3{
4 public function removeAccentuation($word)
5 {
6 $acento['Á'] = $acento['Ã'] = $acento['Â'] = $acento['À'] = 'A';
7 $acento['É'] = $acento['È'] = $acento['Ê'] = 'E';
8 $acento['Ó'] = $acento['Ò'] = $acento['Õ'] = $acento['Ô'] = 'O';
9 $acento['Í'] = $acento['Ì'] = $acento['Î'] = 'I';
10 $acento['Ú'] = $acento['Ù'] = $acento['Û'] = 'U';
11 $acento['Ñ'] = 'N';
12 $acento['Ç'] = 'SS';
13 $len = strlen($word);
14 $result = '';
15
16 for ($i = 0; $i < $len; $i++)
17 { // percorre toda a string
18 $letra = $word[$i];
19
20 if (($l = $acento[$letra]) != NULL)
21 $result .= $l;
22 else
23 $result .= $letra;
24 }
25
26 return $result;
27 }
28
29 public function removeMultiple($word)
30 {
31 $len = strlen($word);
32 $result = $word[0];
33
34 for ($i = 1; $i < $len; $i++)
35 { // percorre toda a string
36 $letra = $word[$i];
37
38 if ($letra != $word[$i - 1])
39 $result .= $letra;
40 }
41
42 return $result;
43 }
44
45 public function removeStrange($word)
46 {
47 $len = strlen($word);
48 $result = '';
49
50 for ($i = 0; $i < $len; $i++)
51 { // percorre toda a string
52 $letra = $word[$i];
53
54 if (($letra != "'") && ($letra != "\"") && ($letra != "-") && ($letra != ".") && ($letra != ",")
55 && ($letra != "/") && ($letra != "ª") && ($letra != "º"))
56 $result .= $letra;
57 }
58
59 return $result;
60 }
61
62 public function fonetize($word)
63 {
64 $fono['_'] = 'Y';
65 $fono['E'] = 'i';
66 $fono['&'] = 'i';
67 $fono['I'] = 'i';
68 $fono['Y'] = 'i';
69 $fono['O'] = 'o';
70 $fono['U'] = 'o';
71 $fono['A'] = 'a';
72 $fono['A'] = 'a';
73 $fono['S'] = 's';
74
75 $word = trim(strtoupper($word)); // padroniza todas as letras em maiusculo
76 $word = $this->removeStrange($word);
77 $word = $this->removeAccentuation($word);
78 $len = strlen($word);
79 $fonaux = '';
80
81 for ($i = 0; $i < $len; $i++)
82 { // percorre toda a string
83 $letra = $word[$i];
84
85 if (($l = $fono[$letra]) != NULL)
86 $fonaux .= $l;
87 else
88 $fonaux .= $letra;
89 }
90
91 if ($len == 3)
92 {
93 if (($fonaux{0}== 'a') || ($fonaux{0}== 'i') || ($fonaux{0}== 'o'))
94 {
95 if (($fonaux{1}== 'a') || ($fonaux{1}== 'i') || ($fonaux{1}== 'o'))
96 {
97 if (($fonaux{2}== 'a') || ($fonaux{2}== 'i') || ($fonaux{2}== 'o'))
98 return $fonaux;
99 }
100 }
101 }
102
103 $j = 0;
104 $fonaux .= ' ';
105
106 for ($i = 0; $i < $len; $i++)
107 { // percorre toda a string
108 $letra = $fonaux[$i];
109 $copfon = 0;
110 $copmud = 0;
111 $newmud = 0;
112
113 switch ($letra)
114 {
115 case 'a':
116 if (($fonaux[$i + 1] == 's') || ($fonaux[$i + 1] == 'Z') || ($fonaux[$i + 1] == 'M')
117 || ($fonaux[$i + 1] == 'N'))
118 if ($fonaux[$i + 2] != ' ')
119 $copfon = 1;
120 else
121 {
122 $fonwrk[$j] = 'a';
123 $fonwrk[$j + 1] = ' ';
124 $j++;
125 $i++;
126 }
127 else
128 $copfon = 1;
129
130 break;
131
132 case 'B':
133 $copmud = 1;
134
135 break;
136
137 case 'C':
138 $x = 0;
139
140 if ($fonaux[$i + 1] == 'i')
141 {
142 $fonwrk[$j] = 's';
143 $j++;
144 break;
145 }
146
147 if (($fonaux[$i + 1] == 'o') && ($fonaux[$i + 2] == 'i') && ($fonaux[$i + 3] == 's')
148 && ($fonaux[$i + 4] == ' '))
149 {
150 $fonwrk[$j] = 'K';
151 $fonwrk[$j + 1] = 'a';
152 $fonwrk[$j + 2] = 'o';
153 $i += 4;
154 break;
155 }
156
157 if ($fonaux[$i + 1] == 'T')
158 break;
159
160 if ($fonaux[$i + 1] != 'H')
161 {
162 $fonwrk[$j] = 'K';
163 $newmud = 1;
164
165 if ($fonaux[$i + 1] != 'K')
166 {
167 $i++;
168 break;
169 }
170 else
171 break;
172 }
173
174 if ($fonaux[$i + 1] == 'H')
175 {
176 if ($fonaux[$i + 2] == 'i')
177 if (($fonaux[$i + 3] == 'a') || ($fonaux[$i + 3] == 'i') || ($fonaux[$i + 3] == 'o'))
178 $x = 1;
179 else
180 ;
181 else
182 ;
183 }
184 else
185 {
186 if ($fonaux[$i + 3] == 'T')
187 if ($fonaux[$i + 4] == 'i')
188 if ($fonaux[$i + 5] == ' ')
189 $x = 1;
190 }
191
192 if ($x == 1)
193 {
194 $fonwrk[$j] = 'K';
195 $j++;
196 $i++;
197 break;
198 }
199
200 if ($j > 0)
201 if ($fonwrk[$j - 1] == 's')
202 $j--;
203
204 $fonwrk[$j] = 'X';
205 $newmud = 1;
206 $i++;
207 break;
208
209 case 'D': //se o caracter for D
210 $x = 0;
211
212 //procura por dor
213 if ($fonaux[$i + 1] != 'o')
214 {
215 $copmud = 1;
216 break;
217 } //if
218
219 else if ($fonaux[$i + 2] == 'R')
220 if ($i != 0)
221 $x = 1; // dor nao inicial
222 else
223 $copfon = 1; // dor inicial
224
225 else
226 $copfon = 1; // nao e dor
227
228 if ($x == 1)
229 if ($fonaux[$i + 3] == 'i')
230 if ($fonaux[$i + 4] == 's') // dores
231 if ($fonaux[$i + 5] != ' ')
232 $x = 0; // nao e dores
233 else
234 ;
235 else
236 $x = 0;
237
238 else if ($fonaux[$i + 3] == 'a')
239 if ($fonaux[$i + 4] != ' ')
240 if ($fonaux[$i + 4] != 's')
241 $x = 0;
242
243 else if ($fonaux[$i + 5] != ' ')
244 $x = 0;
245
246 else
247 ;
248 else
249 ;
250
251 else
252 $x = 0;
253 else
254 $x = 0;
255
256 if ($x == 1)
257 {
258 $fonwrk[$j] = 'D';
259 $fonwrk[$j + 1] = 'o';
260 $fonwrk[$j + 2] = 'R';
261 $i = $i + 5;
262 } //if
263 else
264 $copfon = 1;
265
266 break;
267
268 case 'F': //se o caracter for F
269
270 //F nao eh modificado
271 $copmud = 1;
272
273 break;
274
275 case 'G': //se o caracter for G
276
277 //gui -> gi
278 if ($fonaux[$i + 1] == 'o')
279 if ($fonaux[$i + 2] == 'i')
280 {
281 $fonwrk[$j] = 'G';
282 $fonwrk[$j + 1] = 'i';
283 $j += 2;
284 $i += 2;
285 } //if
286 //diferente de gui copia como consoante muda
287 else
288 $copmud = 1;
289
290 else
291
292 //gl
293 if ($fonaux[$i + 1] == 'L')
294 if ($fonaux[$i + 2] == 'i')
295
296 //gli + vogal -> li + vogal
297 if (($fonaux[$i + 3] == 'a') || ($fonaux[$i + 3] == 'i') || ($fonaux[$i + 3] == 'o'))
298 {
299 $fonwrk[$j] = $fonaux[$i + 1];
300 $fonwrk[$j + 1] = $fonaux[$i + 2];
301 $j += 2;
302 $i += 2;
303 } //if
304 else
305
306 //glin -> lin
307 if ($fonaux[$i + 3] == 'N')
308 {
309 $fonwrk[$j] = $fonaux[$i + 1];
310 $fonwrk[$j + 1] = $fonaux[$i + 2];
311 $j += 2;
312 $i += 2;
313 } /*if*/
314 else
315 $copmud = 1;
316 else
317 $copmud = 1;
318
319 else
320
321 //gn + vogal -> ni + vogal
322 if ($fonaux[$i + 1] == 'N')
323 if (($fonaux[$i + 2] != 'a') && ($fonaux[$i + 2] != 'i') && ($fonaux[$i + 2] != 'o'))
324 $copmud = 1;
325 else
326 {
327 $fonwrk[$j] = 'N';
328 $fonwrk[$j + 1] = 'i';
329 $j += 2;
330 $i++;
331 } //else
332
333 else
334
335 // ghi -> gi
336 if ($fonaux[$i + 1] == 'H')
337 if ($fonaux[$i + 2] == 'i')
338 {
339 $fonwrk[$j] = 'G';
340 $fonwrk[$j + 1] = 'i';
341 $j += 2;
342 $i += 2;
343 } //if
344 else
345 $copmud = 1;
346
347 else
348 $copmud = 1;
349
350 break;
351
352 case 'H': //se o caracter for H
353
354 //H eh desconsiderado
355 break;
356
357 case 'i': //se o caracter for i
358 if ($fonaux[$i + 2] == ' ')
359
360 //is ou iz final perde a consoante
361 if ($fonaux[$i + 1] == 's')
362 {
363 $fonwrk[$j] = 'i';
364 break;
365 } //if
366 else if ($fonaux[$i + 1] == 'Z')
367 {
368 $fonwrk[$j] = 'i';
369 break;
370 } //if
371
372 //ix
373 if ($fonaux[$i + 1] != 'X')
374 $copfon = 1;
375
376 else if ($i != 0)
377 $copfon = 1;
378 else
379
380 //ix vogal no inicio torna-se iz
381 if (($fonaux[$i + 2] == 'a') || ($fonaux[$i + 2] == 'i') || ($fonaux[$i + 2] == 'o'))
382 {
383 $fonwrk[$j] = 'i';
384 $fonwrk[$j + 1] = 'Z';
385 $j += 2;
386 $i++;
387 break;
388 } //if
389 else
390
391 //ix consoante no inicio torna-se is
392 if ($fonaux[$i + 2] == 'C' || $fonaux[$i + 2] == 's')
393 {
394 $fonwrk[$j] = 'i';
395 $j++;
396 $i++;
397 break;
398 } //if
399 else
400 {
401 $fonwrk[$j] = 'i';
402 $fonwrk[$j + 1] = 's';
403 $j += 2;
404 $i++;
405 break;
406 } //else
407
408 break;
409
410 case 'J': //se o caracter for J
411
412 //J -> Gi
413 $fonwrk[$j] = 'G';
414
415 $fonwrk[$j + 1] = 'i';
416 $j += 2;
417 break;
418
419 case 'K': //se o caracter for K
420 //KT -> T
421 if ($fonaux[$i + 1] != 'T')
422 $copmud = 1;
423
424 break;
425
426 case 'L': //se o caracter for L
427
428 //L + vogal nao eh modificado
429 if (($fonaux[$i + 1] == 'a') || ($fonaux[$i + 1] == 'i') || ($fonaux[$i + 1] == 'o'))
430 $copfon = 1;
431 else
432
433 //L + consoante -> U + consoante
434 if ($fonaux[$i + 1] != 'H')
435 {
436 $fonwrk[$j] = 'o';
437 $j++;
438 break;
439 } //if
440
441 //LH + consoante nao eh modificado
442 else if ($fonaux[$i + 2] != 'a' && $fonaux[$i + 2] != 'i' && $fonaux[$i + 2] != 'o')
443 $copfon = 1;
444
445 else
446
447 //LH + vogal -> LI + vogal
448 {
449 $fonwrk[$j] = 'L';
450 $fonwrk[$j + 1] = 'i';
451 $j += 2;
452 $i++;
453 break;
454 }
455
456 break;
457
458 case 'M': //se o caracter for M
459
460 //M + consoante -> N + consoante
461 //M final -> N
462 if (($fonaux[$i + 1] != 'a' && $fonaux[$i + 1] != 'i' && $fonaux[$i + 1] != 'o')
463 || ($fonaux[$i + 1] == ' '))
464 {
465 $fonwrk[$j] = 'N';
466 $j++;
467 } //if
468
469 //M nao eh alterado
470 else
471 $copfon = 1;
472
473 break;
474
475 case 'N': //se o caracter for N
476
477 //NGT -> NT
478 if (($fonaux[$i + 1] == 'G') && ($fonaux[$i + 2] == 'T'))
479 {
480 $fonaux[$i + 1] = 'N';
481 $copfon = 1;
482 } //if
483
484 else
485
486 //NH + consoante nao eh modificado
487 if ($fonaux[$i + 1] == 'H')
488 if (($fonaux[$i + 2] != 'a') && ($fonaux[$i + 2] != 'i') && ($fonaux[$i + 2] != 'o'))
489 $copfon = 1;
490
491 //NH + vogal -> Ni + vogal
492 else
493 {
494 $fonwrk[$j] = 'N';
495 $fonwrk[$j + 1] = 'i';
496 $j += 2;
497 $i++;
498 }
499
500 else
501 $copfon = 1;
502
503 break;
504
505 case 'o': //se o caracter for o
506
507 //oS final -> o
508 //oZ final -> o
509 if (($fonaux[$i + 1] == 's') || ($fonaux[$i + 1] == 'Z'))
510 if ($fonaux[$i + 2] == ' ')
511 {
512 $fonwrk[$j] = 'o';
513 break;
514 } //if
515 else
516 $copfon = 1;
517 else
518 $copfon = 1;
519
520 break;
521
522 case 'P': //se o caracter for P
523
524 //PH -> F
525 if ($fonaux[$i + 1] == 'H')
526 {
527 $fonwrk[$j] = 'F';
528 $i++;
529 $newmud = 1;
530 } //if
531 else
532 $copmud = 1;
533
534 break;
535
536 case 'Q': //se o caracter for Q
537
538 //Koi -> Ki (QUE, QUI -> KE, KI)
539 if ($fonaux[$i + 1] == 'o')
540 if ($fonaux[$i + 2] == 'i')
541 {
542 $fonwrk[$j] = 'K';
543 $j++;
544 $i++;
545 break;
546 } //if
547
548 //QoA -> KoA (QUA -> KUA)
549 $fonwrk[$j] = 'K';
550 $j++;
551 break;
552
553 case 'R': //se o caracter for R
554
555 //R nao eh modificado
556 $copfon = 1;
557
558 break;
559
560 case 's': //se o caracter for s
561
562 //s final eh ignorado
563 if ($fonaux[$i + 1] == ' ')
564 break;
565
566 //s inicial + vogal nao eh modificado
567 if (($fonaux[$i + 1] == 'a') || ($fonaux[$i + 1] == 'i') || ($fonaux[$i + 1] == 'o'))
568 if (i == 0)
569 {
570 $copfon = 1;
571 break;
572 } //if
573 else
574
575 //s entre duas vogais -> z
576 if (($fonaux[$i - 1] != 'a') && ($fonaux[$i - 1] != 'i') && ($fonaux[$i - 1] != 'o'))
577 {
578 $copfon = 1;
579 break;
580 } //if
581 else
582
583 //SoL nao eh modificado
584 if (($fonaux[$i + 1] == 'o') && ($fonaux[$i + 2] == 'L') && ($fonaux[$i + 3] == ' '))
585 {
586 $copfon = 1;
587 break;
588 } //if
589 else
590 {
591 $fonwrk[$j] = 'Z';
592 $j++;
593 break;
594 } //else
595
596 //ss -> s
597 if ($fonaux[$i + 1] == 's')
598 if ($fonaux[$i + 2] != ' ')
599 {
600 $copfon = 1;
601 $i++;
602 break;
603 } //if
604 else
605 {
606 $fonaux[$i + 1] = ' ';
607 break;
608 } //else
609
610 //s inicial seguido de consoante fica precedido de i
611 //se nao for sci, sh ou sch nao seguido de vogal
612 if ($i == 0)
613 if (!(($fonaux[$i + 1] == 'C') && ($fonaux[$i + 2] == 'i')))
614 if ($fonaux[$i + 1] != 'H')
615 if (!(($fonaux[$i + 1] == 'C') && ($fonaux[$i + 2] == 'H')
616 && (($fonaux[$i + 3] != 'a') && ($fonaux[$i + 3] != 'i')
617 && ($fonaux[$i + 3] != 'o'))))
618 {
619 $fonwrk[$j] = 'i';
620 $j++;
621 $copfon = 1;
622 break;
623 } //if
624
625 //sH -> X;
626 if ($fonaux[$i + 1] == 'H')
627 {
628 $fonwrk[$j] = 'X';
629 $i++;
630 $newmud = 1;
631 break;
632 } //if
633
634 if ($fonaux[$i + 1] != 'C')
635 {
636 $copfon = 1;
637 break;
638 } //if
639
640 // sCh nao seguido de i torna-se X
641 if ($fonaux[$i + 2] == 'H')
642 {
643 $fonwrk[$j] = 'X';
644 $i += 2;
645 $newmud = 1;
646 break;
647 } //if
648
649 if ($fonaux[$i + 2] != 'i')
650 {
651 $copfon = 1;
652 break;
653 } //if
654
655 //sCi final -> Xi
656 if ($fonaux[$i + 3] == ' ')
657 {
658 $fonwrk[$j] = 'X';
659 $fonwrk[$j + 1] = 'i';
660 $i = $i + 3;
661 break;
662 } //if
663
664 //sCi vogal -> X
665 if (($fonaux[$i + 3] == 'a') || ($fonaux[$i + 3] == 'i') || ($fonaux[$i + 3] == 'o'))
666 {
667 $fonwrk[$j] = 'X';
668 $j++;
669 $i += 2;
670 break;
671 } //if
672
673 //sCi consoante -> si
674 $fonwrk[$j] = 's';
675 $fonwrk[$j + 1] = 'i';
676 $j += 2;
677 $i += 2;
678 break;
679
680 case 'T': //se o caracter for T
681
682 //TS -> S
683 if ($fonaux[$i + 1] == 's')
684 break;
685
686 //TZ -> Z
687 else if ($fonaux[$i + 1] == 'Z')
688 break;
689
690 else
691 $copmud = 1;
692
693 break;
694
695 case 'V': //se o caracter for V
696 case 'W': //ou se o caracter for W
697
698 //V,W inicial + vogal -> o + vogal (U + vogal)
699 if ($fonaux[$i + 1] == 'a' || $fonaux[$i + 1] == 'i' || $fonaux[$i + 1] == 'o')
700 if ($i == 0)
701 {
702 $fonwrk[$j] = 'o';
703 $j++;
704 } //if
705
706 //V,W NAO inicial + vogal -> V + vogal
707 else
708 {
709 $fonwrk[$j] = 'V';
710 $newmud = 1;
711 } //else
712 else
713 {
714 $fonwrk[$j] = 'V';
715 $newmud = 1;
716 } //else
717
718 break;
719
720 case 'X': //se o caracter for X
721
722 //caracter nao eh modificado
723 $copmud = 1;
724
725 break;
726
727 case 'Y': //se o caracter for Y
728 //Y jah foi tratado acima
729 break;
730
731 case 'Z': //se o caracter for Z
732
733 //Z final eh eliminado
734 if ($fonaux[$i + 1] == ' ')
735 break;
736
737 //Z + vogal nao eh modificado
738 else if (($fonaux[$i + 1] == 'a') || ($fonaux[$i + 1] == 'i') || ($fonaux[$i + 1] == 'o'))
739 $copfon = 1;
740
741 //Z + consoante -> S + consoante
742 else
743 {
744 $fonwrk[$j] = 's';
745 $j++;
746 } //else
747
748 break;
749
750 default: //se o caracter nao for um dos jah relacionados
751
752 //o caracter nao eh modificado
753 $fonwrk[$j] = $fonaux[$i];
754
755 $j++;
756 break;
757 } //switch
758
759 //copia caracter corrente
760 if ($copfon == 1)
761 {
762 $fonwrk[$j] = $fonaux[$i];
763 $j++;
764 } //if
765
766 //insercao de i apos consoante muda
767 if ($copmud == 1)
768 $fonwrk[$j] = $fonaux[$i];
769
770 if ($copmud == 1 || $newmud == 1)
771 {
772 $j++;
773 $k = 0;
774
775 while ($k == 0)
776 if ($fonaux[$i + 1] == ' ')
777 //e final mudo
778 {
779 $fonwrk[$j] = 'i';
780 $k = 1;
781 } //if
782
783 else if (($fonaux[$i + 1] == 'a') || ($fonaux[$i + 1] == 'i') || ($fonaux[$i + 1] == 'o'))
784 $k = 1;
785 else if ($fonwrk[$j - 1] == 'X')
786 {
787 $fonwrk[$j] = 'i';
788 $j++;
789 $k = 1;
790 } //if
791
792 else if ($fonaux[$i + 1] == 'R')
793 $k = 1;
794
795 else if ($fonaux[$i + 1] == 'L')
796 $k = 1;
797 else if ($fonaux[$i + 1] != 'H')
798 {
799 $fonwrk[$j] = 'i';
800 $j++;
801 $k = 1;
802 } //if
803 else
804 $i++;
805 }
806 } //for
807
808 for ($i = 0; $i < $len; $i++)
809 { // percorre toda a string
810
811 //i -> I
812 if ($fonwrk[$i] == 'i')
813 $fonwrk[$i] = 'I';
814
815 else
816 //a -> A
817 if ($fonwrk[$i] == 'a')
818 $fonwrk[$i] = 'A';
819
820 else
821
822 //o -> U
823 if ($fonwrk[$i] == 'o')
824 $fonwrk[$i] = 'U';
825
826 else
827
828 //s -> S
829 if ($fonwrk[$i] == 's')
830 $fonwrk[$i] = 'S';
831
832 else
833
834 //E -> b
835 if ($fonwrk[$i] == 'E')
836 $fonwrk[$i] = ' ';
837
838 else
839
840 //Y -> _
841 if ($fonwrk[$i] == 'Y')
842 $fonwrk[$i] = '_';
843 }
844
845 $result = '';
846
847 foreach ($fonwrk as $letra)
848 $result .= $letra;
849
850 $result = $this->removeMultiple($result);
851 $result = trim(strtoupper($result));
852 return $result;
853 }
854}
855?>
fonetize($word)
Definição mphonetic.class:62
removeMultiple($word)
Definição mphonetic.class:29
removeAccentuation($word)
Definição mphonetic.class:4
removeStrange($word)
Definição mphonetic.class:45
if(isset($_GET['name'])) else
Definição demo6.php:29