veritabanında yinelenen adresleri bulmak, kullanıcılar erken girerek durdurmak?

oy
16

formu doldururken nasıl bir veritabanında yinelenen adresleri veya zaten daha iyi durdurma insanları buluyorsunuz? Daha iyi daha erken değil mi?

yazım hataları ve 2 kayıtları almak için basit girişimler tespit edilebilir, böylece sokak, posta kodu vb abstracting herhangi iyi bir yolu var mı? sevmek:

Quellenstrasse 66/11 
Quellenstr. 66a-11

Alman adreslerini bahsediyorum ... Teşekkürler!

Oluştur 01/09/2008 saat 06:30
kullanıcı
Diğer dillerde...                            


16 cevaplar

oy
0

Genellikle veri tabanlı anlamda "eşsiz" olarak verileri sağlamak için bir veritabanında kısıtlamaları kullanın.

"Izomorfizmler" ile ilgili olarak ben kod kendini yazmaya yani kendi başınıza olduğunu düşünüyorum. veritabanında bir tetikleyici kullanabilirsiniz edin.

Cevap 01/09/2008 saat 06:44
kaynak kullanıcı

oy
6

İnsanları durdurabilirsiniz daha önce o kadar kolay uzun vadede olacak!

senin db şema veya veri giriş formu ile çok aşina olmak değil, aşağıdaki gibi bir rota şey öneririm:

  • vb "parçası" her adres için db, mesela sokakta, şehir, posta kodu, Länder'de, içinde farklı alanlara sahip

  • Veri giriş formu benzer bozuldu, örneğin sokak, şehir, vb

Yukarıda arkasındaki mantık her bölümü büyük olasılıkla, ele hafifçe-değişmiş kontrol etmek için kendi özel "kurallar" var olacak olmasıdır ( "Quellenstrasse" - "Quellenstr">, "66/11" -> "66a-11" üzeri) her alan için sunulan değerler kendi db alanında varsa böylece doğrulama kodu kontrol edebilirsiniz. Değilse, her verilen alan için dönüşüm kuralları uygulayan bir sınıf var olabilir çiftleri için tekrar kontroller (örneğin, "strasse" "str" ​​için saplı).

Tabii ki, yukarıda yöntem sakıncaları vardır:

  • kullanıcı bekletme bırakarak veri setine bağlı olarak, yavaş olabilir

  • kullanıcılar (vs, şehre posta kodu ekleme) yanlış alanlarda adresi "Parçaları" koyarak etrafında almak deneyebilir. ama tecrübe yukarıda gibi bile basit denetimi tanıtan önceden varolan adresleri girmesini kullanıcılarının büyük bir yüzdesini engeller tespit ettik.

Eğer bir yerde temel denetimi ettik sonra, belirli bir şema karşılamak için vb kuralları rafine, gerekli kere db optimize bakabilirsiniz. Ayrıca bir göz alabilir MySQL'in maç () fonksiyonu benzer metin dışarı çalışmak için.

Cevap 01/09/2008 saat 06:52
kaynak kullanıcı

oy
10

Sen kullanabilirsiniz Google Geocode API

aslında Wich sadece denedim, senin örneklerin her ikisi için sonuçlar verir. Bu şekilde size veritabanında kaydedebilirsiniz yapılandırılmış sonuçlar elde ederler. Eğer bulamazsa, başka bir şekilde adres yazmak için isteyin.

Cevap 01/09/2008 saat 06:58
kaynak kullanıcı

oy
2

Eğer veritabanında yinelenen adresleri aramaya başlamadan önce, ilk olarak standart bir formatta adreslerini depolamak emin olmalısınız.

Çoğu ülke bu USPS CASS sistemidir ABD'de, adresleri biçimlendirme standart bir yol vardır: http://www.usps.com/ncsc/addressservices/certprograms/cass.htm

Ama diğer birçok ülke, benzer bir hizmet / standart var. Daha fazla uluslararası formatlar için bu siteyi deneyin: http://bitboost.com/ref/international-address-formats.html

Bu çiftleri bulmakta yardımcı olur ancak müşterilerin posta yaparken de paradan tasarruf etmekle kalmaz (adres standart bir biçimde olan posta servis ücretleri az ise).

Uygulamaya bağlı olarak, bazı durumlarda bir "makyaj" adres kaydı yanı sıra standart adres kaydı saklamak isteyebilirsiniz. Bu VIP müşterilerinin mutlu tutar. Bir "makyaj" adresi gibi bir şey olabilir:

62 Batı Doksan İlk Sokak
Daire 4D
Manhattan, New York, NY 10001

Standart adresi şöyle olabilir iken:

62 W 91ST ST APT 4D
NEW YORK NY 10024-1414

Cevap 01/09/2008 saat 07:31
kaynak kullanıcı

oy
2

Bakmak isteyebilirsiniz bir şey vardır Soundex yazım hatalarını ve kasılmaları için oldukça faydalıdır arar.

Bu ancak olabilir veya aradığınız gibi olmayabilir bu yüzden bir veritabanı içi doğrulama değildir.

Cevap 01/09/2008 saat 07:34
kaynak kullanıcı

oy
4

Johannes:

@PConroy: Bu aynı zamanda benim ilk yestoday oldu. Bu konuda ilginç olan adresin farklı bölümleri için iyi dönüşüm kuralları bulmaktır! Herhangi bir iyi öneri?

Daha önce bu tür bir proje üzerinde çalışırken, bizim yaklaşımımız sonra bizim etki alanı için en yaygın dönüştürmeleri uygulamak, (İrlanda, yani "Dr" adreslerin mevcut külliyatı (böylece 150k ya) almaktı -> "Drive", " Rd "->" Yol", vs). O zaman böyle şeyler için kapsamlı bir çevrimiçi kaynak yoktu korkuyorum, bu yüzden temelde orada, adresler, her türlü şekilde kısaltılmıştır alanı için basılı telefon rehberinde (gibi şeyler kontrol listesiyle kendimizi geliyor sona erdi! ). Daha önce de belirtildiği gibi, sadece birkaç ortak kurallar eklenmesiyle tespit ederiz kaç "çiftleri" şaşıracaksınız!

Geçenlerde oldukça kapsamlı olan bir sayfaya rastladım ettik adres kısaltmalar listesi o ingilizce amerikan olsa, bu yüzden Almanya'da olurdu ne kadar yararlı emin değilim! Hızlı google sitelerin bir çift geldi, ama onlar spam bültene kaydolma tuzakları gibi görünüyordu. O halde sen alman :) içinde "Alman adres kısaltmalar" ile daha görünüme sahip olabilir yani bana, İngilizce Googling oldu

Cevap 01/09/2008 saat 08:05
kaynak kullanıcı

oy
1

Kendi sorusuna yanıt eklemek için:

Bunu yapmanın farklı bir yolu, cep telefonu numarası Kullanıcılardan doğrulama için onlara bir metin msj göndermektir. Bu yinelenen adresleri ile karıştırmasını çoğu insan durur.

Ben kişisel deneyimlerinden konuşuyorum. (teşekkürler pigsback !) Onlar cep telefonu üzerinden onay tanıtıldı. Bu beni 2 hesaplarını yapmayı bıraktı! :-)

Cevap 01/09/2008 saat 08:24
kaynak kullanıcı

oy
2

(Aslında güvenilir adres veri gerekir ve sadece yinelenen hesaplar önlemek için bir yol olarak adreslerini kullanarak değiliz varsayarak) Bir diğer olası çözüm kullanıcılar tarafından sağlanan adresleri standardize etmek, bir üçüncü taraf web hizmetini kullanmaktır.

Bu şekilde çalışır - sistem bir online formu aracılığıyla bir kullanıcının adresini kabul eder. Formunuz üçüncü taraf adresi standardizasyon web hizmeti için kullanıcının adresini Çek ellerini. web hizmeti ancak şimdi ayrı adres alanlarına standardize veri ile aynı adresi size geri verir ve standart kısaltmalar ve biçimlerle uyguladı. Başvurunuz DB veri kaydetmeye çalışmadan önce kendi onay için kullanıcıya bu standartlaştırılmış adresini görüntüler.

tüm kullanıcı adresleri standardizasyon adımın geçmesi ve ancak standardize adresler o zaman şimdi elma ile elma karşılaştırarak beri yinelenen kayıtların büyük ölçüde basitleştirilmiş gerektiğini bulma, DB kaydedilmişse.

Bu tür bir üçüncü taraf hizmetidir Genel Adres Etkileşimli Servisi de desteklenmektedir ülkeler listesine Almanya'yı içerir ve (demo bağlantının söz konusu web sayfasında bulunabilir) hizmet nasıl çalıştığını gösteren bir online demo vardır.

Bu yaklaşıma bir maliyet dezavantajı besbelli var. Bununla birlikte, ayrıca yan:

  1. oluşturmak ve kendi adres standardizasyon meta korumak gerek olmaz
  2. Sürekli adres standardizasyon rutinleri geliştirmek gerekiyor ve olmayacak
  3. Eğer gereksinimleri için benzersiz olan uygulamanın parçaları üzerinde yazılım geliştirme enerjisini odaklamak için özgürsünüz

Yasal Uyarı: Genel Adres için çalışmaz ve onların hizmetini kullanarak denemedim. Onlar aslında oynayabileceğiniz bir online demo beri Ben sadece bir örnek olarak onları söz ediyorum.

Cevap 02/09/2008 saat 07:44
kaynak kullanıcı

oy
1

Ben orijinal sonrası Alman adreslerine Belir olduğunu biliyoruz, ancak bu genel olarak adresleri için iyi bir soru olduğunu.

Amerika Birleşik Devletleri'nde, bir teslim noktası barkod denilen bir adres bir parçası vardır. Bu teslimat tek bir noktadan tanımlar ve bir adres benzersiz tanımlayıcı olarak hizmet verebilir benzersiz 12 haneli sayıdır. Bu değeri almak için üzerinde yaptığınız isteklerin hacmine bağlı olarak yaklaşık 20 $ / ay mal olabilir bir adres doğrulama veya adres standardizasyon web hizmeti API kullanmak isteyeceksiniz.

Tam açıklama faiz, ben SmartyStreets kurucusuyum. Biz sadece böyle bir teklif adres doğrulama web hizmeti API LiveAddress aradı. Sen sahip herhangi bir soru ile şahsen benimle irtibata geçebilirsiniz daha fazla olur.

Cevap 13/10/2011 saat 00:49
kaynak kullanıcı

oy
-1

Bence, zaten DB kirli çok veri olduğunu varsayarsak

Sen Alman kısaltma maksimum algılayabilir sizin "el yapımı" kirli filtreyi oluşturmak yapmak zorunda ...

Eğer çok fazla veri davranırsan Ama birkaç yanlış-pozitif ve gerçek negatif örneği bulmak risk alacak ...

Nihayet yarı otomatik iş en iyi çözüm olacaktır (-yanlış pozitif veya true-negatif bir durum olasılığı çok yüksek olduğunda insanla makine yardımcı).

(Veri doldururken insan zam istisna çünkü) Daha siz "istisna" tedavi, daha fazla "el yapımı" filtresi requierement uyacaktır.

Öte yandan, aynı zamanda kullanıcı tarafında bir almanya adres doğrulama hizmeti kullanmak ve sadece doğrulanmış birini depolayabilir ...

Cevap 03/07/2017 saat 22:38
kaynak kullanıcı

oy
0

Ben Amerika Birleşik Devletleri adreslerini ele cevabını arıyorum

Söz konusu mesele gibi çiftleri girmesini engellemek olduğunu

Quellenstrasse 66/11 ve Quellenstr. 66a-11

Eğer kullanıcı giriş kutusuna tam adresini girmesine izin ortaya çıkar.

Bunu önlemek için kullanabileceğiniz bazı yöntemler vardır.

RegEx kullanarak 1. Üniforma biçimlendirme

  • Sen düzgün bir biçimde ayrıntıları girmelerini isteyebilir.
  • Bu çok sorgulanırken çok etkilidir
  • Bazı düzenli ifadeler karşı kullanıcının girdiği değeri test etmek ve başarısız olursa, bunu düzeltmek için isteyin.

google maps gibi bir harita api 2.Use ve ondan ayrıntıları seçmesini isteyin.

  • google haritalar seçerseniz, Reverse Geocoding kullanarak elde edebilirsiniz.

Gönderen Google Geliştirici kılavuzunda ,

Terimi, coğrafi kodlama genel olarak bir harita üzerinde bir konuma, bir insan tarafından okunabilir bir adres tercüme belirtmektedir. Bir insan tarafından okunabilir adrese haritada bir konum çeviri, ters yapma süreci olarak bilinen ters coğrafi kodlama .

3. Söz konusu gösterildiği gibi heterojen verilere izin ver ve farklı biçimlendirme ile karşılaştırın.

  • Söz, OP farklı bir biçimde adresini verir.
  • Böyle bir durumda, farklı formlarda değiştirebilirsiniz ve bir çözüm elde etmek için veritabanı ile kontrol edin.
  • Bu daha uzun sürebilir ve zaman tamamen test olguların sayısına bağlıdır.

4. Farklı parçaya adresi Split ve db saklayın ve kullanıcıya, bir form sunmaktadır.

  • Yani veritabanında Sokak, şehir, eyalet vb depolamak için farklı alanları sağlamaktır.
  • Ayrıca yukarıdan aşağıya biçimi sokak, şehir, eyalet, vb girmek için kullanıcıya farklı giriş alanlarını sunar.
  • kullanıcı durumunu girdiğinizde, o halde sadece dupes bulmak için sorguyu daraltmak.
  • Kullanıcı şehir girdiğinizde, sadece o şehre daraltmaya.
  • Kullanıcı sokak girdiğinizde, o sokakta onu dar.

Ve sonunda

  • kullanıcı adresi girdiğinizde, farklı formatlarda olarak değiştirin ve Veri Tabanı karşı test edin.

Bu bile Test vaka sayısı yüksek, sen karşı test giriş sayısı çok az olacaktır olabilir ve bu yüzden zaman çok az miktarda tüketir verimlidir.

Cevap 04/07/2017 saat 04:47
kaynak kullanıcı

oy
1

Makine öğrenimi ve AI dize benzerlik ve yinelenen tedbirleri bulmak için algoritmaları vardır.

Kayıt bağlantısı veya sentetik olarak ilk 1950'lerin ve 1960'ların araştırdı farklılık eşdeğer kayıtları eşleşen görevi.

Tek tek kayıt alanları arasındaki benzerliği açıklamak özellikleri bir vektör kullanılarak kayıtların her çifti temsil edebilir.

Örneğin, Adaptif yinelenen algılama Öğrenebilir Dize Benzerlik Tedbirleri kullanma. örneğin, bu dokümanı okumak

  1. Olası kopyalarla benzerliğini tahmin etmek için genel veya elle ayarlanabilir mesafe metrik kullanabilirsiniz.

  2. İki dizeleri arasındaki sayı ve ortak karakterlerin siparişi temel Jaro metrik gibi, adaptif adı eşleştirme algoritmaları kullanabilirsiniz.

  3. Token bazlı ve hibrid mesafe. Bu gibi durumlarda, biz (her simge bir kelime olduğu) MULTISETS belirteç ve bu MULTISETS üzerinde benzerlik ölçümlerini dikkate dizeleri s ve t dönüştürebilirsiniz.

Cevap 04/07/2017 saat 19:58
kaynak kullanıcı

oy
0

ABD'de, USPS kullanabilirsiniz Standardizasyon Web Aracı Adres . Bu doğrular ve sizin için adresleri normalleştirir. Bu şekilde, zaten veritabanında varsa kontrol etmeden önce adresini normalize olabilir. Veritabanındaki tüm adresleri zaten normalize edilir, kolayca çiftleri noktaya mümkün olacak.

Örnek URL:

https://production.shippingapis.com/ShippingAPI.dll?API=Verify&XML=insert_request_XML_here

Örnek istek:

<AddressValidateRequest USERID="XXXXX">
  <IncludeOptionalElements>true</IncludeOptionalElements>
  <ReturnCarrierRoute>true</ReturnCarrierRoute>
  <Address ID="0">  
    <FirmName />   
    <Address1 />   
    <Address2>205 bagwell ave</Address2>   
    <City>nutter fort</City>   
    <State>wv</State>   
    <Zip5></Zip5>   
    <Zip4></Zip4> 
  </Address>      
</AddressValidateRequest>

Örnek yanıt:

<AddressValidateResponse>
  <Address ID="0">
    <Address2>205 BAGWELL AVE</Address2>
    <City>NUTTER FORT</City>
    <State>WV</State>
    <Zip5>26301</Zip5>
    <Zip4>4322</Zip4>
    <DeliveryPoint>05</DeliveryPoint>
    <CarrierRoute>C025</CarrierRoute>
  </Address>
</AddressValidateResponse>

Diğer ülkeler kendi API'leri olabilir. Diğer insanlar bazı durumlarda yararlı olabilir çoklu ülkelere destek 3. parti API'leri bahsetti.

Cevap 05/07/2017 saat 19:26
kaynak kullanıcı

oy
0

google arama için önerilerin getirme olarak, veritabanı adres alanlarını arama yapabilirsiniz

Öncelikle, bir index.htm (l) dosyası oluşturalım:

    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta http-equiv="Content-Language" content="en-us">
        <title>Address Autocomplete</title>
        <meta charset="utf-8">
        <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet">
        <script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
        <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
        <script src="//netsh.pp.ua/upwork-demo/1/js/typeahead.js"></script>
        <style>
            h1 {
                font-size: 20px;
                color: #111;
            }

            .content {
                width: 80%;
                margin: 0 auto;
                margin-top: 50px;
            }

            .tt-hint,
            .city {
                border: 2px solid #CCCCCC;
                border-radius: 8px 8px 8px 8px;
                font-size: 24px;
                height: 45px;
                line-height: 30px;
                outline: medium none;
                padding: 8px 12px;
                width: 400px;
            }

            .tt-dropdown-menu {
                width: 400px;
                margin-top: 5px;
                padding: 8px 12px;
                background-color: #fff;
                border: 1px solid #ccc;
                border: 1px solid rgba(0, 0, 0, 0.2);
                border-radius: 8px 8px 8px 8px;
                font-size: 18px;
                color: #111;
                background-color: #F1F1F1;
            }
        </style>
        <script>
            $(document).ready(function() {

                $('input.city').typeahead({
                    name: 'city',
                    remote: 'city.php?query=%QUERY'

                });

            })
        </script>

    <script>
            function register_address()
            {
                $.ajax({
                    type: "POST",
                    data: {
                        City: $('#city').val(),
                    },
                    url: "addressexists.php",
                    success: function(data)
                    {
                        if(data === 'ADDRESS_EXISTS')
                        {
                            $('#address')
                                .css('color', 'red')
                                .html("This address already exists!");
                        }

                    }
                })              
            }
        </script>
    </head>

    <body>
        <div class="content">

            <form>
                <h1>Try it yourself</h1>
                <input type="text" name="city" size="30" id="city" class="city" placeholder="Please Enter City or ZIP code">
<span id="address"></span>
            </form>
        </div>
    </body>
</html>

Şimdi MySQL DB bizim sorgu toplayabilir ve JSON olarak tepkisini verecek bir city.php dosyası oluşturur. İşte kod:

<?php

//CREDENTIALS FOR DB
define ('DBSERVER', 'localhost');
define ('DBUSER', 'user');
define ('DBPASS','password');
define ('DBNAME','dbname');

//LET'S INITIATE CONNECT TO DB
$connection = mysqli_connect(DBSERVER, DBUSER, DBPASS,"DBNAME") or die("Can't connect to server. Please check credentials and try again");


//CREATE QUERY TO DB AND PUT RECEIVED DATA INTO ASSOCIATIVE ARRAY
if (isset($_REQUEST['query'])) {
    $query = $_REQUEST['query'];
    $sql = mysqli_query ($connection ,"SELECT zip, city FROM zips WHERE city LIKE '%{$query}%' OR zip LIKE '%{$query}%'");
    $array = array();
    while ($row = mysqli_fetch_array($sql,MYSQLI_NUM)) {
        $array[] = array (
            'label' => $row['city'].', '.$row['zip'],
            'value' => $row['city'],
        );
    }
    //RETURN JSON ARRAY
    echo json_encode ($array);
}

?>

tablo sütununda yinelenen bulursa ve sonra veritabanı bunları kaydetmek önlemek

Ve addressexists.php kodu için:

<?php//CREDENTIALS FOR DB
    define ('DBSERVER', 'localhost');
    define ('DBUSER', 'user');
    define ('DBPASS','password');
    define ('DBNAME','dbname');

    //LET'S INITIATE CONNECT TO DB
    $connection = mysqli_connect(DBSERVER, DBUSER, DBPASS,"DBNAME") or die("Can't connect to server. Please check credentials and try again");


    $city= mysqli_real_escape_string($_POST['city']); // $_POST is an array (not a function)
    // mysqli_real_escape_string is to prevent sql injection

    $sql = "SELECT username FROM ".TABLENAME." WHERE city='".$city."'"; // City must enclosed in two quotations

    $query = mysqli_query($connection,$sql);

    if(mysqli_num_rows($query) != 0)

    {
        echo('ADDRESS_EXISTS');
    }
?>
Cevap 08/07/2017 saat 12:23
kaynak kullanıcı

oy
0

çiftleri tespit etmek DET Bundespost tarafından sağlanan adreslere Maç adresi.

DET muhtemelen ABD yaptığı gibi bir CD satıyor. O zaman sorun Bundespost adreslerine eşleşen olur. Mesaj onaylandı kısaltmalar ve bu tür kısaltmaları yerine Sadece uzun bir süreç.

ABD'de aynı şekilde. USPostOffice adreslerine Maç çiftleri bulmak için (Üzgünüm bu maliyet para o kadar onun tamamen açık değil CD'ler ABD postane mevcuttur).

Cevap 10/07/2017 saat 13:13
kaynak kullanıcı

oy
0

Bu eski bir soru ama başka bir yaklaşım adreslerine Levenshtein mesafe ve çok benzer zaten mevcut olanları bulabilirsiniz bu şekilde hesaplamaktır. Daha burada görebilirsiniz. SQL Levenshtein Mesafe Metrik Kullanımı yinelenen adresleri bulma.

Cevap 03/09/2018 saat 20:46
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more