Jak porównać męskie i żeńskie nazwiska odmienione przez rodzaje?

0

Witam.
Mam takie zadanie w MSSQL:
Ze zbioru z nazwiskami chcę wyszukać osoby spokrewnione, z tym samym nazwiskiem. Ale mam problem gdy obie osoby są odmiennej płci, np.: "Andrzejewski" i "Andrzejewska". W jaki sposób, choćby przybliżony, mogę porównać oba te nazwiska by stwierdzić, że jest to samo?

Pozdrawiam i z góry dziękuję

1

Trudny temat bo co będzie jak będzie Andrzejewska-Kowalska? Możesz spróbować napisać odpowiedniego regexpa ale ogólnie temat nie jest prosty.

1

To zadanie do pracy czy jako nauka w szkole?
Jak nauka w szkole to można uprościć chyba do odmiany i/a Wtedy wyszukujesz sobie "podstawę" nazwiska poprzez sprawdzenie czy na końcu jest i/a i jeśli tak odcinasz wyraz przy użyciusubstring żeby dostać podstawę i z like wyszukujesz inne nazwiska z taką podstawą i literami i/a na końcu.
Ale jak to zadanie typu analiza danych w pracy to przed Tobą mnóstwo przypadków do rozpatrzenia.

1

Program mógłby odmienić odmienić nazwisko do tego samego rodzaju np. Kowalska-> Kowalski
Albo szuka po fragmencie który jest nie odmienny
I coś mi świta ze używałem zasobów z Korpusu Jezyka Polskiego w tym celu

0

Jak to do pracy to ja bym szukał w tą stronę: https://learn.microsoft.com/en-us/sql/relational-databases/search/full-text-search?view=sql-server-ver16 . Jak do nauki to ja bym zastosował uproszczenie @jurek1980

0

@Salesianus:
To do pracy.
Temat chyba rozwiązany. Napiszę bo innym może się przydać.
Za pomocą tego załatwiam zarówno sprawę końcówek męskich i żeńskich, jak również nazwisk dwuczłonowych.
Porównując dwa nazwiska najpierw określam, które z nich jest płci męskiej (akurat argument "płeć' w tabeli mam). W 99,9% przypadków płeć męska będzie miała nazwisko jednoczłonowe. Następnie obcinam pierwszą i dwie ostatnie (dla pewności) litery i zastępuję je "%". Obcinając pierwszą załatwiam sprawę nazwiska dwuczłonowego, a obcinając dwie ostatnie niweluję różnicę płci. Dalej, porównuję oba nazwiska.
Sprawdziłem. Na razie nie widzę nieścisłości. A nawet jeżeli już jakaś wyjdzie, to jest do odsiania ręcznie (problem marginalny).

Bardzo dziękuję za odzew.
Pozdrawiam ;)

3

Procent na końcu nie jest dobry to już chociaż daj podkreślenie.
Dla Nowak wykryje Ci np Nowakowski.
Dla Kawlaczyk wykryje Ci np Kowalczuk.

3

Warto podejść iteracyjnie. Bierzesz najpierw jeden zestaw nazwisk, np Kowalski i Kowalska. Robisz if - jeśli nazwisko męskie kończy się na ski, a damskie na ska, to to jest to samo. Potem robisz drugi krok, i bierzesz kolejny zestaw nazwisk i zastanawiasz się jakimi regułami je porównać.

5

Panie @Riddle, odmiana przez rodzaje to nie deklinacja

1

Dodam tylko, że ustawiania pokrewieństwa na podstawie nazwiska to totalnie poroniony pomysł bo może być zwykła zbieżność nazwisk bez pokrewieństwa ... np trenuję w Warszawie na uliczy Nowogrodzkiej i jeden z chłopaków nazywa się Jarosław Kaczyński ... nasz klub jest dosłowie 200-300m od siedziby pisu ale o żadnym pokrewieństwie mowy nie ma.

0

@woolfik: Doprecyzuję. Do tych celów mi wystarczy. Mam bazę klientów mieszkających pod jednym adresem. I ten adres jest też adresem naszego pracownika, który ich obsługuje. Zdarza się, że pracownik wpisując dane klienta, podaje swój adres i np. nr telefonu by wszelka korespondencja spływała do niego a nie do klienta. Gdy już to zrobi, to ma możliwość robienia różnych wałków na koncie klienta bez jego wiedzy.
Więc, jeżeli ustalę że osoby mieszkające pod tym samym adresem co pracownik, mają takie samo nazwisko, z dużą dozą prawdopodobieństwa mogę stwierdzić, że są spokrewnione.

0

@Salesianus ja w takim wypadku podszedłbym inaczej do tematu. Masz adresy i telefony pracowników więc od razu na operacji Insert/update założyłbym (jeśli to DML to triggera, jeśli execute jakiegoś obiektu np procedury/funkcji/pakietu to wewnątrz tego obiektu) czujkę, która wprowadzany adres/telefon porówna z tym z bazy pracowników. W przypadku tych samych adresów od razu jakiś alert aby sprawdzić pracownika bez potrzeby weryfikowania nazwisk ale jak tam uważasz.

1
Salesianus napisał(a):

@Salesianus:
To do pracy.
Temat chyba rozwiązany. Napiszę bo innym może się przydać.

Tylko to rozwiązanie partyzanckie robione na kolanie i nawet nie wiesz, czy jest dobre, bo to może się okazać dopiero po miesiącu albo roku, jak np. się okaże, że to naiwne rozwiązanie nie wykryło jakiegoś edge case'u i komuś wywala błąd.

Ludzie mają różnorodne nazwiska (poza tym skąd założenie, że będzie to polskie nazwisko? A nawet polskie mogą być jakieś nietypowe). Więc fajnie, za jakiś czas jakiś klient będzie miał błąd, bo komputer błędnie wykryje jego nazwisko.

Salesianus napisał(a):

@woolfik: Doprecyzuję. Do tych celów mi wystarczy. Mam bazę klientów mieszkających pod jednym adresem. I ten adres jest też adresem naszego pracownika, który ich obsługuje. Zdarza się, że pracownik wpisując dane klienta, podaje swój adres i np. nr telefonu by wszelka korespondencja spływała do niego a nie do klienta. Gdy już to zrobi, to ma możliwość robienia różnych wałków na koncie klienta bez jego wiedzy.

Brzmi jak problem XY. Twoim głębszym problemem jest brak zaufania / wiarygodności pracowników (ew. chęć kontroli pracowników, nie wnikam już, czy słuszna czy nie).

1 użytkowników online, w tym zalogowanych: 0, gości: 1