Adicionar analisadores de idioma a campos de cadeia de caracteres em um índice do Azure AI Search
Um analisador de linguagem é um tipo específico de analisador de texto que realiza análise lexical usando as regras linguísticas do idioma de destino. Cada campo de cadeia de caracteres pesquisável tem uma propriedade de analisador . Se o seu conteúdo consistir em cadeias de caracteres traduzidas, como campos separados para texto em inglês e chinês, você poderá especificar analisadores de idioma em cada campo para acessar os recursos linguísticos avançados desses analisadores.
Quando usar um analisador de linguagem
Você deve considerar um analisador de linguagem quando o conhecimento da estrutura de palavras ou frases agrega valor à análise de texto. Um exemplo comum é a associação de formas verbais irregulares ("trazer" e "trazer") ou substantivos plurais ("ratos" e "rato"). Sem consciência linguística, essas cordas são analisadas apenas em características físicas, o que não consegue captar a conexão. Como grandes pedaços de texto são mais propensos a ter esse conteúdo, os campos que consistem em descrições, revisões ou resumos são bons candidatos para um analisador de linguagem.
Você também deve considerar analisadores de linguagem quando o conteúdo consiste em cadeias de caracteres de linguagem não ocidentais. Enquanto o analisador padrão (Standard Lucene) é agnóstico em relação à linguagem, o conceito de usar espaços e caracteres especiais (hífenes e barras) para separar cadeias de caracteres é mais aplicável às línguas ocidentais do que às não ocidentais.
Por exemplo, em chinês, japonês, coreano (CJK) e outras línguas asiáticas, um espaço não é necessariamente um delimitador de palavras. Considere a seguinte cadeia de caracteres japonesa. Como não tem espaços, um analisador agnóstico de linguagem provavelmente analisaria toda a string como um token, quando na verdade a string é na verdade uma frase.
これは私たちの銀河系の中ではもっとも重く明るいクラスの球状星団です。
(This is the heaviest and brightest group of spherical stars in our galaxy.)
Para o exemplo acima, uma consulta bem-sucedida teria que incluir o token completo ou um token parcial usando um curinga de sufixo, resultando em uma experiência de pesquisa não natural e limitante.
Uma experiência melhor é procurar palavras individuais: 明るい (Bright), 私たちの (Our), 銀河系 (Galaxy). Usar um dos analisadores japoneses disponíveis no Azure AI Search tem mais probabilidade de desbloquear esse comportamento porque esses analisadores estão mais bem equipados para dividir o pedaço de texto em palavras significativas no idioma de destino.
Comparando Lucene e Microsoft Analyzers
O Azure AI Search suporta 35 analisadores de linguagem apoiados pelo Lucene e 50 analisadores de idiomas apoiados pela tecnologia proprietária de processamento de linguagem natural da Microsoft utilizada no Office e no Bing.
Alguns desenvolvedores podem preferir a solução mais familiar, simples e de código aberto do Lucene. Os analisadores de idioma Lucene são mais rápidos, mas os analisadores da Microsoft têm recursos avançados, como lemmatização, decomposição de palavras (em idiomas como alemão, dinamarquês, holandês, sueco, norueguês, estoniano, finlandês, húngaro, eslovaco) e reconhecimento de entidades (URLs, e-mails, datas, números). Se possível, você deve executar comparações dos analisadores Microsoft e Lucene para decidir qual é o melhor ajuste. Você pode usar a API de análise para ver os tokens gerados a partir de um determinado texto usando um analisador específico.
A indexação com analisadores da Microsoft é, em média, duas a três vezes mais lenta do que seus equivalentes Lucene, dependendo do idioma. O desempenho da pesquisa não deve ser significativamente afetado para consultas de tamanho médio.
Analisadores em inglês
O analisador padrão é o Standard Lucene, que funciona bem para o inglês, mas talvez não tão bem quanto o analisador em inglês do Lucene ou o analisador em inglês da Microsoft.
O analisador inglês de Lucene estende o analisador padrão. Ele remove possessivos (trailing 's) das palavras, aplica derivação de acordo com o algoritmo de Porter Stemming e remove palavras paradas em inglês.
O analisador em inglês da Microsoft realiza lemmatização em vez de derivação. Isso significa que ele pode lidar com formas de palavras flexionadas e irregulares muito melhor, o que resulta em resultados de pesquisa mais relevantes.
Como especificar um analisador de idiomas
Defina o analisador durante a criação do índice antes de ser carregado com dados.
Na definição de campo, certifique-se de que o campo é atribuído como "pesquisável" e é do tipo Edm.String.
Defina a propriedade "analyzer" como um dos analisadores de linguagem da lista de analisadores suportados.
A propriedade "analyzer" é a única propriedade que aceitará um analisador de linguagem e é usada para indexação e consultas. Outras propriedades relacionadas ao analisador ("searchAnalyzer" e "indexAnalyzer") não aceitarão um analisador de linguagem.
Os analisadores de linguagem não podem ser personalizados. Se um analisador não estiver atendendo aos seus requisitos, crie um analisador personalizado com o microsoft_language_tokenizer ou microsoft_language_stemming_tokenizer e adicione filtros para processamento pré e pós-tokenização.
O exemplo a seguir ilustra uma especificação do analisador de linguagem em um índice:
{
"name": "hotels-sample-index",
"fields": [
{
"name": "Description",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "en.microsoft",
"indexAnalyzer": null,
"searchAnalyzer": null
},
{
"name": "Description_fr",
"type": "Edm.String",
"retrievable": true,
"searchable": true,
"analyzer": "fr.microsoft",
"indexAnalyzer": null,
"searchAnalyzer": null
},
Para obter mais informações sobre como criar um índice e definir propriedades de campo, consulte Criar índice (REST). Para obter mais informações sobre análise de texto, consulte Analisadores no Azure AI Search.
Analisadores de idiomas suportados
Abaixo está a lista de idiomas suportados, com nomes de analisadores Lucene e Microsoft.
Idioma | Nome do Microsoft Analyzer | Nome do Lucene Analyzer |
---|---|---|
Árabe | ar.microsoft | ar.lucene |
Arménio | hy.lucene | |
Bangla | bn.microsoft | |
Basco | eu.lucene | |
Búlgaro | bg.microsoft | bg.lucene |
Catalão | ca.microsoft | Ca.Lucene |
Chineses (Simplificado) | zh-Hans.microsoft | zh-Hans.lucene |
Chinês (Tradicional) | zh-Hant.microsoft | zh-Hant.lucene |
Croata | hr.microsoft | |
Checo | cs.microsoft | CS.LUCENE |
Dinamarquês | da.microsoft | Da.Lucene |
Neerlandês | nl.microsoft | nl.lucene |
Inglês | pt.microsoft | pt.lucene |
Estónio | et.microsoft | |
Finlandês | fi.microsoft | fi.lucene |
Francês | fr.microsoft | P. Lucene |
Galego | Gl.Lucene | |
Alemão | de.microsoft | de.lucene |
Grego | el.microsoft | El.Lucene |
Guzerate | gu.microsoft | |
Hebraico | he.microsoft | |
Hindi | oi.microsoft | oi.lucene |
Húngaro | hu.microsoft | Hu.Lucene |
Islandês | is.microsoft | |
Indonésio (Bahasa) | id.microsoft | Id.Lucene |
Irlandês | GA.LUCENE | |
Italiano | it.microsoft | it.lucene |
Japonês | ja.microsoft | Ja.Lucene |
Canarês | kn.microsoft | |
Coreano | ko.microsoft | Ko.Lucene |
Letão | lv.microsoft | LV.LUCENE |
Lituano | lt.microsoft | |
Malaiala | ml.microsoft | |
Malaio (Latim) | ms.microsoft | |
Marata | mr.microsoft | |
Norueguês | nb.microsoft | no.lucene |
Persa | FA.LUCENE | |
Polaco | pl.microsoft | pl.lucene |
Português (Brasil) | pt-Br.microsoft | pt-Br.lucene |
Português (Portugal) | pt-Pt.microsoft | pt-Pt.lucene |
Punjabi | pa.microsoft | |
Romeno | ro.microsoft | Ro.Lucene |
Russo | ru.microsoft | ru.lucene |
Sérvio (Cirílico) | sr-cyrillic.microsoft | |
Sérvio (Latim) | sr-latin.microsoft | |
Eslovaco | sk.microsoft | |
Esloveno | sl.microsoft | |
Espanhol | es.microsoft | es.lucene |
Sueco | sv.microsoft | sv.lucene |
Tâmil | ta.microsoft | |
Telugu | te.microsoft | |
Tailandês | th.microsoft | th.lucene |
Turco | tr.microsoft | Tr.Lucene |
Ucraniano | pt.microsoft | |
Urdu | seu.microsoft | |
Vietnamita | vi.microsoft |
Todos os analisadores com nomes anotados com Lucene são alimentados pelos analisadores de linguagem Apache Lucene.