soyagaci-donusturucu

Alt-Üst Soy Bilgisi Sorgulama listenizden interaktif soyağaçları oluşturun

Stars
13

Soyaac Dntrc

E-devlet kaps zerinden oluturulan "Alt-st Soy Bilgisi Sorgulama" listesini interaktif bir soyaacna evirmek zerine gelitirilmi projedir. Projeyi bilgisayarnza indirerek kendi grsellerinizi oluturabilirsiniz.

Projenin altyapsnda Laravel 5.6, soyaacnn grntlenmesinde D3.js kullanlmtr.

Ykleme

  1. PHP 7.1 ve composer gerekmektedir. macOS'ta brew ile ykleyebilirsiniz
  2. Eer PDF'ten dntrecekseniz pdftohtml ve ghostscript uygulamalar gerekmektedir.
    • macOS
      • brew install pdftohtml
      • brew install ghostscript
    • Ubuntu
      • sudo apt-get install poppler-utils
      • sudo apt-get install ghostscript
  3. Projeyi bilgisayarnza indirin git clone https://github.com/EnesCakir/soyagaci-donusturucu.git
  4. Proje klasrnn iine girin cd soyagaci-donusturucu
  5. PHP ktphanelerini ykleyin composer install
  6. .env dosyanz oluturun cp .env.example .env
  7. Eer PDF dntrecekseniz .env dosyanzda pdftohtml konumunu ayarlayn
  8. Uygulama iin gizli anahtar oluturun php artisan key:generate
  9. Uygulamanz ayaa kaldrn php artisan serve
  10. Taraycnza localhost:8000 yazarak uygulamaya eriebilirsiniz

Soy Aac Oluturma Aamalar

"Alt-st Soy Bilgisi Sorgulama" sistemi ilk aldnda sonular PDF olarak oluturuyordu. Bu da ilenmesini zor hale getiriyordu. 14 ubat 2018'teki gncelleme ile sonular HTML olarak vermeye baladlar. Bu da bizim iimizi epey kolaylatrd.

1. Verilerin Okunmas

PDF

ncelikle pdftohtml -noframes -i -c ile PDF'i HTML dosyasna dntryoruz. -noframes argmanyla PDF'in tek sayfa olmasn -c argmanyla ghostscript'i kullanarak yazlarn daha doru poziyonlarda yer almasn salyoruz.

Oluan HTML dosyasndaki gereksiz HTML taglerini PHP'nin strip_tags fonksiyonu ile temizliyoruz. regex kullarak da AIKLAMALAR, LER BAKANLII, NFUS VE VATANDALIK LER GENEL MDRL gibi verimizi kirleten balklar siliyoruz.

Elimizde srasyla aile bireylerinin Sra, Cinsiyet (E|K), Yaknlk Derecesi, AD, SOYAD, BABA ADI, ANA ADI, DOUM YER, l, le, MAHALLE, Birey Sra, Medeni Hali, Durumu, Doum Tarihi, lm Tarihi bilgilerinin satr satr bulunduu bir veri kalyor. Burada tamamen rakamlardan oluan ksm sadece Sra olduu iin bu listeyi sadece rakam bulunan satrlardan blyoruz ve her bir paray bir kii olarak belirliyoruz. Sonra srasyla bu paralardaki bilgileri kullanarak kiileri oluturuyoruz. Buradaki zorluk ise baz alanlar bir satrdan fazla olabiliyor ya da - kullanlarak hi belirtilmemi oluyor. Mesela ismi uzun olan bir kiinin Ad tek satr yerine ift satr olunca bizim bunu anlamamz zorlayor. Byklk kklk, iinde say bulunup bulunmamasna gre bu kiileri inaa ediyoruz. Person::parseFromPdf($parts) methodundan bu eletirmeleri daha ayrntl inceleyebilirsiniz.

HTML

HTML dosylarnn okunmasnda PDF dosyalarna gre ok basit. nk sabit bir yaps var ve class ve tagleri kullanarak istediiniz ksm kolaylkla seebiliyorsunuz.

.resultTable > tbody > tr seicisini kullanarak tablonun satrlarn seiyoruz. Sonra td etiketiyle bu satrlar stunlara blyoruz ve bilgileri sraylar okuyarak kiileri oluturuyoruz.

2. likilerin Kurulmas

Burada bireylerin Yaknlk Derecesi stunundaki bilgiyi kullarak ilikileri belirliyoruz. Kiinin Yaknlk Derecesinin iinde geen Anne, Baba, Kz, Olu kelimelerinin saysn kullanarak aalari seviyesinin belirliyoruz. Kendisi yazann seviyesi 0 oluyor. Yani aacmz kk. Aacmzn kknden balayarak kiileri artan seviye srasnda inceliyoruz ve Anne, Baba ilikilerini kuruyoruz. Yani aacmz Breadth First Search olarak geziyoruz.

Bu ilikiler kurulduktan sonra aacmzn yapraklarndaki kiilerin anne ve babalarnn sadece adlar bulunuyor. Tabloda bir satrlar yok. Onlarn adlarndan da dummy bireyler oluturup aacmza ekliyoruz.

3. Grntlenme

D3.js ktphanesi JSON veri tipini kabul ediyor. Bu sebeple her bireyin anne ve babasnn i ie gmlm bir ekilde olduu bir JSON oluturuyoruz.

Aacn kk JSON olutururken anne, babasnn da ->json() fonksiyonun aryor. Onlar da kendi anne babalarnnkini. Bylelikle recursive olarak JSON dosyamz olumu oluyor.