Sloučení binárních stromů dle nejlepší shody — rodokmeny v PostgreSQL rubrika: Databáze: SQL
Ahoj
Mám (zatím) dva datasety rodokmenů, potřebuji je sloučit. Jsou to koně aby to bylo pochopitelné.
Tři údaje + dva předci… Každý kůň má matku a otce (a sám je kůň…):
Jméno, rok narození, stát narození, (id otce), (id matky)
Bylo by fajn, kdyby se od roku 1800 vše dobře vedlo, ale fakt je, že v databázi nalézám i rok 0, 1, 2, 77, 190, 1000, často 1700 (UNIX 0 :-)), pak 1800, pak to občas dává smysl… no nevadí, na základě data narození potomků se dají blbosti nahradit NULL…
ale odráží to stav v jakém jsou ostatní údaje, stojí to za prd. Překlepy, ok.. i to se dá.. duplicity.. hmmm i to jde…
Otázka zní, jak připravit nějaký fuzzy ukazatel, který, pokud to je možné, vyhodnotí shodu mezi (dvěma) záznamy z datasetu tak, aby to bylo možno předložit uživateli pro odfajfkování…
Zatím jeden dataset má ~340k záznamů, druhý ~103k záznamů, takže plný kartézský součin je prostě mimo…
Takže následně otázka zní, jak připravit fuzzy match efektivně?
Chtěl bych zůstat v SQL nebo PL/pgSQL. Každá rada dobrá. Zatím mám kaskádu UPDATE dotazů, které jsou postupně obecnější. Je to celkem efektivní, ale myslím, že to půjde i lépe
Díky Pavel
No na překlepy by se dal asi použít Levenshtein - https://www.postgresql.org/docs/9.6/static/fuzzystrmatch.html.
Až by byli srovnané jména, tak bych podle nich začal rovnat datumy, kde jsou špatně. No a pochopitelně jet ve směru od potomků k rodičům. Potom bych každému dopočítanému údaji přiřadil pravděpodobnost, zda je správně. A podle ní se rozhodoval. A dělal bych postupně narovnání po generacích, sice to bude opruz, ale...
Jen tak od boku asi víc nedám.
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře