Büyük/küçük harf duyarsız filtreleme, sınıflama ve sıralama için metin normalleştirme

Azure Yapay Zeka Arama'de, bir normalizer, "filtrelenebilir", "yüzlenebilir" veya "sıralanabilir" olarak işaretlenmiş alanlar üzerinde anahtar sözcük eşleştirme için metni önceden işleyen bir bileşendir. Metin çözümleyicileriyle eşleştirilmiş tam metin "aranabilir" alanların aksine, filtre modelli sıralama işlemleri için oluşturulan içerik analiz veya belirteç oluşturma işlemine tabi tutulmaz. Büyük/küçük harf ve karakter farklılıkları ortaya çıktığında metin analizinin atlanması beklenmeyen sonuçlara neden olabilir; bu nedenle içeriğinizdeki varyasyonları homojen hale getirmek için bir normalleştiriciye ihtiyacınız vardır.

Normalleştirici uygulayarak sonuçları geliştiren basit metin dönüştürmeleri elde edebilirsiniz:

  • Tutarlı büyük/küçük harf (tamamı küçük harf veya büyük harf şeklinde)
  • ö veya ê gibi aksanları ASCII eşdeğer karakterlerine "o" ve "e" olarak normalleştirin
  • Karakterleri, - ve boşluk gibi, kullanıcı tarafından belirtilen bir karakterle eşleyin

Normalleştiricilerin avantajları

Arama dizininden belge aramak ve almak için sorgu girişinin belgenin içeriğiyle eşleşmesi gerekir. Eşleştirme, "arama" çağrısı yaptığınızda olduğu gibi belirteçli içerik üzerinden veya istek bir filtre, model veya orderby işlemiyse belirteçsiz içerik üzerinden yapılır.

Belirteçsiz içerik de analiz edilmediğinden, içerikteki küçük farklılıklar birbirinden farklı değerler olarak değerlendirilir. Aşağıdaki örnekleri göz önünde bulundurun:

  • $filter=City eq 'Las Vegas', yalnızca tam metni "Las Vegas" içeren belgeleri döndürür ve "LAS VEGAS" ile "las vegas" içeren belgeleri hariç tutar. Kullanım senaryosunun büyük/küçük harfe bakılmaksızın tüm belgeleri gerektirdiği durumlarda bu yaklaşım yetersiz olur.

  • search=*&facet=City,count:5, "Las Vegas" ve "LAS VEGAS" değerlerini aynı şehir olmasına rağmen farklı değerler olarak döndürür"las vegas".

  • search=usa&$orderby=City, söz konusu durumdan bağımsız olarak aynı şehirleri birlikte sıralamak olsa bile, şehirlerini sözcük düzeninde "Las Vegas""Seattle""las vegas"döndürür.

Dizin oluşturma ve sorgu yürütme sırasında çağrılan normalleştirici, filtre, model ve sıralama senaryoları için metindeki küçük farkları düzelten hafif dönüştürmeler ekler. Önceki örneklerde "Las Vegas"'nin varyantları, daha tekdüzen sonuçlar elde etmek için seçtiğiniz normalleştiriciye göre (örneğin, tüm metinler küçük harfe dönüştürülür) işlenecektir.

Normalleştirici belirtme

Normalleştiriciler bir dizin tanımında, alan başına, "filtrelenebilir", "sıralanabilir" veya "modellenebilir" özelliklerden en az biri true olarak ayarlanmış metin alanlarına (Edm.String ve Collection(Edm.String)) göre belirtilir. Normalleştiricinin ayarlanması isteğe bağlıdır ve varsayılan olarak null'tır. Özel bir normalleştirici yapılandırmadan önce önceden tanımlanmış normalleştiricileri değerlendirmenizi öneririz.

Normalleştiriciler yalnızca dizine yeni bir alan eklediğinizde belirtilebilir, bu nedenle mümkünse normalleştirme gereksinimlerini önceden değerlendirmeyi deneyin ve dizinleri bırakarak yeniden oluştururken geliştirmenin ilk aşamalarında normalleştiriciler atayın.

  1. Dizinde alan tanımı oluştururken , "normalizer" özelliğini şu değerlerden birine ayarlayın: "küçük harf" gibi önceden tanımlanmış bir normalleştirici veya özel bir normalleştirici (aynı dizin şemasında tanımlanır).

    "fields": [
     {
       "name": "Description",
       "type": "Edm.String",
       "retrievable": true,
       "searchable": true,
       "filterable": true,
       "analyzer": "en.microsoft",
       "normalizer": "lowercase"
       ...
     }
    ]
    
  2. Özel normalleştiriciler önce dizinin "normalleştiriciler" bölümünde tanımlanır ve ardından önceki adımda gösterildiği gibi alan tanımına atanır. Daha fazla bilgi için bkz. Dizin Oluşturma ve ayrıca Özel normalleştiriciler ekleme.

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

Not

Varolan bir alanın normalleştiricisini değiştirmek için dizini tamamen yeniden oluşturun (tek tek alanları yeniden oluşturamazsınız).

Dizinleri yeniden oluşturmanın maliyetli olduğu üretim dizinleri için iyi bir geçici çözüm, eskisiyle aynı ancak yeni normalleştirici ile yeni bir alan oluşturmak ve eskisinin yerine kullanmaktır. Yeni alanı eklemek için Dizini Güncelleştir'i ve doldurmak için mergeOrUpload komutunu kullanın. Daha sonra, planlanan dizin bakımı kapsamında, eski alanları kaldırmak için dizini temizleyebilirsiniz.

Önceden tanımlanmış ve özel normalleştiriciler

Azure Yapay Zeka Arama, yaygın kullanım örnekleri için yerleşik normalleştiriciler ve gerektiğinde özelleştirme özelliği sağlar.

Kategori Açıklama
Önceden tanımlanmış normalleştiriciler Kutudan çıktığı anda sağlanır ve yapılandırmaya gerek kalmadan kullanılabilir.
Özel normalleştiriciler1 Gelişmiş senaryolar için. Karakter ve belirteç filtrelerinden oluşan mevcut öğelerin bir bileşiminin kullanıcı tanımlı yapılandırılmasını gerektirir.

(1) Normalleştiriciler her zaman tek bir belirteç ürettiğinden özel normalleştiriciler belirteç oluşturucuları belirtmez.

Normalleştiriciyi test edin

Normalleştiricinin girişi nasıl işlediğini görmek için Test Çözümleyicisi'ni (REST) kullanabilirsiniz.

Istek

  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"
  }

Yanıt

HTTP/1.1 200 OK

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

Normalleştiriciler referansı

Önceden tanımlanmış normalleştiriciler

Adı Açıklama ve Seçenekler
Standart Metni küçük harflere dönüştürdükten sonra asciifolding işlemi uygular.
küçük harf Karakterleri küçük harfe dönüştürür.
Büyük harf Karakterleri büyük harfe dönüştürür.
asciifolding Temel Latin Unicode bloğunda olmayan karakterleri varsa ASCII eşdeğerine dönüştürür. Örneğin, àa ile değiştirin.
elision Belirteçlerin başından elision kaldırır.

Desteklenen karakter filtreleri

Normalleştiriciler, özel çözümleyici karakter filtrelerinde karşılıklarıyla aynı olan iki karakter filtresini destekler:

Desteklenen belirteç filtreleri

Aşağıdaki liste normalleştiriciler için desteklenen belirteç filtrelerini gösterir ve özel çözümleyicilerde kullanılan genel belirteç filtrelerinin bir alt kümesidir.

Özel normalleştiriciler ekleme

Özel normalleştiriciler dizin şeması içinde tanımlanır. Tanım bir ad, tür, bir veya daha fazla karakter filtresi ve belirteç filtresi içerir. Karakter filtreleri ve belirteç filtreleri, özel bir normalleştiricinin yapı taşlarıdır ve metnin işlenmesinden sorumludur. Bu filtreler soldan sağa uygulanır.

token_filter_name_1, belirteç filtresinin adıdır ve char_filter_name_1char_filter_name_2 karakter filtrelerinin adlarıdır (geçerli değerler için aşağıdaki desteklenen belirteç filtreleri ve desteklenen karakter filtreleritablolarına bakın).

"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",
      ...
   }
]

Özel normalleştiriciler dizin oluşturma sırasında veya daha sonra mevcut bir dizin güncelleştirilerek eklenebilir. Var olan bir dizine özel normalleştirici eklemek için Güncelleştirme Dizini'nde "allowIndexDowntime" bayrağının belirtilmesi gerekir ve dizin birkaç saniye boyunca kullanılamaz duruma gelir.

Özel normalleştirici örneği

Aşağıdaki örnekte, karşılık gelen karakter filtreleri ve belirteç filtreleri ile özel bir normalleştirici tanımı gösterilmektedir. Karakter filtreleri ve belirteç filtreleri için özel seçenekler, adlandırılmış yapılar olarak ayrı ayrı belirtilir ve aşağıda gösterildiği gibi normalleştirici tanımında başvurulur.

  • Dizin tanımının "normalleştiriciler" bölümünde "my_custom_normalizer" adlı özel bir normalleştirici tanımlanır.

  • Normalleştirici iki karakter filtresi ve üç belirteç filtresinden oluşur: elision, küçük harf ve özelleştirilmiş asciifolding filtresi "my_asciifolding".

  • İlk karakter filtresi "map_dash" tüm tireleri alt çizgilerle değiştirirken, ikincisi "remove_whitespace" tüm boşlukları kaldırır.

  {
     "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
        }
     ]
  }

Ayrıca bkz.