Szukanie fonetyczne

Wyszukiwanie fonetyczne może być używane do znajdowania podobnych tekstów. To specjalne wyszukiwanie może być pomocne na przykład podczas wyszukiwania partnerów według nazwy. Sprawdzanie duplikatów, które jest oddzielną funkcją, jest od niego niezależne. Sprawdzanie duplikatów może być uzupełnione wyszukiwaniem fonetycznym. Aplikacja Aktualizacja wartości fonetycznych z algorytmami wyszukiwania fonetycznego jest dostępna do integracji wyszukiwania fonetycznego.

Niniejszy dokument opisuje, w jaki sposób można zintegrować wyszukiwanie fonetyczne i jakie środki należy podjąć w przypadku rozszerzeń i konfiguracji.

Grupa docelowa

  • Programiści
  • Konsultanci

Algorytmy wyszukiwania fonetycznego

Strategia wyszukiwania fonetycznego polega na wykorzystaniu wyników badań z zakresu fonetyki i fonologii w celu określenia fonetycznej („tonalnej”) reprezentacji słowa. Aby znaleźć reprezentację fonetyczną, słowa są dzielone na fonemy (predefiniowane znaki, np. cyfry). W tym celu wykorzystywane są różne algorytmy specyficzne dla danego języka.

Następujące algorytmy można dodać do systemu za pomocą aplikacji Algorytmy wyszukiwania fonetycznego:

  • Kölner Phonetik dla języka niemieckiego
  • Soundex dla języka angielskiego

Jeśli aplikacja jest zainstalowana, algorytmy można wybrać w aplikacji Konfiguracja, funkcja główna Podstawowe, funkcja Ogólne, w polu Algorytm wyszukiwania fonetycznego. W przeciwnym razie pole zawiera wpis Brak.

Alternatywnie można użyć własnych algorytmów fonetycznych do wyszukiwania fonetycznego.

Znane ograniczenia algorytmu używanego w odniesieniu do sprawdzania duplikatów

Algorytmy obliczania fonemów mogą identyfikować duplikaty, których użytkownik się nie spodziewa.

Przykład
Wartości fonetyczne (fonetyka kolońska) nazwisk

  • Jaskólska = 48274
  • Jaskulska = 48274

Fonetyczna kontrola duplikatów identyfikuje zatem nazwiska Jaskólska i Jaskulska jako duplikaty.

Uwaga
Jeśli algorytm wyszukiwania fonetycznego nie jest zintegrowany, sprawdzanie duplikatów powinno być skonfigurowane bez wyszukiwania fonetycznego, ponieważ w przeciwnym razie zostaną zwrócone nieoczekiwane wyniki. Wartości wyszukiwania fonetycznego bez odpowiedniego algorytmu są technicznie równoważne zeru (niezdefiniowane).

Rejestrowanie własnego algorytmu fonetycznego

Użytkownik może opracować i zintegrować własny algorytm fonetyczny na potrzeby wyszukiwania. W tym celu dostępny jest następujący Hook:

com.cisag.app.general.hook.log.PhoneticAlgorithmHook

Ten Hook należy do definicji Hook Contract Phonetic algorithm

(com.cisag.app.general.hook.log.PhoneticAlgorithm).

Po zarejestrowaniu nowej implementacji Hook należy utworzyć nowe fonemy (wartości zakodowane fonetycznie) dla wszystkich istniejących instancji podmiotów biznesowych, które mają atrybuty istotne dla wyszukiwania fonetycznego. Proces ten musi zostać przeprowadzony poprzez aktualizację danych (więcej informacji w rozdziale Aplikacja w tle Aktualizacja wartości fonetycznych).

Aby wygenerować wartości fonetyczne, taka aktualizacja danych musi wywołać następującą metodę z odniesieniem do nowego algorytmu:

Method:

com.cisag.app.general.log.PhoneticUpdateLogic.update(String algorithm)

Klasa logiczna:

com.cisag.app.general.log.PhoneticUpdateLogic

Parametr algorithm jest opisem danych nowego algorytmu (więcej informacji można znaleźć w definicji Hook Contract Phonetic algorithm).

Po zarejestrowaniu nowego algorytmu za pośrednictwem Hook i wykonaniu aktualizacji danych, nowy algorytm fonetyczny można wybrać w aplikacji Konfiguracja.

Przykład aktualizacji danych

Przykład aktualizacji danych w celu wygenerowania wartości fonetycznych dla niestandardowego algorytmu fonetycznego:

public class UpdateNewPhoneticAlgorithm extends CisUpdateBatchApplication {

@Override

public short execute() {

PhoneticUpdateLogic updateLogic = PhoneticUpdateLogic.getInstance();

updateLogic.update(„com.cisag.xyz.general: NewPhoneticAlgorithm.lt”);

return CisUpdateApplicationConstants.State.SUCCESS;

}

Uwaga
Aplikacja działająca w tle Aktualizacja wartości fonetycznych rejestruje tylko zmiany danych podczas działania systemu w celu zmiany lub utworzenia dla nich fonemów. Rejestrowane są tylko zmiany atrybutów zarejestrowanych w tym celu.

Jeśli dane, których wartości fonetyczne nie zostały wygenerowane za pomocą aktualizacji danych, znajdują się już w systemie przed aktywacją funkcji fonetycznej, nie są one dostępne dla wyszukiwania fonetycznego. Aplikacja działająca w tle może je wygenerować tylko wtedy, gdy zostały zmienione podczas działania systemu.

Jednostki biznesowe

Wyszukiwania fonetycznego można używać dla następujących jednostek biznesowych:

  • Partner:

com.cisag.app.general.obj.Partner

  • Adresy:

com.cisag.app.general.obj.AddressData

Model danych

Do przechowywania fonemów wymagana jest oddzielna tabela zależna dla każdej jednostki biznesowej, która ma być brana pod uwagę w wyszukiwaniu fonetycznym. Fonemy pasujące do wartości atrybutów są przechowywane w tej tabeli dla wszystkich atrybutów istotnych fonetycznie.

Następujące podmioty gospodarcze mają tabele zależne dla wyszukiwania fonetycznego:

  • Partner:

com.cisag.app.general.obj.Partner

  • Adresy:

com.cisag.app.general.obj.AddressData

Możliwe jest zarejestrowanie dodatkowych atrybutów dla wyszukiwania fonetycznego dla tych jednostek biznesowych.

Zarejestruj atrybut dla wyszukiwania fonetycznego

Atrybuty jednostek biznesowych dla wyszukiwania fonetycznego są rejestrowane poprzez implementację interfejsu Java class com.cisag.app.general.hook.log.PhoneticRegistryHook w definicji Hook Contract Rejestracje (com.cisag.app.general.hook.log.RegistryExtensions).

Po rejestracji za pośrednictwem implementacji Hook, wartości fonetyczne dla zarejestrowanego atrybutu muszą zostać wygenerowane dla wszystkich istniejących instancji danego obiektu biznesowego. W tym celu należy zaimplementować aktualizację danych. Musi ona wywołać następującą metodę, aby wygenerować wartości fonetyczne dla nowo zarejestrowanego atrybutu:

Metoda:

update(Class<? extends CisObject>, String…)

Klasa logiczna:

com.cisag.app.general.log.PhoneticUpdateLogic

Przykład aktualizacji danych

Przykład aktualizacji danych w celu wygenerowania wartości fonetycznych dla nowo zarejestrowanego atrybutu:

public class UpdatePartner extends CisUpdateBatchApplication {

@Override

public short execute() {

PhoneticUpdateLogic updateLogic = PhoneticUpdateLogic.getInstance();

updateLogic.update(Partner.class, new String[] {

„person.middleNames”,

„name” });

return CisUpdateApplicationConstants.State.SUCCESS;

}

Uwaga
Aplikacja działająca w tle Aktualizacja wartości fonetycznych rejestruje tylko zmiany danych podczas działania systemu w celu zmiany lub utworzenia dla nich fonemów. Rejestrowane są tylko zmiany atrybutów zarejestrowanych w tym celu.

Jeśli dane, których wartości fonetyczne nie zostały wygenerowane za pomocą aktualizacji danych, znajdują się już w systemie przed aktywacją funkcji fonetycznej, nie są one dostępne dla wyszukiwania fonetycznego. Aplikacja działająca w tle może je również wygenerować tylko wtedy, gdy zostały zmienione podczas działania systemu.

Modele danych dla osób i organizacji

Osoby i organizacje używają różnych modeli danych. Oznacza to, że bezpośrednie porównanie nie jest możliwe. Jeśli takie porównanie jest wymagane, należy zintegrować indywidualne wyszukiwanie fonetyczne.

Przykład
Należy porównać zawartość następujących pól:

  • Pole „Nazwisko” (typ partnera: osoba)
  • Pole „Nazwa 1” (typ partnera: organizacja)
Instrukcja
  1. Należy rozszerzyć obiekt biznesowy Partner o rozszerzenie:

String normalisedName

  1. Następnie należy zaimplementować Hook aktualizacji u partnera
    • Nazwisko jest zapisywane w polu normalisedName dla osób. W przypadku organizacji zapisywana jest nazwa 1, ale jest ona wolna od popularnych skrótów (np. SA, sp. z o.o., sp.k. itp.).
      Hook Contract:
      com.cisag.app.general.partner.hook.log.Partner
      Interfejs Hook:
      com.cisag.app.general.partner.hook.log.PartnerPrepareUpdateHook
  2. Nowy atrybut normalisedName musi zostać zarejestrowany jako pole fonetyczne:
    • Hook Contract:
      com.cisag.app.general.hook.log.RegistryExtensions
      Interfejs Hook:
      com.cisag.app.general.hook.log.PhoneticRegistryHook
  3. Następnie należy zaimplementować aktualizację danych, aby wypełnić normalisedName i ponownie obliczyć wartości fonetyczne:
    • Wywołanie aktualizacji danych z
      com.cisag.app.general.log.PhoneticUpdateLogic.update(Class<? extends CisObject>, String …)
  4. Można użyć nowego pola do sprawdzania duplikatów w aplikacji Konfiguracja.

Aplikacja w tle Aktualizacja wartości fonetycznych

Aplikacja działająca w tle generuje nowe fonemy (wartości zakodowane fonetycznie) dla instancji jednostek biznesowych, które mają odpowiednie atrybuty do wyszukiwania fonetycznego i zapisuje je w odpowiednich tabelach zależnych.

Ta aplikacja działająca w tle może zostać wykonana jednorazowo lub na stałe:

  • Wykonanie jednorazowe — w przypadku jednorazowego wykonania, wartości fonetyczne są generowane dla wszystkich instancji, które zostały dodane lub których atrybuty zostały zmienione od ostatniego wykonania tej aplikacji w tle.
  • Stałe wykonanie — jeśli aplikacja jest stale aktywna w tle, fonemy nowych instancji są dodawane natychmiast lub generowane i zapisywane bezpośrednio po zmianie atrybutów. Ma to tę zaletę, że wyszukiwanie fonetyczne może być użyte natychmiast dla wszystkich nowych lub zmienionych instancji.

Uwaga
Dane, które zostały utworzone lub zmienione między dwiema wersjami tej aplikacji działającej w tle, można znaleźć za pomocą wyszukiwania fonetycznego dopiero po pomyślnym uruchomieniu tej aplikacji działającej w tle.

Atrybuty fonetyczne w aplikacjach typu lista

W aplikacjach typu Lista można używać zarejestrowanych atrybutów do wyszukiwania dokładnego lub fonetycznego. Aby udostępnić tę funkcję, należy wykonać następujące kroki.

  1. Dodać do wyszukiwania odpowiednią zależność dla wartości fonetycznych.

Przykład
/* wartości fonetyczne dla nazwy partnera*/

LEFT OUTER JOIN com.cisag.app.general.obj.PartnerPhonetic PHONETIC_NAME ON PHONETIC_NAME:guid = PARTNER:guid

Uwaga
Dla każdego atrybutu wymagane jest jedno OUTER JOIN.
  1. Wprowadzić atrybut wirtualny. Logiczny typ danych dla tego atrybutu musi być pochodną logicznego typu danych oryginalnego atrybutu.
Przykład
Na przykład logiczny typ danych „com.cisag.app.crm.cockpit.PartnerNamePhonetic” dziedziczy z logicznego typu danych „com.cisag.app.general.PartnerName”.

Opis danych musi mieć własną implementację wyrażenia filtrującego. Implementacja ta musi być pochodną klasy abstrakcyjnej com.cisag.app.general.cockpit.gui.PhoneticFilterExpressionEditorFactory z odpowiednio zaimplementowanymi metodami.

  1. Zdefiniować cztery podatrybuty dla każdego atrybutu wirtualnego zgodnie z następującą konwencją nazewnictwa:
Nazwa Wyrażenie
algorithm PHONETIC_ALIAS : algorithm
attribute PHONETIC_ALIAS : attribute
phoneticValue phoneticValue
value BO_ALIAS : boAttributeName

Przykład dla Partner:name

Nazwa Wyrażenie
algorithm PHONETIC_NAME : algorithm
attribute PHONETIC_NAME : attribute
phoneticValue PHONETIC_NAME : phoneticValue
value PARTNER : name

Wszystkie atrybuty, w tym atrybut wirtualny, muszą być oznaczone jako filtrowane.

Więcej informacji na temat rozwoju można znaleźć w artykule Ustawienia aplikacji typu Lista.

Instrukcja: Konfiguracja wyszukiwania fonetycznego

Wymagania wstępne

Aby korzystać z wyszukiwania fonetycznego, w systemie musi być zainstalowana aplikacja Algorytmy wyszukiwania fonetycznego. Tylko wtedy można zapisać algorytm wyszukiwania fonetycznego w aplikacji Konfiguracja.

Instrukcje

  1. Pierwszym krokiem jest otworzenie aplikacji Konfiguracja.
  2. W funkcji Podstawowe, podfunkcji Ogólne, w polu Algorytm wyszukiwania fonetycznego, należy wybrać żądany algorytm wyszukiwania fonetycznego. Może się on różnić w zależności od organizacji.
  3. Następnie należy przeprowadzić następującą aktualizację danych w celu zainicjowania wyszukiwania fonetycznego dla atrybutów fonetycznych obiektu biznesowego Partner:
    • Utwórz wartości fonetyczne dla obiektu biznesowego Partner
      com.cisag.app.update.log.UPDADV067209Partner
  4. Następnie należy wykonać aktualizację danych i zainicjować wyszukiwanie fonetyczne dla atrybutów fonetycznych obiektu biznesowego Adresy:
    • Utwórz wartości fonetyczne dla obiektu biznesowego Adres
      (com.cisag.app.update.log.UPDADV067209AddressData)
  5. Należy zdefiniować wymagane kontrole duplikatów w aplikacji Konfiguracja, funkcja Podstawowe, podfunkcja Partner. Więcej informacji na ten temat można znaleźć w następującej dokumentacji: Konfiguracja: Podstawowe, rozdział: Sekcja Duplikaty.
  6. Należy uruchomić aplikację w tle Aktualizacja wartości fonetycznych.

Czy ten artykuł był pomocny?