Você está na página 1de 10

3.

DICIONRIOS E RECUPERAO TOLERANTE Nos captulos 1 e 2, desenvolvemos as idias bsicas de ndices invertidos para lidar com manipulao Booleana e consultas de proximidade. Aqui, ns desenvolvemos tcnicas que so robustas contra erros de digitao nas consultas, bem como alternativas ortogrficas. 3.1 ESTRUTURAS DE PESQUISA PARA DICIONRIOS Dado um ndice invertido e uma consulta, nossa primeira tarefa determinar se cada termo da consulta existe no vocabulrio e em caso afirmativo, identificar o ponteiro para os endereos correspondentes. Esta operao de pesquisa de vocabulrio utiliza uma estrutura de dados clssica chamada de dicionrio e tem duas grandes classes de solues: hash e rvores de busca. Na literatura de estruturas de dados, as entradas no vocabulrio (no nosso caso, os termos) so muitas vezes referidas como chaves. A escolha da soluo (hash, ou rvores de pesquisa) determinada por uma srie de perguntas: (1) Quantas chaves provavelmente teremos? (2) Este nmero provavelmente permanece esttico, ou muda muito - e no caso de mudanas estamos propensos a ter apenas novas chaves inseridas, ou tambm algumas chaves no dicionrio sero excludas? (3) Quais so as freqncias relativas com que vrias chaves sero acessadas? Hashing tem sido utilizado para busca em dicionrio, em algumas mquinas de busca. Cada termo do vocabulrio (chave) hashed em um nmero inteiro em um espao suficientemente grande para que as colises de hash sejam improvveis; Na hora da consulta, ns consultamos cada termo separadamente do hash e seguindo um ponteiro para o endereamento correspondente, tendo em conta toda a lgica para resolver colises de hash. No h nenhuma maneira fcil de encontrar variaes menores de um termo de consulta (como os acentuados e verses no-acentuadas de uma palavra como currculo), j que estes poderiam usar hash para muitos inteiros diferentes. Em particular, no podemos procurar (por exemplo) todos os termos que comeam com o prefixo automat, uma operao que vai ser exibida a seguir na Seo 3.2. Finalmente, em um ambiente (como a Web) onde o tamanho do vocabulrio continua crescendo, uma funo hash projetada para as necessidades atuais pode no ser satisfeita em poucos anos. rvores de busca superam muitas destas questes - por exemplo, que nos permite enumerar todos os termos do vocabulrio comeando com automat. A mais conhecida rvore de busca a rvore binria, em que cada n interno da rvore binria tem dois filhos. A busca por um termo comea na raiz da rvore. Cada n interno (incluindo o root) representa um teste binrio, baseado no resultado do produto da pesquisa para uma das duas sub-rvores abaixo desse n. A figura 3.1 apresenta um exemplo de uma rvore de busca binria utilizada para um dicionrio. Para uma busca eficiente depende da rvore estar balanceada: o nmero de termos em duas subrvores de um n so iguais ou diferem por um. A questo principal aqui o rebalanceamento: como os termos so inseridos ou excludos da rvore de busca binria, precisa ser rebalanceada para que a propriedade de balanceamento seja mantida. Para suavizar o rebalanceamento, uma abordagem permitir que o nmero de sub-rvores sob um n interno possa variar em um intervalo fixo. Uma rvore de busca comumente usada para um dicionrio a B-TREE - uma rvore de busca em que cada n interno tem um nmero de filhos no intervalo [a, b], onde a e b so inteiros positivos adequados; Figura 3.2 mostra um

exemplo com a = 2 e b = 4. Cada filho em um novo n interno representa um teste para uma srie de seqncias de caracteres, como no exemplo a rvore binria da Figura 3.1.

Figure 3.1 Uma rvore de busca binria. Neste exemplo, o galho das parties de root so os termos dos vocabulrios e esto em duas subrvores, aqueles cuja primeira letra est entre a e m, e o resto.

Figura 3.2 Uma rvore-B. Neste exemplo, cada n interno tem entre 2 e 4 filhos

possvel notar que, ao contrrio de hashing, rvores de busca demandam que os caracteres utilizados na coleta de documentos tm uma ordenao prescrita, por exemplo, as 26 letras do alfabeto ingls sempre so listados na ordem especfica de A a Z. 3.2 CONSULTAS WILDCARD (CORINGA) Consultas Wildcard(coringas) so usadas em qualquer uma das seguintes situaes: (1) o usurio incerto sobre a ortografia de um termo de consulta (por exemplo, Sydney vs Sidney, o que leva consulta curinga S*dney); (2) o usurio est ciente das mltiplas variantes de ortografia em um termo e procura documentos que contenham qualquer uma das variantes (por exemplo, a color contra colour); (3) o usurio procura documentos que contenham variantes de um termo que seria capturado pelo stemming, mas no tem certeza se a mquina de consulta realiza stemming (por exemplo, judicial vs. judiciary, levando a consulta wild-card judicia*); (4) o usurio incerto da entrega correta de uma palavra ou frase estrangeira (por exemplo, a consulta Universit* Stuttgart). Uma consulta como mon* conhecida como consulta wild-card trailing ( direita), porque o smbolo * ocorre apenas uma vez, no fim da seqncia de pesquisa. Uma rvore de busca no dicionrio uma maneira conveniente de trabalhar com consultas wild-card trailing ( direita): caminha-se para baixo da rvore aps os smbolos M, O e N, por sua vez, em um ponto podemos enumerar o conjunto W de termos no dicionrio com o prefixo mon. Finalmente, ns

usamos | W | para pesquisas sobre o ndice invertido padro para recuperar todos os documentos que contenham qualquer termo em W. Mas e sobre consultas wildcard onde o smbolo * no obrigado a estar no fim da string de pesquisa? Antes de tratar este caso geral, podemos citar uma generalizao breve de consultas trailing wildcard. Primeiro, considere a consulta wildcard, ou perguntas na forma de *mon. Considere uma B-tree reversa do dicionrio - aquele em que cada raiz para caminho-folha da Btree corresponde a um termo no dicionrio escrito ao contrrio: assim, o termo lemon seria, na B-tree, representado pelo caminho raiz n-o-m-e-l. Caminhando para baixo na B-tree reversa, depois enumerando todos os termos R com o prefixo dado. Na verdade, usando uma B-tree regular juntamente com uma B-tree reversa, podemos lidar com um caso ainda mais geral: consultas wildcard em que h um nico smbolo *, como se*mon. Para fazer isso, usamos o B-tree regular para enumerar os W conjuntos de termos do dicionrio que comeam com o prefixo se, depois a B-tree reversa para enumerar os R conjuntos de termos que terminam com o sufixo mon. Em seguida, tomamos a interseo W R destes dois conjuntos, para chegar ao conjunto de termos que comeam com o prefixo se e terminam com o sufixo mon. Finalmente, usamos o ndice invertido padro para recuperar todos os documentos que contm quaisquer termos, nesta interseo. Podemos, assim, lidar com consultas wildcard que contm um nico smbolo * utilizando duas B-trees, o B-tree normal e uma B-tree inversa.

3.2.1 CONSULTAS WILDCARD GERAIS


Estudaremos agora duas tcnicas para manipulao de consultas wildcard gerais. Ambas as tcnicas compartilham uma estratgia comum: expressar a wildcard query qw dada como uma Boolean query Q, um ndice especialmente construdo, de modo que a resposta Q um subconjunto do conjunto de termos do vocabulrio correspondente a qw. Ento, vamos verificar cada termo na resposta Q diante de qw, descartando os termos do vocabulrio que no correspondem em qw. Neste ponto, temos no vocabulrio termos combinados qw e podemos recorrer ao ndice padro invertido.

INDICES PERMUTERN
Nosso primeiro ndice especial para consultas wildcard gerais o ndice permuterm1, uma forma de ndice invertido. Primeiro, vamos introduzir um smbolo especial $ em nosso conjunto de caracteres, para marcar o fim de um termo. Assim, o termo hello mostrado aqui como a expresso ampliada hello$. Em seguida, construmos um ndice permuterm, para as diferentes rotaes de cada termo (acrescentado, com $) todos ligados com o termo original no vocabulrio. Figura 3.3 fornece um exemplo de uma entrada do ndice permuterm para o termo hello. Nos referimos ao conjunto de termos alterados do ndice permuterm como o vocabulrio permuterm. Como que este ndice nos ajuda com as consultas wildcard? Considere a consulta wildcard m*n. A chave rotacionar com uma consulta wildcard de modo que o smbolo * aparea no final da string - portanto, a rotao da consulta wildcard inicia com n$m*. Em seguida, olhamos para cima na string do ndice permuterm, onde a busca n$m* (atravs de uma rvore de

busca) conduz a rotaes de (entre outros) os termos man e moron.

Permutao do termo

Figura 3.3 parte de um ndice permuterm

Agora que o ndice permuterm nos permite identificar as condies iniciais de vocabulrio combinando uma consulta wildcard, olhamos em cima destes termos no ndice invertido padro para recuperar os documentos correspondentes. Podemos assim manipular qualquer consulta com um nico smbolo wildcard *. Mas o que dizer de uma consulta, como fir*mo*er? Neste caso, temos primeiro que enumerar os termos do dicionrio que esto no ndice permuterm er$fi*. Nem todos esses termos no dicionrio tero mo no meio - filtramos estas sadas por enumerao exaustiva, verificando cada candidato para ver se ele contm mo. Neste exemplo, o termo fishmonger iria sobreviver essa filtragem, mas filibuster no. Em seguida, executamos os termos que sobreviveram atravs do ndice invertido padro para recuperao de documentos. Uma desvantagem do ndice permuterm que seu dicionrio se torna muito grande, inclusive quando acontecem todas as rotaes de cada termo. INDICES K-GRAM PARA CONSULTAS WILDCARD Considerando que o ndice permuterm simples, pode-se levar a uma ampliao considervel do nmero de rotaes por termo; para um dicionrio de termos em Ingls, isso pode representar quase dez vezes mais espao. Apresentamos agora uma segunda tcnica, conhecida como ndice k-gram, para tratamento de consultas wildcard. Tambm faremos uso de ndices k-gram na Seco 3.3.4. O k-gram uma seqncia de k caracteres. Assim cas, ast e stl so todas 3-grams contidas no termo castle. Ns utilizamos um caractere especial $ para indicar o incio ou fim de um termo, de modo que o conjunto completo de 3-grams gerado para castle : $ca, cas, ast, stl, tle, le$. Em um ndice k-gram, o dicionrio contm todos os k-grams que ocorrem em cada termo no vocabulrio. Cada ponto na lista endereamento de um k-gram para todos os termos do vocabulrio contendo aquele k-gram. Por exemplo, o 3-gram etr apontaria para termos do vocabulrio como metric e retrieval. Um exemplo dado na Figura 3.4

Figura 3.4 Exemplo de uma lista de endereamento em um ndice 3-gram. Aqui, o 3-gram etr ilustrado. O termos correspondentes do vocabulrio so lexicographically ordenados nos endereamentos.

Como que tal ndice nos ajuda com consultas wildcard? Considere a consulta wildcard re*ve. Estamos a procura de documentos que contenham qualquer termo que comea com re e termine com ve. Assim, executamos a consulta Boolean re$ and ve$. Esta procurada no ndice de 3grams e produz uma lista de correspondncia de termos como relive, remove e retrieve. Cada

um destes termos de correspondncia procurado no ndice padro invertido para produzir documentos correspondentes consulta. H no entanto uma dificuldade com o uso do ndice k-gram, que exige um passo adicional de processamento. Considere o uso do ndice 3-gram descrito acima para a consulta red*. Seguindo o processo descrito acima, ns primeiramente fazemos uma consulta boleana $re and red para o 3-gram. Isto leva a uma correspondncia de termos para cada recuperao, que contm o conjunto de dois 3-gram $re and red, mas no correspondem consulta wildcard original red*. Para lidar com isso, ns introduzimos uma etapa ps-filtragem, em que os termos enumerados pela consulta booleana sobre o ndice 3-gram so verificados individualmente contra a consulta original red*. Esta uma simples seqncia de correspondncia de operao e termos de weeds out e assim so retirados pois no correspondem consulta original. Termos que sobrevivem so ento procurados no ndice padro invertidos, como de costume. Vimos que uma consulta wildcard pode resultar em vrios termos para serem enumerados, cada um dos quais torna-se uma consulta de termo-nico no ndice padro invertido. As mquinas de busca permitem a combinao de consultas wildcard usando operadores booleanos, por exemplo, re*d e fe*ri. Qual a semntica adequada para tal uma consulta? Uma vez que cada consulta wildcard se transforma em uma nica disjuno de consultas de termos nicos, a interpretao adequada deste exemplo que temos uma conjuno de disjunes: buscamos todos os documentos que contenham qualquer termo correspondente re*d e qualquer termo correspondente fe*ri. 3.3 CORREO ORTOGRFICA Ns olhamos para o prximo problema da correo de erros ortogrficos nas consultas. Por exemplo, ns podemos desejar recuperar documentos que contenham o termo carrot quando o usurio digita a consulta carot. Ns olhamos para dois passos para resolver este problema: o primeiro baseado na verificao da distncia o segundo baseado na sobreposio k-gram. Antes de entrar em detalhes algortmicos destes mtodos, analisamos em primeiro lugar como as mquinas de busca fornecem correo ortogrfica, como parte da experincia do usurio 3.3.1 IMPLEMENTAO DA CORREO ORTOGRFICA

H dois princpios bsicos subjacentes para a maioria dos algoritmos de correo ortogrfica. 1. Das vrias alternativas corretas para consultas com erros ortogrficos, escolher uma "mais prxima". Isto exige que tenhamos uma noo de proximidade ou a proximidade entre um par de consultas. Iremos desenvolver estas medidas de proximidade na Seo 3.3.3. 2. Quando duas consultas escritas corretamente esto vinculadas (ou quase vinculadas), selecione uma que mais comum. Por exemplo, grunt e grant ambos parecem igualmente aceitveis como correes para grnt. Em seguida, o algoritmo deve escolher a mais comum entre grunt e grant como uma correo. A simples noo de mais comum considerar o nmero de ocorrncias do termo na coleo, assim se grunt ocorre mais freqentemente do que grant, seria a correo escolhida. Uma noo diferente de mais comum empregado em muitas mquinas de busca, especialmente na web. A idia utilizar a correo que mais comum entre as consultas digitadas por outros usurios. A idia aqui que se grunt seja digitado como uma consulta mais freqentemente do que grant, ento mais provvel que o usurio que digitou grnt desejaria ter digitado grunt na consulta.

A partir da seo 3.3.3 ns descrevemos noes de proximidade entre as consultas, bem como seu clculo eficiente. Construo de algoritmos de correo ortogrfica para estes clculos de proximidade, sua funcionalidade , ento, exposta aos usurios em uma das vrias maneiras: 1. Na consulta carot sempre recupera documentos contendo carot bem como qualquer "forma corrigida" verso de carot, incluindo carrot e tarot. 2. Como em (1) acima, mas somente quando a consulta do termo carot no est no dicionrio. 3. Como em (1) acima, mas somente quando a consulta original retornar menos de um nmero predefinido de documentos (digamos menos de cinco documentos). 4. Quando a consulta original retorna menos de um nmero predefinido de documentos, a interface de busca apresenta uma sugesto de ortografia para o usurio final: esta sugesto consiste na ortografia corrigida do(s) termo(s) de consulta. Assim, a mquina de busca pode responder ao usurio: "Voc quis dizer carrot?" 3.3.2 FORMAS DE CORREO ORTOGRFICA

Ns nos concentramos em duas formas especficas de correo ortogrfica que nos referimos como correo de termo-isolado e correo sensvel ao contexto. Na correo do termo isolado, tentamos corrigir um termo em uma nica consulta de cada vez. Um exemplo de correo do termo isolado, a consulta flew form Heathrow contm um erro ortogrfico do termo from - porque cada termo da consulta escrito corretamente de forma isolada. Comeamos por analisar duas tcnicas para lidar com a correo de termos isolados: editar distncia e sobreposio k-gram. Em seguida, proceder correo de contexto sensvel 3.3.3 CALCULAR DISTNCIA

Dadas duas seqncias de caracteres (strings) S1 e S2, o clculo da distncia entre eles o nmero mnimo de clculos de operaes necessrias para transformar S1 em S2. Mais comumente, os clculos de operaes permitidas para este propsito so: (i) inserir um caractere em uma string, ii) eliminar um caractere de uma string e (iii) substituir um caractere de uma string por outro caractere. Para estas operaes, calcular a distncia s vezes conhecido como distncia de Levenshtein. Por exemplo, o clculo da distncia entre cat e dog 3. Na verdade, a idia de calcular a distncia pode ser generalizada para permitir diferentes pesos para diferentes tipos de operaes de clculo, como por exemplo, um maior peso pode ser colocado sobre a substituio do carter s pelo carter p, do que substitu-lo pelo carter a (o sendo este ltimo mais prximo de s no teclado). A definio de pesos um caminho dependendo da probabilidade de substituio de letras por outra, e muito eficaz, na prtica (ver seco 3.4 para a questo separada de semelhana fontica). No entanto, o restante do nosso tratamento aqui incidir sobre o caso em que calcular todas as operaes tm o mesmo peso. J se conhece como calcular o edit distance(ponderado) entre duas seqncias no tempo O (| S1 | | | S2), onde | SI | denota o comprimento de uma seqncia de Si. A idia de usar o algoritmo de programao dinmica na Figura 3.5, onde os caracteres em S1 e S2 so dados em forma de matriz. O algoritmo completa as (inteiro) entradas de uma matriz m cujas duas dimenses so iguais aos comprimentos das duas strings, cujos edit distance esta sendo calculado; a entrada (i, j) na matrix ir realizar (aps a execuo do algoritmo) o clculo da distncia entre os caracteres consistindo o primeiro caractere i de S1 e o primeiro caractere j de S2. A etapa dinmica de programao central representada nas linhas 8-10 da Figura 3.5, onde as trs quantidades cujo

mnimo tomado correspondem substituio do caractere em s1, inserindo o caractere em s1 e inserindo o caractere em S2. Figura 3.6 mostra um exemplo de clculo de distncia Levenshtein da Figura 3.5. A clula tpica [i,j] tem quatro entradas formatadas como uma clula de 2 2. A entrada inferior direita de cada clula a min das outras trs, correspondendo a principal etapa de programao dinmica na Figura 3.5. As outras trs entradas so as trs entradas de m[i-1, j-1]+0 ou 1 dependendo se s1[i]=s2[j], m[i1,j]+1 e m[i,j-1]+1. As clulas com nmeros em itlico representam o caminho pelo qual podemos determinar a distncia Levenshtein.

Figura 3.5 algoritmo de programao dinmica para calcular a distncia entre strings editar S 1 e S2.

Figura 3.6 Exemplo de clculo de distncia Levenshtein. As clulas em itlico determinam o calculo da distncia neste exemplo.

O problema de correo ortogrfica, no entanto exige mais do que o clculo da distncia: dado um conjunto S de strings (correspondentes a termos do vocabulrio) e uma consulta da string q, buscamos a string(s) em V, no clculo de distncia mnima de q. Podemos ver isso como um problema de decodificao, em que as palavras-cdigo (as seqncias em V) so prescritas com antecedncia. A maneira bvia de fazer isso para calcular o edit distance q para cada seqncia em V, antes de selecionar a string(s) de clculo de distncia mnima. Esta pesquisa exaustiva excessivamente custosa. Assim, uma srie de heursticas so utilizadas na prtica de maneira eficiente para recuperar os termos do vocabulrio que possam ter um baixo edit distance para a consulta do termo(s). A mais simples heurstica como restringir a pesquisa aos termos do dicionrio que comeam com a mesma letra da consulta da string; a esperana que os erros de ortografia no ocorram

no primeiro caractere da consulta. Uma variante mais sofisticada desta heurstica usar uma verso do ndice permuterm, no qual vamos omitir o final-da-palavra com o smbolo $. Considere o conjunto de todas as rotaes da consulta da string q. Para cada rotao r deste conjunto, ns percorremos a B-tree para o ndice permuterm, recuperando, assim, todos os termos do dicionrio que tm uma rotao comeando com r. Por exemplo, se q mase e consideramos rotao r = sema, gostaramos de recuperar termos do dicionrio, como semantic e de semaphore que no tm uma pequena edit distance para q. Infelizmente, falharamos em termos do dicionrios mais pertinentes como mare e mane. Para resolver isso, ns refinamos o schema de rotao: para cada rotao, omitimos um sufixo de l caracter antes de realizar a Btree transversal. Isto assegura que cada termo do conjunto R de termos recuperados do dicionrio inclui uma "longa" substring em comum com o q. O valor de l poderia depender de comprimento de q. Alternativamente, podemos defin-lo como uma constante fixa, como 2. 3.3.4 NDICES K-GRAM PARA CORREO ORTOGRFICA

Para limitar ainda mais o conjunto de termos do vocabulrio para a qual vamos calcular o edit distance para o termo da consulta, agora mostraremos como chamar o ndice k-gram de seco 3.2.2 (pgina 54) para ajudar a recuperar os termos do vocabulrio com baixo edit distance para a consulta q. Assim que recuperar esses termos, podemos encontrar os menores edit distance de q. Na verdade, vamos utilizar o ndice k-gram para recuperar os termos do vocabulrio que tem muitos k-grams em comum com a consulta. Vamos argumentar que, por definio razovel de "k muitas gramas em comum", o processo de recuperao essencialmente o de uma nica digitalizao atravs de lanamentos para o k-gram na consulta de caracteres q. O ndice 2-grama (ou bigrama) na Figura 3.7 mostra (uma poro) os endereamentos para os trs bigramas na consulta bord. Suponha que ns queremos recuperar os termos do vocabulrio que contenha pelo menos dois destes trs bigramas. Um nico exame no endereamento (bem como no Captulo 1) vamos enumerar todos os termos, no exemplo da Figura 3.7 teramos enumerar aboard, boardroom e border. Esta aplicao simples da varredura linear da interseco de endereamento imediatamente revela a carncia de simplesmente exigir correspondncia de termos do vocabulrio para conter um nmero fixo de k-grams da consulta q: termos como boardroom, uma correo "implausvel" de bord, get enumerated.

Figura 3.7. Correspondncia de pelo menos dois dos trs 2-grams na consulta bord

Conseqentemente, precisamos de mais medidas de diferenas da sobreposio em k-grams entre um termo do vocabulrio e q. A interseco da varredura linear pode ser adaptada quando a medida de sobreposio o coeficiente de Jaccard para medir a sobreposio de dois conjuntos A e B, a ser definido |AB| / |AB|. Consideramos que os dois conjuntos so o conjunto de k-grams na consulta q, e o conjunto de k-grams em um termo de vocabulrio. Como

a leitura prossegue, partimos de um termo do vocabulrio t para o prximo, calculando na mosca o coeficiente de Jaccard entre Q e T. Se o coeficiente for superior a um limiar predefinido, ns adicionamos t para a sada, se no, movemos para o prximo termo do endereamento. Para calcular o coeficiente de Jaccard, temos o conjunto de k-gramas em Q e T. A observao crucial que, para calcular o coeficiente de Jaccard, precisamos apenas o comprimento da string t. Para ver isso, lembre-se o exemplo da Figura 3.7 e considere o ponto em que quando a leitura do endereamento para a consulta q = bord atinge termo t = boardroom, sabemos que dois bigramas so equivalentes. Se os endereamentos armazenados so (prcalculados) o nmero de bigramas em boardroom (ou seja, 8); temos todas as informaes que precisamos para calcular o coeficiente de Jaccard a 2/(8+3-2); o numerador obtido a partir de o nmero de endereamento hits (2, a partir de bo e rd), enquanto o denominador a soma do nmero de bigramas bord e boardroom, menos o nmero de endereamentos hits. 3.3.5 CORREO ORTOGRFICA DE CONTEXTO SENSITIVO

Correo de termo isolado seria um fracasso para corrigir erros tipogrficos, tais como flew form Heathrow, onde todos os trs termos da consulta esto grafados corretamente. Quando uma frase como esta recupera alguns documentos, uma mquina de busca pode oferecer a consulta corrigida flew from Heathrow. A maneira mais simples de fazer isso enumerar as correes de cada um dos trs termos da consulta (usando os mtodos lidos a Seo 3.3.4), apesar de que cada termo da consulta corretamente soletrado. Para o exemplo flew form Heathrow, ns enumeramos frases como fled form Heathrow e flew fore Heathrow. Para cada frase, como substituta, a mquina de busca executa a consulta e determina o nmero de resultados correspondentes. Esta enumerao pode ser custosa, se encontrarmos muitas correes dos termos individuais, desde que ns pudessemos encontrar um grande nmero de combinaes de alternativas. Vrias heursticas so usadas para minimizar esta lacuna. No exemplo acima, como ns ampliamos as alternativas para flew and form, vamos manter apenas as combinaes mais freqentes na coleta ou nos logs das consultas, que contm consultas anteriores de usurios. Neste exemplo, o biword fled fore provvel que seja rara a comparao com o biword flew from. Ento, temos apenas uma tentativa de ampliar a lista de biwords (como flew from), para correes de Heathrow. Como uma alternativa ao uso das estatsticas biword na coleo, ns podemos usar os logs de consultas emitidas pelos usurios, estes podem, porm, incluir consultas com erros de ortografia. 3.4 CORREO FONTICA Nossa tcnica para a recuperao final tolerante tem a ver com correo fontica: erros que surgem, porque o usurio digita uma consulta que soa como termo alvo. Tais algoritmos so especialmente aplicveis s pesquisas sobre os nomes das pessoas. A principal idia aqui gerar, para cada legislatura, um "hash fontico" para que termos semelhantes tenham um hash de mesmo valor. A idia deve a sua origem aos departamentos de polcia internacional do incio do sculo 20, buscando a correspondncia entre os nomes de criminosos procurados, apesar de o nome ser escrito de forma diferente em pases diferentes. usado principalmente para corrigir erros de ortografia fontica em nomes prprios.

Algoritmos para tal fontica hashing so comumente conhecidas como algoritmos soundex. No entanto, existe um algoritmo soundex original, com vrias variantes, construdo sobre o seguinte esquema: 1. Transforme cada termo a ser indexada na forma reduzida de 4-carter. Construir um ndice invertido a partir dessas formas reduzidas com os termos originais; chamar esse ndice soundex. 2. Faa o mesmo com os termos da consulta. 3. When the query calls for a soundex match, search this soundex index.. As variaes em diferentes algoritmos soundex tm a ver com a converso de termos para as formas 4-carter. Os resultados de uma converso comumente utilizada para cdigos de 4caracteres, fazer com que o primeiro caractere seja uma letra do alfabeto e os outros trs dgitos so nmeros entre 0 e 9. 1. Reter a primeira letra do termo 2. Altere todas as ocorrncias das seguintes letras para '0 '(zero):' A ', E', 'I', 'O', 'U', 'H', 'W', 'Y'. 3. Mudar as letras para os dgitos como se segue B, F, P, V para 1. C, G, J, K, Q, S, X, Z para 2. D,T para 3. L para 4. M, N para 5. R para 6. 4. Repetidamente remover uma sada de cada par de dgitos consecutivos idnticos. 5. Remova todos os zeros da string resultante. Pad a string resultante com zeros direita e retornar as quatro primeiras posies, que ser composto por uma letra seguida de trs dgitos Para um exemplo de um mapa soundex, Hermann mapeado para H655. Dada uma consulta (digamos Herman), vamos calcular o seu cdigo soundex e depois recuperar todos os termos do vocabulrio correspondentes a este cdigo soundex do ndice soundex, antes de executar a consulta resultante sobre o ndice padro invertido. Este algoritmo baseia-se em algumas observaes: (1) vogais so vistas como intercambiveis, para transcrever nomes; (2) consoantes com sons semelhantes (por exemplo, D e T) so colocados em classes de equivalncia. Isto leva a nomes relacionados muitas vezes com os mesmos cdigos soundex.

Você também pode gostar