Szöveg normalizálása kis- és nagybetűk megkülönböztetése nélküli szűréshez, metszethez és rendezéshez.

Megjegyzés

Azure AI Keresés a Azure portálon, REST API-kon és Azure SDK-k keresztül érhető el. Emellett a Foundry IQ-t is támogatja, amely a vállalati tartalmakat újrafelhasználható, engedélytudatos tudásbázisokká alakítja át az Microsoft Foundry portálon található ügynökök számára.

A Azure AI Keresés normalizáló olyan összetevő, amely előre feldolgozza a kulcsszóegyezés szövegét a "szűrhető", "facetable" vagy "rendezhető" mezőkre. A szövegelemzőkkel párosított teljes szöveges "kereshető" mezőkkel ellentétben a szűrési szempontú rendezési műveletekhez létrehozott tartalom nem végez elemzést vagy tokenizálást. A szövegelemzés kihagyása váratlan eredményeket eredményezhet, ha a burkolat és a karakterkülönbségek megjelennek, ezért van szükség normalizálóra a tartalom variációinak homogenizálásához.

Normalizáló alkalmazásával olyan világos szövegátalakításokat érhet el, amelyek javítják az eredményeket:

  • Konzisztens betűhasználat (például kisbetűs vagy nagybetűs)
  • A mellékjelek és ékezetek, mint az ö vagy ê, ASCII-ekvivalens "o" és "e" karakterekre történő normalizálása.
  • Karakterek leképezése egy - felhasználó által megadott karakterre

A normalizálók előnyei

A dokumentumok keresési indexből való kereséséhez és lekéréséhez a lekérdezés bemenetének és a dokumentum tartalmának kell megfelelnie. Az egyeztetés vagy jogkivonatos tartalomon keresztül történik, ahogyan a "keresés" meghívásakor, vagy nem jogkivonatos tartalomon keresztül, ha a kérés szűrő, aspektus vagy rendezési művelet.

Mivel a nem jogkivonatos tartalmakat sem elemzi a rendszer, a rendszer a tartalom kis eltéréseit eltérő értékként értékeli ki. Vegye figyelembe a következő példákat:

  • $filter=City eq 'Las Vegas' csak a pontos szöveget "Las Vegas" tartalmazó dokumentumokat adja vissza, és kizárja azokat a dokumentumokat "LAS VEGAS""las vegas", amelyek nem megfelelőek, ha a használati esethez az összes dokumentumra szükség van a burkolattól függetlenül.

  • search=*&facet=City,count:5 vissza fog térni "Las Vegas", "LAS VEGAS" és "las vegas" eltérő értékekként annak ellenére, hogy ugyanaz a város.

  • search=usa&$orderby=City lexikális sorrendben adja vissza a városokat: "Las Vegas", "Seattle", "las vegas", még akkor is, ha a szándék az, hogy ugyanazon városokat az esettől függetlenül együtt rendezze.

Az indexelés és a lekérdezés végrehajtása során meghívott normalizáló olyan világos átalakításokat ad hozzá, amelyek kisimítják a szöveg kisebb eltéréseit a szűrési, aspektus- és rendezési forgatókönyvek esetében. Az előző példákban a variánsok "Las Vegas" a kiválasztott normalizáló szerint lesznek feldolgozva (például az összes szöveg kisbetűs) az egységesebb eredmények érdekében.

Normalizer megadása

A normalizálók egy indexdefinícióban mezőnként vannak megadva olyan szövegmezőkön (Edm.String és Collection(Edm.String)), amelyeknél a "szűrhető", "rendezhető" vagy "facetable" tulajdonságok közül legalább egy igaz. A normalizáló beállítása nem kötelező, és alapértelmezés szerint null értékű. Javasoljuk, hogy egyéni konfigurálás előtt értékelje ki az előre definiált normalizálókat.

A normalizálók csak akkor adhatók meg, ha új mezőt ad hozzá az indexhez, ezért ha lehetséges, próbálja meg előre felmérni a normalizálási igényeket, és normalizálókat rendeljen a fejlesztés kezdeti fázisaihoz az indexek elvetésekor és újraértékelésekor.

  1. Amikor meződefiníciót hoz létre az indexben, állítsa a "normalizer" tulajdonságot az alábbi értékek egyikére: egy előre definiált normalizálóra , például "kisbetűre" vagy egyéni normalizálóra (ugyanabban az indexsémában definiálva).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. Az egyéni normalizálók először az index "normalizers" szakaszában vannak definiálva, majd hozzá vannak rendelve a meződefinícióhoz az előző lépésben látható módon. További információ: Index létrehozása és egyéni normalizálók hozzáadása.

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "analyzer": null,
       "normalizer": "my_custom_normalizer"
     },
    

Megjegyzés

Egy meglévő mező normalizálójának módosításához az indexet teljesen újra kell építeni (nem lehet újraépíteni az egyes mezőket).

A termelési indexek esetében, ahol az indexek újraépítése nagy költséggel jár, jó megoldás, ha létrehoz egy új mezőt, amely azonos a régivel, de az új normalizálót használva, és a régi helyett ezt használja. Az Index frissítése funkcióval beépítheti az új mezőt, és a mergeOrUpload segítségével feltöltheti azt. Később a tervezett indexkarbantartás részeként törölheti az indexet az elavult mezők eltávolításához.

Előre definiált és egyéni normalizálók

Azure AI Keresés beépített normalizálókat biztosít a gyakori használati esetekhez, valamint igény szerint testre szabható.

Kategória Leírás
Előre definiált normalizálók Alapértelmezettként elérhető, és konfiguráció nélkül is használható.
Egyéni normalizálók1 Speciális forgatókönyvek esetén. A meglévő elemek kombinációjának felhasználó által definiált konfigurációját igényli, amely karakter- és token-szűrőkből áll.

(1) Az egyéni normalizálók nem adnak meg tokenizálókat, mivel a normalizálók mindig egyetlen tokent hoznak létre.

Normalizáló tesztelése

A Test Analyzer (REST) segítségével megtekintheti, hogyan dolgoz fel egy normalizáló egy bemenetet.

Kérés

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

  {
     "normalizer":"asciifolding",
     "text": "Vis-à-vis means Opposite"
  }

Válasz

HTTP/1.1 200 OK

{
  "tokens": [
    {
      "token": "Vis-a-vis means Opposite",
      "startOffset": 0,
      "endOffset": 24,
      "position": 0
    }
  ]
}

Normalizálók hivatkozása

Előre definiált normalizálók

Név Leírás és beállítások
szabvány A szöveget kisbetűssé alakítja, amit az asciifolding eljárás követ.
kisbetűs Kisbetűssé alakítja a karaktereket.
nagybetűs A karaktereket nagybetűssé alakítja.
asciifolding Az egyszerű latin Unicode-blokkban nem szereplő karaktereket ASCII-ekvivalenssé alakítja át, ha létezik ilyen. Például a à-t váltsuk a-re.
elízió Eltávolítja az elíziót az elemek elejéről.

Támogatott karakterszűrők

A normalizálók két olyan karakterszűrőt támogatnak, amelyek megegyeznek az egyéni elemző karakterszűrőkben lévő megfelelőkkel:

Támogatott token szűrők

Az alábbi listában a normalizálók által támogatott jogkivonatszűrők láthatók, és az egyéni elemzőkben használt teljes jogkivonatszűrők részhalmaza.

Egyéni normalizálók hozzáadása

Az egyéni normalizálók az indexsémán belül vannak definiálva. A definíció tartalmaz egy nevet, egy típust, egy vagy több karakterszűrőt és tokenszűrőt. A karakterszűrők és a token szűrők az egyéni normalizáló alapelemei, és felelősek a szöveg feldolgozásáért. Ezek a szűrők balról jobbra vannak alkalmazva.

A token_filter_name_1 jogkivonat-szűrő neve, és char_filter_name_1char_filter_name_2 a karakterszűrők neve (az érvényes értékekért lásd alább a támogatott jogkivonatszűrőket és a támogatott karakterszűrőkettartalmazó táblázatokat).

"normalizers":(optional)[
   {
      "name":"name of normalizer",
      "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
      "charFilters":[
         "char_filter_name_1",
         "char_filter_name_2"
      ],
      "tokenFilters":[
         "token_filter_name_1"
      ]
   }
],
"charFilters":(optional)[
   {
      "name":"char_filter_name_1",
      "@odata.type":"#char_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
],
"tokenFilters":(optional)[
   {
      "name":"token_filter_name_1",
      "@odata.type":"#token_filter_type",
      "option1": "value1",
      "option2": "value2",
      ...
   }
]

Az egyéni normalizálók hozzáadhatók az index létrehozásakor vagy később egy meglévő frissítésével. Ha egyéni normalizálót ad hozzá egy meglévő indexhez, az "allowIndexDowntime" jelzőt meg kell adni az Update Indexben , és az index néhány másodpercig elérhetetlenné válik.

Egyéni normalizáló példa

Az alábbi példa egy egyéni normalizáló definíciót mutat be a megfelelő karakterszűrőkkel és token szűrőkkel. A karakterszűrők és a jogkivonatszűrők egyéni beállításai nevesített szerkezetként vannak megadva, majd a normalizáló definícióban az alább látható módon hivatkoznak rá.

  • A "my_custom_normalizer" nevű egyéni normalizáló az indexdefiníció "normalizers" szakaszában van definiálva.

  • A normalizáló két karakterszűrőből és három token szűrőből áll: elision, kisbetűs átalakító és testre szabott asciifolding szűrő, "my_asciifolding".

  • Az első karakterszűrő "map_dash" aláhúzásjelekre cseréli az összes kötőjelet, míg a második "remove_whitespace" eltávolítja az összes szóközt.

  {
     "name":"myindex",
     "fields":[
        {
           "name":"id",
           "type":"Edm.String",
           "key":true,
           "searchable":false,
        },
        {
           "name":"city",
           "type":"Edm.String",
           "filterable": true,
           "facetable": true,
           "normalizer": "my_custom_normalizer"
        }
     ],
     "normalizers":[
        {
           "name":"my_custom_normalizer",
           "@odata.type":"#Microsoft.Azure.Search.CustomNormalizer",
           "charFilters":[
              "map_dash",
              "remove_whitespace"
           ],
           "tokenFilters":[              
              "my_asciifolding",
              "elision",
              "lowercase",
           ]
        }
     ],
     "charFilters":[
        {
           "name":"map_dash",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["-=>_"]
        },
        {
           "name":"remove_whitespace",
           "@odata.type":"#Microsoft.Azure.Search.MappingCharFilter",
           "mappings":["\\u0020=>"]
        }
     ],
     "tokenFilters":[
        {
           "name":"my_asciifolding",
           "@odata.type":"#Microsoft.Azure.Search.AsciiFoldingTokenFilter",
           "preserveOriginal":true
        }
     ]
  }

Lásd még: