Qual estrutura de dados pode ser usado para a construção de um dicionário de palavras de forma eficiente e de um verificador ortográfico?
A resposta depende dos funcionalistas necessários para o Corretor Ortográfico e disponibilidade de memória. A seguir serão mostradas algumas possibilidades.
Hashing é uma opção simples para isso. Podemos colocar todas as palavras em uma tabela hash.
O hash não suporta operações como pesquisa de prefixo. Pesquisa de prefixo é algo que um usuário digita um prefixo e seu dicionário mostra que todas as palavras que começam com esse prefixo. Hashing também não suporta a impressão eficiente de todas as palavras no dicionário em ordem alfabética e busca de vizinho mais próximo.
Se queremos ambas as operações, look up e pesquisa de prefixo, Trie é adequado. Com a Trie, podemos realizar todas as operações, como inserir, pesquisar, apagar em O (n), onde n é o comprimento da palavra a ser processada. Outra vantagem da Trie é que pode imprimir todas as palavras em ordem alfabética, o que não é possível com hash.
A desvantagem da Trie é que ela requer muito espaço. Se o espaço é preocupação, então Árvore de Pesquisa Ternária pode ser preferido. Em uma Árvore de Pesquisa Ternária, complexidade de tempo de operação de busca é O (h) onde h é a altura da árvore. Árvore de Pesquisa Ternária também suporta outras operações suportadas pelas Tries como pesquisa de prefixo, impressão por ordem alfabética e busca de vizinho mais próximo.
Se quisermos suportar sugestões, como o Google mostra "você quis dizer ...", então temos que encontrar a palavra mais próxima no dicionário. A palavra mais próxima pode ser definida como a palavra que pode ser obtido com o número mínimo de transformações de caracteres (adicionar, excluir, substituir). Uma maneira Trivial é levar a palavra dada e gerar todas as palavras que são uma distância (1 editar ou excluir um ou substituir 1) de distância e um por um procurá-los no dicionário. Se nada for encontrado, então em seguida, procurar todas as palavras que são 2 distante e assim por diante. Existem muitos algoritmos complexos que fazem isso. Como perthe wiki, o algoritmo mais bem sucedido até hoje é o Andrew Golding e Dan Roth Window-based spelling correction algorithm.
Fonte: GeeksForGeeks
Nome | Comentário | |
---|---|---|
Ainda não há nenhum problema relacionado a esse conteúdo |