turkce-adres
Türkçe adresler için internetsiz, ek paket gerektirmeyen bir Python kütüphanesi ve komut satırı aracı:
- Ayrıştırır: dağınık yazılmış adresi il, ilçe, mahalle/köy, cadde/sokak/bulvar/çıkmaz/meydan, kapı no, blok, kat, daire, bina, posta kodu ve "Migros karşısı" gibi tarif ifadelerine ayırır.
- Düzeltir: BÜYÜK ASCII yazımı Türkçe harflerine kavuşturur (
CAFERAGA→Caferağa,BUYUKDERE→Büyükdere), il ve ilçe adlarındaki yazım hatalarını düzeltir (Istnbul→İstanbul), standart (kargo) ya da resmî yazıma çevirir. - Doğrular: 66.687 mahalle, köy ve semtlik sözlükle mahallenin o ilçede olup olmadığına bakar; il ya da ilçe yazılmamışsa mahalleden ya da posta kodundan bulur.
- Konum verir (internetsiz): adresin yaklaşık koordinatını sokak, mahalle, ilçe ya da il düzeyinde döndürür. Hiçbir servise istek atmaz.
- Eşleştirir: iki adresin aynı yeri gösterip göstermediğini söyler; CSV'de tekrarlanan kayıtları gruplar.
- KVKK için genelleştirir: paylaşmadan önce kapı no, daire, posta kodu gibi ayrıntıları atıp adresi mahalle, ilçe ya da il düzeyine indirir.
- Teslimat denetimi: kargo için eksik ya da çelişkili öğeleri listeler (kapı no yok, ilçe bu ile ait değil...).
- İki dil: alan adları, notlar ve komut satırı Türkçe ya da İngilizce.
pip install turkce-adres
Kullanım
from turkce_adres import ayristir, bicimle, konum, benzerlik, genellestir, eksikler
a = ayristir("ISTANBUL BESIKTAS LEVENT MAH. BUYUKDERE CAD NO 185 D 4")
a["il"], a["ilce"], a["mahalle"], a["yol"], a["no"], a["ic_kapi"]
# ('İstanbul', 'Beşiktaş', 'Levent', 'Büyükdere', '185', '4')
bicimle(a) # 'Levent Mah. Büyükdere Cad. No:185 D:4, Beşiktaş/İstanbul'
bicimle(a, "resmi") # 'Levent Mahallesi Büyükdere Caddesi Dış Kapı No: 185 İç Kapı No: 4, Beşiktaş/İSTANBUL'
konum(a) # {'enlem': ..., 'boylam': ..., 'duzey': 'sokak', 'kaynak': 'OpenStreetMap (ODbL)'}
benzerlik("CAFERAGA MH MODA CD NO 12 KADIKOY ISTANBUL",
"Caferağa Mahallesi, Moda Caddesi No:12, Kadıköy/İstanbul") # 1.0
benzerlik("Moda Cad. No:12 Kadıköy", "Moda Cad. No:14 Kadıköy") # 0.6 (başka bina)
genellestir("Caferağa Mah. Moda Cad. No:12 D:3 Kadıköy/İstanbul 34710")["metin"]
# 'Caferağa Mah., Kadıköy/İstanbul'
eksikler("Moda Cad. Kadıköy")
# ['mahalle ya da köy yok', 'dış kapı numarası yok', 'posta kodu yok (önerilir)']
Her sonuçta ayrıca guven (0-1) ve notlar vardır: ne düzeltildi, il nereden bulundu ("il ilçeden bulundu", "yazım düzeltildi: Istnbul -> İstanbul").
duzelt=False verilirse sözcükler yazıldığı gibi kalır. İngilizce alan adları için parse(metin) ya da ayristir(metin, dil="en").
Komut satırı
# tek adres
turkce-adres "kızılay meydanı ziya gökalp cd 12 çankaya ankara" --bicim --konum
# CSV: adres sütununun yanına alanları, standart yazımı, konumu, eksikleri ve tekrar gruplarını ekler
turkce-adres musteriler.csv --sutun adres --bicim --konum --eksik --tekil -o musteriler_ayrik.csv
# KVKK: yalnız mahalle düzeyine kadar yaz
turkce-adres musteriler.csv --sutun adres --genellestir mahalle -o paylasim.csv
# İngilizce sütun adları ve mesajlar
turkce-adres customers.csv --column address --lang en --geocode -o out.csv
Excel'den "CSV UTF-8" olarak kaydedilen dosyalar doğrudan okunur; çıktı Excel'in Türkçe karakterleri doğru açacağı biçimde yazılır. Dosyanızda il, no gibi aynı adlı bir sütun varsa hiçbir sütun ezilmez, yeni sütunlar adres_ ön ekiyle yazılır.
Alanlar
| Türkçe | English | Örnek |
|---|---|---|
il / ilce |
province / district |
İstanbul / Kadıköy |
mahalle / koy |
neighbourhood / village |
Caferağa / Yeşilyurt |
yol, yol_turu |
street, street_type |
Moda, cadde (sokak, cadde, bulvar, cikmaz, meydan, yol) |
ust_yol |
parent_street |
"Kızılay Meydanı Ziya Gökalp Cd." içindeki Kızılay Meydanı |
no, ic_kapi |
number, unit |
12/3 → no 12/3, iç kapı 3 |
kat, blok, bina |
floor, block, building |
Zemin, B, Levent Plaza |
posta_kodu |
postcode |
34710 |
tarif |
landmark |
Migros karşısı |
kalan |
unparsed |
ayrılamayan sözcükler |
guven, notlar |
confidence, notes |
0,95, ["il ilçeden bulundu"] |
Ölçüm
Üç sette ölçüldü. Karşılaştırma büyük/küçük harf ve Türkçe karakter farkını yok sayar. "Tüm alanlar doğru", adresin etiketlenmiş bütün alanlarının birlikte doğru olduğu adres oranıdır.
| Set | Nasıl üretildi | Tüm alanlar doğru |
|---|---|---|
bench/sinama.jsonl (6.000) |
OpenStreetMap'teki Türkiye adreslerinden şablonla; geliştirme sırasında hiç bakılmadı | %99,5 (5.969 / 6.000) |
bench/gelistirme.jsonl (6.000) |
Aynı yöntem; kurallar bu sette düzeltildi | %99,5 (5.973 / 6.000) |
bench/zor.tsv (58) |
Elle yazılmış ve elle etiketlenmiş dağınık adresler (etiketli yazım, yazım hatası, il yazılmadan ilçe, site/blok, köy, çıkmaz, tarif) | %100 (58 / 58), aşağıdaki nota bakın |
Yeniden ölçmek için: python bench/degerlendir.py sinama ve python bench/zor_degerlendir.py.
Sınırlar, dürüstçe:
- İlk iki set şablonla üretildi. Üçüncü seti bu projeyi geliştiren kişi yazdı ve bazı kurallar o sete bakılarak düzeltildi; bağımsız bir ölçüm değildir. Gerçek kullanıcı yazımında sonuç daha düşük olur. Yanlış ayrılan adres örnekleri (kişisel veri içermeden) çok değerli.
- Mahalle sözlüğü, konum ve yazım düzeltmesi OpenStreetMap'te ne varsa ona dayanır. OSM'de olmayan mahalle doğrulanamaz; sokak düzeyinde konum yalnız OSM'de adresi girilmiş sokaklarda vardır (14.777 sokak). Konum yaklaşıktır: mahalle/köy için OSM'deki merkez noktası, ilçe ve il için mahalle merkezlerinin ortancası.
- Mahalle adları zamanla değişir, birleşir. Sözlük Kasım 2026 tarihli OSM verisidir;
scripts/altındaki betiklerle yenilenebilir. - Posta kodundan ilçe tablosu yalnız OSM'deki adres etiketlerinden türetildi (792 posta kodu); PTT listesi kullanılmadı.
genellestirbir genelleştirmedir, tek başına anonimleştirme sayılmaz: az nüfuslu bir mahalle ya da başka verilerle birleşince kişi yine belirlenebilir.- Resmî adres kaydıyla (UAVT) doğrulama yapmaz; o veri herkese açık değildir.
Verinin yeniden üretilmesi
pip install requests
python scripts/osm_cek.py # il il adresler ve yer adları (Overpass API, ~125 MB, ham/)
python scripts/osm_mahalle_cek.py # her ilçenin mahalle ve köyleri, merkez koordinatlarıyla
python scripts/hazirla.py --ad gelistirme --atla 0
python scripts/hazirla.py --ad sinama --atla 6000
python scripts/sozluk_kur.py --ham ham # mahalle, sokak, posta kodu ve yazım sözlükleri
Ad hakkında
Bu proje GitHub'da önce tr-adres adıyla açıldı. PyPI'daki tr-adres paketi başka bir geliştiricinin bağımsız projesidir; karışmaması için bu paket turkce-adres adıyla yayımlanır (modül turkce_adres, komut turkce-adres).
Lisans
Metadata
Release files for turkce-adres 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| turkce_adres-0.2.0.tar.gz | 1.2 MB | With provenance | Details for turkce_adres-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| turkce_adres-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for turkce_adres-0.2.0-py3-none-any.whl |
Total release size: 2.4 MB
Release files / turkce_adres-0.2.0.tar.gz
| Download URL | turkce_adres-0.2.0.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5664d9b220d9d91739437bcc355b775f88e0e21fba422a8bdc74477610ad38be
|
|
BLAKE2b-256 checksum How to use checksums |
e86ff4e5622fb1f8a463ad0fee807ddf7acfae00c372ce09b4cb3d6cd290f2f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / turkce_adres-0.2.0-py3-none-any.whl
| Download URL | turkce_adres-0.2.0-py3-none-any.whl |
|---|---|
| Size | 1.2 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2446386276129da9ce95abd064242521eb0545bbd8249fd813fb09f735f037ed
|
|
BLAKE2b-256 checksum How to use checksums |
24bb9e30a3b95168b05fde5e6d6bd4e19ab22d1575958093c8d56ccc9539c008
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for turkce-adres 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for turkce_adres-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.