konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Jakub Suchocki:
Adam Michalski:
Jakub L.:
Dawno temu coś takiego robiłem i zmieniłem pracę, więc nie podam ci gotowego rozwiązania.
Napisałem to sam, perlowy skrypt który brał adres wpisany strumieniem świadomości, czyli ulica 1/2a albo ulica 1m2a albo ulica 1 m.2a albo jeszcze inne cuda jakie przyszły do głowy osobie wpisującej lub dostarczającej dane i wyłapywał z tego numer klatki i domu.

Dokładnie, coś takiego da się zrobić. Zajmowałem się podobnymi problemami i uzyskanie algorytmu działającego w 95% przypadków jest możliwe. Algorytm nie był trywialny, ale nie był też jakiś bardzo skomplikowany. Grunt to usiąść i napisać odpowiedni algorytm. A nie szukać narzędzi i firm trzecich...

Również coś takiego robiłem i jezeli chcesz jakiś przykład to zapraszm na prv.

skoro angażujemy do tego skomplikowane algorytmy, sieci neuronowe itp. to skąd ci się wzięło te 30 min?

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Przemysław R.:
Jakub Suchocki:
Adam Michalski:
Jakub L.:
Dawno temu coś takiego robiłem i zmieniłem pracę, więc nie podam ci gotowego rozwiązania.
Napisałem to sam, perlowy skrypt który brał adres wpisany strumieniem świadomości, czyli ulica 1/2a albo ulica 1m2a albo ulica 1 m.2a albo jeszcze inne cuda jakie przyszły do głowy osobie wpisującej lub dostarczającej dane i wyłapywał z tego numer klatki i domu.

Dokładnie, coś takiego da się zrobić. Zajmowałem się podobnymi problemami i uzyskanie algorytmu działającego w 95% przypadków jest możliwe. Algorytm nie był trywialny, ale nie był też jakiś bardzo skomplikowany. Grunt to usiąść i napisać odpowiedni algorytm. A nie szukać narzędzi i firm trzecich...

Również coś takiego robiłem i jezeli chcesz jakiś przykład to zapraszm na prv.

skoro angażujemy do tego skomplikowane algorytmy, sieci neuronowe itp. to skąd ci się wzięło te 30 min?

A ja o sieciach neurownowych nic nie wspominałem jezeli w danych nie ma duzego bałąganu czyli zachowana jest jakaś kolejnosć to raczej nie bedzie z tym problemu. Przy wiekszym bałąganie wystarczyło by pewnie
REGEXP_INSTR, REGEXP_SUBSTR, and REGEXP_LIKE Condition. No 30 minut to moze przegiełem ale zlecenie takiego czegoś firmie zewnetrznej to raczej nie jest dobry pomysł
Piotr Głudkowski

Piotr Głudkowski Rzucam się na
wszystko to, co jest
ciekawe i wymaga
rusze...

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Ok, to rozbij regexpem taki adres: Skwer Bohaterów 1945 10

Liczba na końcu nazwy miejsca (ulicy/placu/skweru), wchodząca w skład tej nazwy, jest ewidentnym killerem większości algorytmów opartych na regexpach.

Osobiście wyłożyłem się właśnie na takich adresach dość boleśnie.

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Mój algorytm obsługiwał takie przypadki, no i dodatkowo tak jak powiedzieliśmy, te algorytmy nie są proste (choć ja sieci neuronowych nie używałem). No i nie obsługiwał 100% przypadków, ale 95%, co dawało zadowalającą ilość w tamtym przypadku.

Zresztą tutaj masz liczbę po liczbie i jedna jest większa od 1000, więc widać że należy do nazwy. Masz w Polsce ulice, które mają gdzieś numer >1000? :)

Nadal uważam, że można coś takiego napisać samemu, a nie występować do firmy trzeciej, bo niby skąd taka firma weźmie algorytm, który będzie działał w 100% przypadków? :) A w ogóle taki istnieje? Bo wątpię...Adam Michalski edytował(a) ten post dnia 13.01.11 o godzinie 15:20
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Jeśli firma posiada np. 4 miliony klientów i musi spełniać wymagania ISO czy SOX to zapewne zleci takie zadanie profesjonalnej firmie zajmującej się Data Quality, która z kolei użyje swoich profesjonalnych narzędzi typu QualityStage aby się z tym problemem uporać. Będzie się to opłacać, ponieważ lepiej zapłacić nawet 100K za porządną robotę, niż ryzykować proces obsługi reklamacji 1000 klientów z nieprawidłowymi adresami.

A na niektóre adresy nie ma regexpa:

Majdan Ćmiński Pierwszy(PRZYS.) 20"A" Majdan Ćmiński Pierwszy(PRZYS.) 22-430 Rudni K Krasnegostawu

;D

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:
Mój algorytm obsługiwał takie przypadki, no i dodatkowo tak jak powiedzieliśmy, te algorytmy nie są proste (choć ja sieci neuronowych nie używałem). No i nie obsługiwał 100% przypadków, ale 95%, co dawało zadowalającą ilość w tamtym przypadku.

Zresztą tutaj masz liczbę po liczbie i jedna jest większa od 1000, więc widać że należy do nazwy. Masz w Polsce ulice, które mają gdzieś numer >1000? :)

Nadal uważam, że można coś takiego napisać samemu, a nie występować do firmy trzeciej, bo niby skąd taka firma weźmie algorytm, który będzie działał w 100% przypadków? :) A w ogóle taki istnieje? Bo wątpię...

Dodatkowo takie dziwactwa jak "3maja", "Bohaterów 1945" itp. można potraktować jako wyjatek i to pewnie bedzie te 5 % o których piszesz. Bądz też sprawdzać ile wystepuje znaków od 0...9 w danym wierszu. Jeżeli dane są trzymane w jednej kolumnie to nigdy nie uzyskamy 100 procentowego rozwiazania.Jakub Suchocki edytował(a) ten post dnia 13.01.11 o godzinie 15:49

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Łukasz Schabek:
Jeśli firma posiada np. 4 miliony klientów i musi spełniać wymagania ISO czy SOX to zapewne zleci takie zadanie profesjonalnej firmie zajmującej się Data Quality

A co taka super-hiper-bajer-full profesjonalna firma "Data Quality" może zrobić poza wspomnianym algorytmem? Zatrudni 1000 małpek do przeglądania wszystkich rekordów w bazie i ręcznego rozdzielania danych? Też użyją algorytmu.

To nie jest żadna wiedza tajemna :) Taki algorytm jest w stanie napisać myślący programista znający się na algorytmice. Jeśli dodatkowo zna się na algorytmach probabilistycznych i sieciach neuronowych, to może to zrobić bardzo dobrze.
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:

A co taka super-hiper-bajer-full profesjonalna firma "Data Quality" może zrobić poza wspomnianym algorytmem? Zatrudni 1000 małpek do przeglądania wszystkich rekordów w bazie i ręcznego rozdzielania danych? Też użyją algorytmu.

Taka firma będzie posiadać niezbędne doświadczenie i odpowiednich ludzi oraz sprawdzone narzędzia (+ ewentualne środki na pokrycie kar umownych ;)
To nie jest żadna wiedza tajemna :) Taki algorytm jest w stanie napisać myślący programista znający się na algorytmice. Jeśli dodatkowo zna się na algorytmach probabilistycznych i sieciach neuronowych, to może to zrobić bardzo dobrze.

Nie, to nie jest wiedza tajemna, lecz oprócz wiedzy liczy się też doświadczenie, a także warsztat który posiadasz oraz narzędzia którymi dysponujesz.

Ten "Algorytm" o którym piszesz może być dobry dla Ciebie i Twoich potrzeb pod które został wymyślony. Nie koniecznie musi sprawdzać się gdzie indziej.

Poza tym, jeśli obsługuje 95% przypadków, to mając 4mln adresów, zostanie Ci 200 tys. nieobsłużonych adresów. Co z nimi zrobisz? Posadzisz 1000 małpek?Łukasz Schabek edytował(a) ten post dnia 13.01.11 o godzinie 17:16

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Łukasz Schabek:
Adam Michalski:

A co taka super-hiper-bajer-full profesjonalna firma "Data Quality" może zrobić poza wspomnianym algorytmem? Zatrudni 1000 małpek do przeglądania wszystkich rekordów w bazie i ręcznego rozdzielania danych? Też użyją algorytmu.

Taka firma będzie posiadać niezbędne doświadczenie i odpowiednich ludzi oraz sprawdzone narzędzia (+ ewentualne środki na pokrycie kar umownych ;)

Tak, to takie typowo biznesowe podejście. Tak samo firma może posiadać niezbędne doświadczenie jak i dobry freelancer algorytmik (nie mówię o sobie w tym momencie - ja nie oceniam siebie i swoich umiejętności). Z tego co piszesz tylko to ostatnie - środki na pokrycie kar umownych - mnie przekonuje.
O czym my tu piszemy? O prostej, obiektywnie, transformacji ETL. To nie jest jakiś złożony ciąg technologiczny ani hurtownia danych na 20 klastrów, tylko zwykły algorytm, który ma przetworzyć dane z jednej tabeli :)
To nie jest żadna wiedza tajemna :) Taki algorytm jest w stanie napisać myślący programista znający się na algorytmice. Jeśli dodatkowo zna się na algorytmach probabilistycznych i sieciach neuronowych, to może to zrobić bardzo dobrze.

Nie, to nie jest wiedza tajemna, lecz oprócz wiedzy liczy się też doświadczenie, a także warsztat który posiadasz oraz narzędzia którymi dysponujesz.

Freelancer, czy też mała firma nie może mieć doświadczenia? Musi być koniecznie 3-rd party big super-hiper company?
Ten "Algorytm" o którym piszesz może być dobry dla Ciebie i Twoich potrzeb pod które został wymyślony. Nie koniecznie musi sprawdzać się gdzie indziej.

Poza tym, jeśli obsługuje 95% przypadków, to mając 4mln adresów, zostanie Ci 200 tys. nieobsłużonych adresów. Co z nimi zrobisz? Posadzisz 1000 małpek?

Ponieważ obsługa 95% przypadków była w moim przypadku akceptowalna, dlatego poprzestałem na algorytmie typu split + regex + słowniki + dużo przypadków szczególnych. Gdyby konieczna była obsługa 99% przypadków wsparłbym się sieciami neuronowymi i algorytmami probabilistycznymi.Adam Michalski edytował(a) ten post dnia 13.01.11 o godzinie 18:50
Piotr T.

Piotr T. Spring/Microservices

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Paweł Wtorek:
czesc,
mam w tabeli w jednym polu ulice z numerem domu i lokalu. ktore moze pomoc w wykonaniu tego czy musze sobie sam cos takiego napisac?
>
Wstęp:
Jeśli nie można od przodu to zrób to od tyłu
Każda linia składa się z pewnych tokenów oddzielonych separatorami.
tokeny które cię interesują:
*ostatni token to numer lokalu (musi zawierać cyferki)
*przedostatni token to numer budynku (musi mieć z przodu cyferki)
*reszta to nazwa ulicy

Używasz techniki salami:
w 1 iteracji wyodrębnić tylko numer lokalu
w 2 iteracji wyodrębnić tylko numer budynku

1.szukaniem przypadków granicznych nie musisz się przejmować same wyjdą jeśli w ramach iteracji nie da się nic wyodrębnić, zmodyfikujesz algorytm dla iteracji i tyle .
2.Jest to rozwiązanie półautomatyczne ale część manualna będzie dotyczyła tylko typów ciągów a nie pojedynczych rekordów.

Pzdr

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

No dokładnie. I wyżej wymieniony algorytm da na moje oko daje 90% poprawności. Kilka przypadków szczególnych i dochodzimy do 95%. Ale oczywiście można zapłacić 100k firmie trzeciej :)))))
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:
No dokładnie. I wyżej wymieniony algorytm da na moje oko daje 90% poprawności. Kilka przypadków szczególnych i dochodzimy do 95%. Ale oczywiście można zapłacić 100k firmie trzeciej :)))))

Na oko? Na oko to są tworzone wymagania biznesowe ;)

Ja nigdzie nie twierdzę, że freelancer czy mała firma nie poradzi sobie z takim problemem, lecz pisanie, że jest to kwestia jednego algorytmu czy 30 min. to lekka przesada.

Powiem więcej; każdemu wg potrzeb! Sam jestem zwolennikiem rozwiązań szytych na miarę. I jeśli ktoś jest w stanie zaakceptować 95% zgodności a przy tym rozwiązanie spełnia wymagania, to świetnie, więcej nie trzeba.

Z drugiej strony będą przypadki kiedy to nie wystarczy i będziesz musiał użyć narzędzi typu QualityStage. Wyobrażasz sobie sytuację, w której np. 200 tys. faktur zostało wysłane na błędny adres? Jest to sytuacja nie do zaakceptowania.

Czemu firmy inwestują np. w bazę Oracle a nie zadowalają się np. MySQL? Przecież nie dlatego, że MySQL jest "gorsze" od Oracle, prawda? Po prostu chcą spełnić określone wymagania, jakiś SLA itp. Każdemu wg potrzeb.

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Łukasz Schabek:
Adam Michalski:
No dokładnie. I wyżej wymieniony algorytm da na moje oko daje 90% poprawności. Kilka przypadków szczególnych i dochodzimy do 95%. Ale oczywiście można zapłacić 100k firmie trzeciej :)))))

Na oko? Na oko to są tworzone wymagania biznesowe ;)

Ja nigdzie nie twierdzę, że freelancer czy mała firma nie poradzi sobie z takim problemem, lecz pisanie, że jest to kwestia jednego algorytmu czy 30 min. to lekka przesada.

Ja nie napisałem, że 30 minut wystarczy. Sam pisałem swój algorytm dzień, dwa. Algorytm na sieciach neuronowych pisałbym tydzień.
Z drugiej strony będą przypadki kiedy to nie wystarczy i będziesz musiał użyć narzędzi typu QualityStage.

Ale algorytm dzielenia danych adresowych to problem, do którego zastosowanie narzędzi typu QualityStage przypomina strzelanie do muchy z armaty. :)
Wyobrażasz sobie sytuację, w której np. 200 tys. faktur zostało wysłane na błędny adres? Jest to sytuacja nie do zaakceptowania.

A jak super-hiper-duper firma typu "corporate Quality Stage trata tata" zapewni, że w każdym z 4 milionów adresów podział będzie poprawny? :) Tylko bez biznesowych frazesów, powiedz w jaki sposób chcesz zapewnić 100% skuteczności bez zatrudniania 1000 małpek do sprawdzania każdego rekordu ręcznie.
Czemu firmy inwestują np. w bazę Oracle a nie zadowalają się np. MySQL? Przecież nie dlatego, że MySQL jest "gorsze" od Oracle, prawda? Po prostu chcą spełnić określone wymagania, jakiś SLA itp. Każdemu wg potrzeb.

Kompletnie nietrafione porównanie. MySQL to szybka baza transakcyjna do systemów średniej wielkości, a Oracle to zwierzę do ogromnych hurtowni danych na klastrach. Choć google nie używa Oracla, tylko właśnie MySQLa, a wolumn danych mają ogromny, więc jednak jak ktoś potrafi, to i w MySQLu się da :)
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:

Ja nie napisałem, że 30 minut wystarczy. Sam pisałem swój algorytm dzień, dwa. Algorytm na sieciach neuronowych pisałbym tydzień.

Dla Twoich wymagań, czemu nie, może działać, jednak ktoś może mieć większe wymagania. Rusz wyobraźnią ;)
Ale algorytm dzielenia danych adresowych to problem, do którego zastosowanie narzędzi typu QualityStage przypomina strzelanie do muchy z armaty. :)

Nie, jeśli masz kilka milionów klientów.

A jak super-hiper-duper firma typu "corporate Quality Stage trata tata" zapewni, że w każdym z 4 milionów adresów podział będzie poprawny? :) Tylko bez biznesowych frazesów, powiedz w jaki sposób chcesz zapewnić 100% skuteczności bez zatrudniania 1000 małpek do sprawdzania każdego rekordu ręcznie.

IBM QualityStage to oprogramowanie, nie firma. 99.8% już wystarczy. Widziałem implementację.
Kompletnie nietrafione porównanie. MySQL to szybka baza transakcyjna do systemów średniej wielkości, a Oracle to zwierzę do ogromnych hurtowni danych na klastrach. Choć google nie używa Oracla, tylko właśnie MySQLa, a wolumn danych mają ogromny, więc jednak jak ktoś potrafi, to i w MySQLu się da :)

Jeszcze raz, zrozum, nie chodzi o ilość, chodzi o JAKOŚĆ danych (Data Quality).

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Kiedyś, mając podobny problem, to znaczy "chciałem" wyciągnąć adresy do korespondencji seryjnej dla klientów z przeterminowanymi płatnościami gdzie adres w bazie był zapisany w jednym polu i w losowej dość kolejności, poradziłem sobie następująco:

>select a.customer_id as "NUMER", a.name as "nazwa",
>decode(instr(b.address,chr(13),1,1),0,'',
decode(instr(b.address,chr(13),1,2),0,
substr(b.address,instr(b.address,chr(13),1,1)+2,length(b.address)-instr(b.address,chr(13),1,1)),
substr(b.address,instr(b.address,chr(13),1,1)+2,instr(b.address,chr(13),1,2)-instr(b.address,chr(13),1,1)-2))) as "ulica",
>substr(b.address,8,decode(instr(b.address,chr(13),1,1),0,length(b.address)-7,instr(b.address,chr(13))-8)) as "miasto"
>from customer_info a, customer_info_address b
where a.customer_id=b.customer_id

Zbyt dużo "ręcznych" poprawek nie było.
Może się przyda... :)Maciej B. edytował(a) ten post dnia 13.01.11 o godzinie 22:28

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Łukasz Schabek:
IBM QualityStage to oprogramowanie, nie firma. 99.8% już wystarczy. Widziałem implementację.

Przy 4 mln wciąż wyślesz 8000 faktur w niewłaściwe miejsce. :)
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:

Przy 4 mln wciąż wyślesz 8000 faktur w niewłaściwe miejsce. :)

Pamiętaj że jeszcze mam w zanadrzu 1000 małpek ;)

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Inna wersja tego samego zagadnienia z pierwszym sql-em (tym niżej)pozycjonującym domniemane pozycje miasta, kodu i ulicy, może bardziej elegancki "programistycznie" to:
SELECT
a.nazwa as NAZWA,

TRIM(
DECODE( a.kodpoc, '99-999',
DECODE( a.ulpoz, 0, SUBSTR(a.adres,7), SUBSTR(a.adres,7,a.ulpoz-7)),
DECODE( a.ulpoz, 0, a.adres, SUBSTR(a.adres, 1,a.ulpoz-1))
)
) AS MIASTO,
TRIM( DECODE( a.ulpoz, 0, '', SUBSTR(a.adres,a.ulpoz+2))) AS ULICA,
TRIM(
DECODE( a.kodpoc, '99-999',
SUBSTR(a.adres,1,7),
'XX-XXX'
)
) AS KOD


FROM
(
SELECT
cu.customer_id AS id,
cu.name AS nazwa,
ca.address_id as addr_id,
TRANSLATE( TRIM(ca.address), CONCAT(CHR(13),CHR(10)), ' ') AS adres,
INSTR(TRIM(ca.address),CONCAT(CHR(13),CHR(10))) AS ulpoz,
TRANSLATE( SUBSTR(TRIM(ca.address),1,6), '0123456789', '9999999999' ) AS kodpoc
FROM customer_info cu,
customer_info_address ca
WHERE cu.customer_id = ca.customer_id (+)
AND cu.country_db = 'PL'
) a

Dawał faktycznie trochę inny zestaw danych niż poprzedni :) ale też był do poprawienia ręcznego mało uciążliwy.Maciej B. edytował(a) ten post dnia 13.01.11 o godzinie 22:47
Grzegorz D.

Grzegorz D. PL/SQL Developer

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Adam Michalski:

Kompletnie nietrafione porównanie. MySQL to szybka baza transakcyjna do systemów średniej wielkości, a Oracle to zwierzę do ogromnych hurtowni danych na klastrach. Choć google nie używa Oracla, tylko właśnie MySQLa, a wolumn danych mają ogromny, więc jednak jak ktoś potrafi, to i w MySQLu się da :)

A gugiel nie korzysta przypadkiem z bigtable?

konto usunięte

Temat: rozdzielenie danych adresowych z jednego pola do trzech

Teraz tak, wszystko już mają na bigtable'u. Ale jak zaczynali gmail, to jeszcze chyba był MySQL. Nawet jeśli nie - to Oracla na pewno nie używają ;)

Następna dyskusja:

Procedura przeniesienia baz...




Wyślij zaproszenie do