Mejora de un índice mediante analizadores y términos con tokens

Completado

Búsqueda de Azure AI está configurado de forma predeterminada para analizar texto e identificar tokens que serán útiles en el índice. Los tokens adecuados garantizan que los usuarios puedan encontrar los documentos que necesitan rápidamente. En la mayoría de los casos, la configuración predeterminada genera un índice óptimo. Sin embargo, cuando tenga campos inusuales o únicos, es posible que desee configurar exactamente cómo se analiza el texto.

Aquí aprenderá a definir un analizador personalizado para controlar cómo se divide el contenido de un campo en tokens para su inclusión en el índice.

Cuando Búsqueda de Azure AI indexa el contenido, recupera texto. Para crear un índice útil, con términos que ayudan a los usuarios a localizar documentos, ese texto necesita procesamiento. Por ejemplo:

  • El texto debe dividirse en palabras, a menudo mediante el uso de espacios en blanco y caracteres de puntuación como delimitadores.
  • Las palabras irrelevantes, como "el" y "eso", deben quitarse porque los usuarios no las buscan.
  • Las palabras deben reducirse a su raíz. Por ejemplo, los tiempos verbales en pasado, como "corrió", deben reemplazarse por palabras en presente, como "corre".

En Búsqueda de Azure AI, este tipo de procesamiento se realiza mediante analizadores. Si no especifica un analizador para un campo, se usa el analizador de Lucene predeterminado. El analizador de Lucene predeterminado es una buena opción para la mayoría de los campos, ya que puede procesar muchos lenguajes y devolver tokens útiles para el índice.

Como alternativa, especifique uno de los analizadores integrados en Búsqueda de Azure AI. Los analizadores integrados son de dos tipos:

  • Analizadores de idiomas. Si necesita funcionalidades avanzadas para lenguajes específicos, como la lematización, la descomposición de palabras y el reconocimiento de entidades, use un analizador de lenguaje integrado. Microsoft proporciona 50 analizadores para distintos idiomas.
  • Analizadores especializados. Estos analizadores son independientes del idioma y se usan para campos especializados, como códigos postales o identificadores de producto. Por ejemplo, puede usar PatternAnalyzer y especificar una expresión regular para que coincida con separadores de token.

¿Qué es un analizador personalizado?

Los analizadores integrados proporcionan muchas opciones, pero a veces necesita un analizador con un comportamiento inusual para un campo. En estos casos, puede crear un analizador personalizado.

Un analizador personalizado consta de:

  • Filtros de caracteres. Estos filtros procesan una cadena antes de que llegue al tokenizador.
  • Tokenizadores. Estos componentes dividen el texto en tokens que se van a agregar al índice.
  • Filtros de token. Por último, los filtros de token modifican los tokens emitidos por el tokenizador.

Veamos estos objetos con más detalle.

Filtros de caracteres

Es posible que algunas operaciones deban completarse en el texto antes de dividirlas en tokens. Los filtros de caracteres habilitan estas operaciones. Hay tres filtros de caracteres que puede usar:

  • html_strip. Este filtro quita construcciones HTML, como etiquetas y atributos.
  • mapping. Este filtro permite especificar asignaciones que reemplazan una cadena por otra. Por ejemplo, podría especificar una asignación que reemplace TX por Texas.
  • pattern_replace. Este filtro permite especificar una expresión regular que identifique patrones en el texto de entrada y cómo se debe reemplazar el texto coincidente.

Tokenizer

El tokenizador es el componente que divide el texto en los tokens que se almacenarán en el índice. Los tokenizadores también reducen las palabras a sus raíces. A menudo, un token es una sola palabra, pero es posible que quiera crear tokens inusuales como:

  • Una dirección postal completa.
  • Una dirección URL o dirección de correo electrónico completa.
  • Palabras basadas en la gramática de un idioma específico.

Hay 13 tokenizadores diferentes entre los que elegir. Estos tokenizadores incluyen:

  • classic. Este tokenizador procesa el texto basándose en la gramática de las lenguas europeas.
  • palabra clave. Este tokenizador emite toda la entrada como un único token. Use este tokenizador para campos que siempre se deben indexar como un valor.
  • lowercase. Este tokenizador divide el texto en no-letras y luego modifica los tokens resultantes a todo minúsculas.
  • microsoft_language_tokenizer. Este tokenizador divide el texto en función de la gramática del idioma que especifique.
  • pattern. Este tokenizador divide los textos allí donde coincide con una expresión regular que especifique.
  • whitespace. Este tokenizador divide el texto dondequiera que haya espacio en blanco.

Nota:

Para obtener una lista completa de los tokenizadores, consulte Incorporación de analizadores personalizados a campos de cadena en un índice de Búsqueda de Azure AI en la sección Más información que hay a continuación.

Filtros de token

Una vez que el tokenizador ha dividido el texto entrante en tokens, es posible que desee realizar algún procesamiento adicional, como quitar palabras irrelevantes o recortar marcas de puntuación. Puede ejecutar este procesamiento especificando un filtro de token. Hay cuarenta filtros de token diferentes disponibles, entre los que se incluyen:

  • Filtros específicos del idioma, como arabic_normalization. Estos filtros aplican reglas gramaticales específicas del idioma para asegurarse de que las formas de palabras se quitan y se reemplazan por raíces.
  • apostrophe. Este filtro quita cualquier apóstrofo de un token y cualquier carácter después del apóstrofo.
  • classic. Este filtro quita los puntos y posesivos en inglés de los acrónimos.
  • keep. Este filtro quita cualquier token que no incluya una o varias palabras de una lista que especifique.
  • extraída. Este filtro quita cualquier token que sea mayor que el mínimo especificado o más corto que el máximo especificado.
  • trim. Este filtro quita cualquier espacio en blanco inicial y final de los tokens.

Nota:

Para obtener una lista completa de filtros de token, consulte Incorporación de analizadores personalizados a campos de cadena en índices de Búsqueda de Azure AI en la sección Más información que hay a continuación.

Creación de un analizador personalizado

Para crear un analizador personalizado, especifíquelo al definir el índice. Debe hacerlo con código JSON: no hay ninguna manera de especificar un índice personalizado en Azure Portal. Use la sección analyzers del índice en tiempo de diseño. Solo puede incluir un tokenizador, pero uno o varios filtros de caracteres y uno o varios filtros de token. Use un nombre único para el analizador y establezca la propiedad @odata.type en Microsoft.Azure.Search.CustomAnalyzer.

En este ejemplo, un filtro de caracteres quita el formato HTML, un tokenizador divide el texto según la gramática islandesa y un filtro de token quita apóstrofos:

"analyzers":(optional)[
   {
      "name":"ContosoAnalyzer",
      "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
      "charFilters":[
         "WebContentRemover"
      ],
      "tokenizer":"IcelandicTokenizer",
      "tokenFilters":[
         "ApostropheFilter"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"WebContentRemover",
      "@odata.type":"#html_strip"
   }
],
"tokenizers":(optional)[
   {
      "name":"IcelandicTokenizer",
      "@odata.type":"#microsoft_language_tokenizer",
      "language":"icelandic",
      "isSearchTokenizer":false,
   }
],
"tokenFilters":(optional)[
   {
      "name":"ApostropheFilter",
      "@odata.type":"#apostrophe"
   }
]

Prueba de un analizador personalizado

Una vez que haya definido el analizador personalizado como parte del índice, puede usar la función Analizar texto de la API REST para enviar texto de prueba y asegurarse de que el analizador devuelve tokens correctamente. Use cualquier herramienta de pruebas REST para formular estas solicitudes, como la popular aplicación Postman.

Las solicitudes REST de prueba deben tener este aspecto:

POST https://<search service name>.search.windows.net/indexes/<index name>/analyze?api-version=<api-version>
   Content-Type: application/json
   api-key: <api key>

En esta solicitud:

  • Reemplace <search service name> por el nombre del recurso de Búsqueda de Azure AI.
  • Reemplace <index name> por el nombre del índice que incluye el analizador personalizado.
  • Reemplace <api-version> por el número de versión de la API REST.
  • Reemplace <api-key> por la clave de acceso del recurso de Búsqueda de Azure AI. Puede obtener las credenciales desde Azure Portal.

La solicitud también debe incluir un cuerpo JSON como este:

{
  "text": "Test text to analyze.",
  "analyzer": "<analyzer name>"
}

Reemplace <analyzer name> por el nombre que especificó al definir el analizador personalizado. Asegúrese de probar con muchos valores text diferentes hasta que esté seguro de que el analizador personalizado se comporta según lo esperado.

Uso de un analizador personalizado para un campo

Una vez que haya definido y probado un analizador personalizado, puede configurar el índice para usarlo. Puede especificar un analizador para cada campo del índice.

Puede usar el campo analyzer cuando desee usar el mismo analizador para la indexación y la búsqueda:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": "ContosoAnalyzer",
   "indexAnalyzer": null,
   "searchAnalyzer": null
 },

También es posible usar un analizador diferente al indexar el campo y al buscar en él. Use esta configuración si necesita un conjunto diferente de pasos de procesamiento al indexar un campo a al analizar una consulta:

"fields": [
 {
   "name": "IcelandicDescription",
   "type": "Edm.String",
   "retrievable": true,
   "searchable": true,
   "analyzer": null,
   "indexAnalyzer": "ContosoIndexAnalyzer",
   "searchAnalyzer": "ContosoSearchAnalyzer"
 },

Saber más

Incorporación de analizadores personalizados a campos de cadena en un índice de Búsqueda de Azure AI