示例#1
0
        private void BuildMetaphoneKeys()
        {
            Chave chave = new Chave(this._Nome);

            //retirar letras repetidas
            chave.RemoverRepeticoes();
            this._Nome = chave.Origem;

            //Aplicando regra das consoantes e extrair a chave
            Consoantes consoante = new Consoantes(this._Nome);

            chave = consoante.RegraConsoante(this._Nome);

            //alterar "E" por "I"
            chave.Excecao();

            //retirar letras repetidas
            chave.RemoverRepeticoes();

            //inserir todos encontros vocalicos na chave
            Encontro encontro = new Encontro();

            chave = encontro.InsertEncontroVocalico(chave);

            //case quantidades de letras

            Vogais vogal = new Vogais();

            chave = vogal.RegraVogais(chave);

            this._Chave = chave.Key;
            this._Nome  = chave.Origem;
        }
示例#2
0
 public bool EncontroVocalicoConsonantal(string palavra)
 {
     if (!Vogais.IsVowel(0, palavra) && !Vogais.IsVowel(1, palavra))
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#3
0
        public Chave PrimeiraVogal(Chave chave)
        {
            int current = 0;

            while (current < chave.Origem.Length)
            {
                if (Vogais.IsVowel(current, chave.Origem))
                {
                    chave.AddMetaphoneCharacter(chave.Origem[current].ToString(), current);
                    return(chave);
                }
                current++;
            }
            return(chave);
        }
示例#4
0
        public Chave UltimaVogal(Chave chave)
        {
            int current = chave.Origem.Length - 1;

            while (current > 0)
            {
                if (Vogais.IsVowel(current, chave.Origem))
                {
                    chave.AddMetaphoneCharacter(chave.Origem[current].ToString(), current);
                    return(chave);
                }
                current--;
            }
            return(chave);
        }
示例#5
0
        public Chave RegraVogais(Chave chave)
        {
            Encontro encontro     = new Encontro();
            int      qtdEncontros = encontro.ProximoEncontroVocalico(chave.Origem).Count();
            int      current      = chave.Origem.Length;

            //if(chave.Origem[0].Equals("H")) current--;

            switch (current)
            {
            case 1:
                chave = PrimeiraVogal(chave);
                break;

            case 2:
                chave = PrimeiraVogal(chave);
                break;

            case 3:
                chave = PrimeiraVogal(chave);
                break;

            case 4:
                if (qtdEncontros == 0)
                {
                    chave = PrimeiraVogal(chave);
                }
                break;

            case 5:
                if (qtdEncontros == 0)
                {
                    if (!encontro.EncontroVocalicoConsonantal(chave.Origem))
                    {
                        chave = PrimeiraVogal(chave);
                    }
                    else
                    {
                        chave = UltimaVogal(chave);
                    }
                }
                break;

            case 6:
                if (qtdEncontros == 0)
                {
                    if (!Vogais.IsVowel(chave.Origem.Length - 1, chave.Origem))
                    {
                        chave = PrimeiraVogal(chave);
                    }
                    else
                    {
                        chave = UltimaVogal(chave);
                    }
                }
                break;

            case 7:
                chave = UltimaVogal(chave);
                break;

            default:
                chave = UltimaVogal(chave);
                break;
            }


            return(chave);
        }
示例#6
0
        public Chave RegraConsoante(string nome)
        {
            int   current = 0;
            Chave chave   = new Chave(nome);

            while (current < nome.Length)
            {
                switch (nome[current])
                {
                case 'Y':
                    //chave.AddMetaphoneCharacter("I", current);
                    chave.Origem = chave.Origem.Remove(current, 1);
                    chave.Origem = chave.Origem.Insert(current, "I");
                    current     += 1;
                    break;

                case 'B':
                    chave.AddMetaphoneCharacter("B", current);
                    current += 1;
                    break;

                case 'Ç':
                    chave.AddMetaphoneCharacter("S", current);
                    current += 1;
                    break;

                case 'C':
                    if (current < nome.Length - 1)
                    {
                        if (nome.Substring(current, 2).Equals("CH"))
                        {
                            if (current + 2 < nome.Length)
                            {
                                if (Vogais.IsVowel(current + 2, nome))
                                {
                                    chave.AddMetaphoneCharacter("X", current);
                                    current += 2;
                                    break;
                                }
                            }
                        }
                    }
                    if (current < nome.Length - 1)
                    {
                        if (nome.Substring(current, 2).Equals("CE") || nome.Substring(current, 2).Equals("CI") || nome.Substring(current, 2).Equals("CY"))
                        {
                            chave.AddMetaphoneCharacter("S", current);
                            current += 1;
                            break;
                        }
                    }
                    chave.AddMetaphoneCharacter("C", current);
                    current += 1;
                    break;

                case 'D':
                    chave.AddMetaphoneCharacter("D", current);
                    current += 1;
                    break;

                case 'F':

                    chave.AddMetaphoneCharacter("F", current);
                    current += 1;
                    break;

                case 'G':
                    if (current < nome.Length - 1)
                    {
                        if (nome.Substring(current, 2).Equals("GE") || nome.Substring(current, 2).Equals("GI") || nome.Substring(current, 2).Equals("GY"))
                        {
                            chave.AddMetaphoneCharacter("J", current);
                            current += 1;
                            break;
                        }
                    }
                    chave.AddMetaphoneCharacter("G", current);
                    current += 1;
                    break;

                case 'H':

                    if (current == 0 && Vogais.IsVowel(current + 1, nome))
                    {
                        //chave.AddMetaphoneCharacter(nome.Substring(current + 1,1), current);
                        current += 2;
                        break;
                    }
                    // somente mantém se primeira & vogal anterior ou entre 2 vogais...
                    //else if (((current == 0) || IsVowel(current - 1,nome)) && IsVowel(current + 1,nome))
                    //{
                    //    chave.AddMetaphoneCharacter("H",current);
                    //    current += 2;
                    //}
                    if (current - 1 > 0)
                    {
                        if (nome.Substring(current - 1, 2).Equals("NH") || nome.Substring(current - 1, 2).Equals("LH"))
                        {
                            chave.AddMetaphoneCharacter("I", current);
                            current += 1;
                            break;
                        }
                    }

                    // também toma cuidado com 'HH'

                    current += 1;
                    break;

                case 'J':

                    chave.AddMetaphoneCharacter("J", current);
                    current += 1;
                    break;

                case 'K':
                    chave.AddMetaphoneCharacter("C", current);
                    current += 1;
                    break;

                case 'L':
                    chave.AddMetaphoneCharacter("L", current);
                    current += 1;
                    break;

                case 'M':
                    chave.AddMetaphoneCharacter("M", current);
                    current += 1;
                    break;

                case 'N':
                    chave.AddMetaphoneCharacter("N", current);
                    current += 1;
                    break;

                case 'Ñ':     // '�'
                    chave.AddMetaphoneCharacter("N", current);
                    current += 1;
                    break;

                case 'P':
                    if (current < nome.Length - 1)
                    {
                        if (nome.Substring(current + 1, 1).Equals("H"))
                        {
                            chave.AddMetaphoneCharacter("F", current);
                            current += 2;
                            break;
                        }
                    }

                    chave.AddMetaphoneCharacter("P", current);
                    current += 1;
                    break;

                case 'Q':

                    chave.AddMetaphoneCharacter("C", current);
                    current += 1;
                    break;

                case 'R':
                    chave.AddMetaphoneCharacter("R", current);
                    current += 1;
                    break;

                case 'S':
                    if (current < nome.Length - 1)
                    {
                        if (nome.Substring(current, 2).Equals("SH"))
                        {
                            chave.AddMetaphoneCharacter("X", current);
                            current += 2;
                            break;
                        }
                    }

                    chave.AddMetaphoneCharacter("S", current);
                    current += 1;
                    break;

                case 'T':
                    chave.AddMetaphoneCharacter("T", current);
                    current += 1;
                    break;

                case 'V':
                    chave.Origem = chave.Origem.Remove(current, 1);
                    chave.Origem = chave.Origem.Insert(current, "U");
                    current     += 1;
                    break;

                case 'W':
                    chave.Origem = chave.Origem.Remove(current, 1);
                    chave.Origem = chave.Origem.Insert(current, "U");
                    current     += 1;
                    break;

                case 'X':
                    chave.AddMetaphoneCharacter("X", current);
                    current += 1;
                    break;

                case 'Z':
                    chave.AddMetaphoneCharacter("S", current);
                    current += 1;
                    break;

                default:
                    current += 1;
                    break;
                }
            }
            return(chave);
        }