1 Themenübersicht
Mithilfe einer phonetischen Suche können ähnlich lautende Texte gefunden werden. Diese spezielle Suche kann beispielsweise bei der Suche nach Partnern über dessen Namen hilfreich sein. Davon unabhängig ist die Dublettenprüfung, die eine eigenständige Funktion ist. Die Dublettenprüfung kann mit einer phonetischen Suche ergänzt werden. Für das Einbinden einer phonetischen Suche steht die App „Algorithmen für die phonetische Suche“ mit Algorithmen für die phonetische Suche zur Verfügung, die Sie im Supportcenter finden.
In diesem Dokument wird beschrieben, wie eine phonetische Suche eingebunden werden kann und welche Maßnahmen Sie für Erweiterungen und Anpassungen treffen müssen.
2 Zielgruppe
- Entwickler
- Berater
3 Algorithmen für phonetische Suchen
Die Strategie bei der phonetischen Suche besteht darin, dass Erkenntnisse aus Phonetik und Phonologie herangezogen werden, um eine phonetische („klangliche“) Repräsentation eines Wortes zu ermitteln. Um eine phonetische Repräsentation zu finden, werden die Wörter in Phoneme (vordefinierte Zeichen, z. B. Ziffern) zerlegt. Zu diesem Zweck werden unterschiedliche sprachspezifische Algorithmen verwendet.
Folgende Algorithmen können dem System per App „Algorithmen für die phonetische Suche“ hinzugefügt werden:
- „Kölner Phonetik“ für die Sprache Deutsch
- „Soundex“ für die Sprache Englisch
Ist die App installiert, dann können die Algorithmen in der Anwendung „Customizing“, Hauptfunktion „Basis“, Funktion „Allgemein“ im Feld „Algorithmus für phonetische Suche“ ausgewählt werden. Ansonsten steht im Feld der Eintrag „Keine“.
Alternativ besteht die Möglichkeit, eigene phonetische Algorithmen für das phonetische Suchen heranzuziehen.
3.1 Bekannte Restriktionen des verwendeten Algorithmus in Bezug auf die Dublettenprüfung
Die Algorithmen zur Berechnung der Phoneme können Dubletten ausweisen, die der Benutzer nicht erwartet.
Beispiel:
Phonetische Werte (Kölner Phonetik) der Namen
Lutz = 58
Lösch = 58 und
Himerich = 0674
Hinrich = 0674
Eine phonetische Dublettenprüfung weist folglich die Namen „Lutz“ und „Lösch“ als Dubletten aus.
Hinweis:
Ist kein Algorithmus für die phonetische Suche eingebunden, dann sollte die Dublettenprüfung ohne phonetische Suche eingerichtet werden, da anderenfalls unerwartete Ergebnisse geliefert werden. Die Werte für die phonetische Suche ohne entsprechenden Algorithmus sind technisch einer Null gleichzusetzen (undefiniert).
3.2 Eigenen phonetischen Algorithmus registrieren
Sie können einen eigenen phonetischen Algorithmus für die Suchen entwickeln und einbinden. Zu diesem Zweck steht folgender Hook bereit:
Hook
com.cisag.app.general.hook.log.PhoneticAlgorithmHook
Dieser Hook gehört zur Hook-Contract-Definition „Phonetischer Algorithmus“ (com.cisag.app.general.hook.log.PhoneticAlgorithm).
Nach der Registrierung einer neuen Hook-Implementierung müssen bei allen bereits existierenden Instanzen der Business Entitys, die für das phonetische Suchen relevante Attribute besitzen, neue Phoneme (phonetisch kodierte Werte) erzeugt werden. Dieser Vorgang muss über eine Datenaktualisierung erfolgen (siehe dazu „Referenzhandbuch: Hintergrund-Anwendungen“).
Für die Erzeugung der phonetischen Werte muss eine solche Datenaktualisierung Folgendes mit dem Verweis auf den neuen Algorithmus aufrufen:
Methode:
com.cisag.app.general.log.PhoneticUpdateLogic.update(String algorithm)
Logik-Klasse:
com.cisag.app.general.log.PhoneticUpdateLogic
Der Parameter algorithm ist die Data-Description des neuen Algorithmus (siehe Kommentare in der Hook-Contract-Definition „Phonetischer Algorithmus“).
Nach der Registrierung eines neuen Algorithmus über den Hook und der Ausführung der Datenaktualisierung ist der neue phonetische Algorithmus in der Anwendung „Customizing“ auswählbar.
Beispiel einer Datenaktualisierung
Beispiel einer Datenaktualisierung zur Erzeugung der phonetischen Werte für einen eigenen phonetischen Algorithmus:
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;
}
Hinweis:
Mit der Hintergrund-Anwendung „Phonetische Werte aktualisieren“ werden ausschließlich Datenänderungen während des Systembetriebs protokolliert, um für diese die Phoneme zu ändern oder zu erzeugen. Protokolliert werden nur die Änderungen für die dafür registrierten Attribute.
Sind vor Aktivierung der Phonetik-Funktion bereits Daten im System, deren phonetischen Werte nicht mithilfe einer Datenaktualisierung erzeugt wurden, dann stehen sie der phonetischen Suche nicht zur Verfügung. Die Hintergrund-Anwendung kann diese auch nur dann erzeugen, wenn sie während des Systembetriebs geändert wurden.
4 Business Entitys
Sie können die phonetische Suche für folgendes Business Entitys verwenden:
- Partner
com.cisag.app.general.obj.Partner
- Adressen
com.cisag.app.general.obj.AddressData
5 Datenmodell
Für die Ablage der Phoneme wird für jedes Business Entity, welches beim phonetischen Suchen berücksichtigt werden soll, eine eigene Dependent-Tabelle benötigt. Darin werden zu allen phonetisch relevanten Attributen die zu den Attributwerten passenden Phoneme gespeichert.
Folgende Business Entitys haben Dependent-Tabellen für die phonetische Suche:
- Partner
com.cisag.app.general.obj.Partner
- Adressen
com.cisag.app.general.obj.AddressData
Für diese Business Entitys ist möglich, weitere Attribute für die phonetische Suche zu registrieren.
5.1 Attribut für phonetische Suche registrieren
Die Registrierung von Business-Entity-Attributen für die phonetische Suche erfolgt über die Implementierung der Schnittstelle „com.cisag.app.general.hook.log.PhoneticRegistryHook“ der Hook-Contract-Definition „Registrierungen“ (com.cisag.app.general.hook.log.RegistryExtensions).
Nach der Registrierung über die Hook-Implementierung müssen bei allen bereits existierenden Instanzen des betroffenen Business Objects die phonetischen Werte für das registrierte Attribut erzeugt werden. Zu diesem Zweck muss eine Datenaktualisierung implementiert werden. Diese muss zur Erzeugung der phonetischen Werte für ein neu registriertes Attribut folgende Methode aufrufen:
Methode:
update(Class<? extends CisObject>, String…)
Logik-Klasse:
com.cisag.app.general.log.PhoneticUpdateLogic
Beispiel einer Datenaktualisierung
Beispiel einer Datenaktualisierung zur Erzeugung der phonetischen Werte für ein neu registriertes Attribut:
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;
}
Hinweis:
Mit der Hintergrund-Anwendung „Phonetische Werte aktualisieren“ werden ausschließlich Datenänderungen während des Systembetriebs protokolliert, um für diese die Phoneme zu ändern oder zu erzeugen. Protokolliert werden nur die Änderungen für die dafür registrierten Attribute.
Sind vor Aktivierung der Phonetik-Funktion bereits Daten im System, deren phonetischen Werte nicht mithilfe einer Datenaktualisierung erzeugt wurden, dann stehen sie der phonetischen Suche nicht zur Verfügung. Die Hintergrund-Anwendung kann diese auch nur dann erzeugen, wenn sie während des Systembetriebs geändert wurden.
5.2 Datenmodelle zu Personen und Organisationen
Personen und Organisationen verwenden unterschiedliche Datenmodelle. Dadurch ist ein direkter Vergleich nicht möglich. Falls ein solcher Vergleich gewünscht wird, muss eine individuelle phonetische Suche eingebunden werden.
Beispiel
Die Inhalte folgender Felder sollen verglichen werden:
- Feld „Nachname“ (Partnertyp: Person)
- Feld „Name 1“ (Partnertyp: Organisation)
Vorgehensweise:
- Business Object „Partner“ mit einer Extension erweitern:
String „normalizedName“ - Update-Hook beim Partner implementieren:
In „normalizedName“ wird bei Personen der Nachname gespeichert. Bei Organisationen wird der Name 1 gespeichert, der allerdings von gängigen Kürzeln (z. B. „AG“, „GmbH“, „KG“ etc.) befreit wird.
Hook-Contract:
cisag.app.general.partner.hook.log.Partner
Hook-Interface:
com.cisag.app.general.partner.hook.log.PartnerPrepareUpdateHook - Neues Attribut „normalizedName“ muss als phonetisches Feld registriert werden:
Hook-Contract:
cisag.app.general.hook.log.RegistryExtensions
Hook-Interface:
com.cisag.app.general.hook.hook.log.PhoneticRegistryHook - Datenaktualisierung implementieren, um „normalizedName“ zu füllen und die phonetischen Werte neu zu berechnen:
Datenaktualisierungsaufruf mit
cisag.app.general.log.PhoneticUpdateLogic.update(Class<? extends CisObject>, String …) - In der Anwendung „Customizing“ das neue Feld bei der Dublettenprüfung verwenden.
6 Hintergrund-Anwendung „Phonetische Werte aktualisieren“
Dieses Steuerelement enthält Metadaten und darf nicht gelöscht werden.Die Hintergrund-Anwendung erzeugt für die Instanzen der Business Entitys, die relevante Attribute für die phonetische Suche besitzen, neue Phoneme (phonetisch kodierte Werte) und speichert diese in den entsprechenden Dependent-Tabellen.
Diese Hintergrund-Anwendung kann entweder einmalig oder permanent ausgeführt werden:
- Einmalige Ausführung
Bei einmaliger Ausführung werden die phonetischen Werte für alle Instanzen erzeugt, die seit der letzten Ausführung dieser Hintergrund-Anwendung hinzugefügt oder deren Attribute geändert wurden.
- Permanente Ausführung
Wenn die Anwendung permanent im Hintergrund aktiv ist, dann werden die Phoneme neuer Instanzen sofort hinzugefügt oder direkt nach Attribut-Änderung erzeugt und gespeichert. Das hat den Vorteil, dass bei allen neuen oder geänderten Instanzen die phonetische Suche sofort verwendet werden kann.
Hinweis:
Die Daten, die zwischen zwei Ausführungen dieser Hintergrund-Anwendung erzeugt oder geändert wurden, können mithilfe der phonetischen Suche nur nach der erfolgreichen Ausführung dieser Hintergrund-Anwendung gefunden werden.
7 Phonetische Attribute in Cockpit-Anwendungen
In den Cockpit-Anwendungen können Sie mithilfe registrierter Attribute wahlweise exakt oder phonetisch suchen. Folgende Schritte müssen unternommen werden, damit diese Funktionalität zur Verfügung steht.
- Fügen Sie den entsprechenden Dependent für die phonetischen Werte zur Suche hinzu.
Beispiel:
/* phonetic values for partner name*/
LEFT OUTER JOIN com.cisag.app.general.obj.PartnerPhonetic PHONETIC_NAME ON PHONETIC_NAME:guid = PARTNER:guid
Hinweis:
Pro Attribut ist jeweils ein OUTER JOIN notwendig.
- Erfassen Sie ein virtuelles Attribut. Der logische Datentyp für dieses Attribut muss eine Ableitung des logischen Datentypen von dem Ursprungsattribut sein.
Beispiel:
Beispielsweise erbt der logische Datentyp „com.cisag.app.crm.cockpit.PartnerNamePhonetic“ von dem logischen Datentypen „com.cisag.app.general.PartnerName“.
Die Data-Description muss eine eigene Implementierung des Filter-Expressions besitzen. Diese Implementierung muss eine Ableitung der abstrakten Klasse „com.cisag.app.general.cockpit.gui.PhoneticFilterExpressionEditorFactory“ mit entsprechend implementierten Methoden sein.
- Legen Sie pro virtuellem Attribut vier Sub-Attribute gemäß folgender Namenskonvention fest:
Name | Ausdruck |
algorithm | PHONETIC_ALIAS : algorithm |
attribute | PHONETIC_ALIAS : attribute |
phoneticValue | phoneticValue |
value | BO_ALIAS : boAttributeName |
Beispiel für Partner:name
Name | Ausdruck |
algorithm | PHONETIC_NAME : algorithm |
attribute | PHONETIC_NAME : attribute |
phoneticValue | PHONETIC_NAME : phoneticValue |
value | PARTNER : name |
Alle Attribute inklusive des virtuellen Attributes müssen als filterbar gekennzeichnet sein.
Weitere Informationen zur Entwicklung finden Sie in der Dokumentation „Cockpits“.
8 Vorgehensweise: Phonetische Suche einrichten
Voraussetzungen
Für die Verwendung der phonetischen Suche muss die App „Algorithmen für phonetische Suche“ auf Ihrem System installiert sein. Erst dann kann in der Anwendung „Customizing“ ein Algorithmus für die phonetische Suche hinterlegt werden.
Anleitung
- Öffnen Sie die Anwendung „Customizing“.
- Wählen Sie in der Funktion „Basis“, Unterfunktion „Allgemein“ im Feld „Algorithmus für phonetische Suche“ den gewünschten Algorithmus für die phonetische Suche. Dieser kann je Organisation variieren.
- Führen Sie folgende Datenaktualisierung aus und initialisieren damit die phonetische Suche für die phonetischen Attribute des Business Objects „Partner“:
Create phonetic values for Partner business object
(com.cisag.app.update.log.UPDADV067209Partner)
- Führen Sie folgende Datenaktualisierung aus und initialisieren damit die phonetische Suche für die phonetischen Attribute des Business Objects „Adressen“:
Create phonetic values for Address Data business object
(com.cisag.app.update.log.UPDADV067209AddressData)
- Legen Sie in der Anwendung „Customizing“, Funktion „Basis“, Unterfunktion „Partner“ die gewünschten Dublettenprüfungen fest. Weitere Informationen dazu finden Sie in folgender Dokumentation: Customizing: Basis, Kapitel: Rubrik „Dubletten“
- Führen Sie die Hintergrund-Anwendung „Phonetische Werte aktualisieren“ aus. Siehe bei Bedarf dieses Kapitel: Hintergrund-Anwendung „Phonetische Werte aktualisieren“