Türkçe metinlerden isim, telefon, tarih/saat ve lokasyon/adres blokları ayıklayan kütüphane.
Project description
Ayikla
Ayikla, Türkçe metinlerden:
- 🧍 İsim / Ünvan
- 📞 Telefon Numarası
- 🗓️ Tarih & Saat (doğal dil dahil)
- 📍 Lokasyon / Adres benzeri bloklar
çıkaran hafif bir Python kütüphanesidir. Metindeki belirsiz veya doğal dil kalıplarını normalize ederek yapılandırılmış tek bir sözlük döndürür.
Kurulum
pip install ayikla
Kullanım
from ayikla import bul
# Örnek 1: İsim + Telefon + Tarih
metin = "Dr. Ahmet Yılmaz beni 0532 123 456x numarasından yarın saat 19'da ara."
print(bul(metin))
Çıktı:
{
"isimler": ["Dr Ahmet Yılmaz"],
"telefonlar": ["+90532123456x"],
"tarihler": [{"tarih": None, "saat": "19:00"}],
"lokasyonlar": []
}
from ayikla import bul
# Örnek 2: Belirli bir tarih
metin = "Çağrı Güngör 532 123 456x – 18 Ocak saat 19 'da görüşelim."
print(bul(metin))
Çıktı:
{
"isimler": ["Çağrı Güngör"],
"telefonlar": ["+905321234567"],
"tarihler": [{"tarih": "2025-01-18", "saat": "19:00"}],
"lokasyonlar": []
}
from ayikla import bul
# Örnek 3: Sadece saat
metin = "Sadece saat 19'da uygun olur."
print(bul(metin))
Çıktı:
{
"isimler": [],
"telefonlar": [],
"tarihler": [{"tarih": None, "saat": "19:00"}],
"lokasyonlar": []
}
from ayikla import bul
# Örnek 4: Lokasyon / Adres
metin = "Toplantı salı günü saat 14'te istanbul beşiktaş çarşı mah. no:5 kat 2 daire 4 ofiste olsun."
print(bul(metin))
Örnek çıktı:
{
"isimler": [],
"telefonlar": [],
"tarihler": [{"tarih": None, "saat": "14:00"}],
"lokasyonlar": ["Toplantı salı günü saat 14'te istanbul beşiktaş çarşı mah. no:5 kat 2 daire 4 ofiste olsun."]
}
Notlar:
- Lokasyon tespiti tamamen heuristik tabanlıdır; kesin adres ayrıştırması yapmaz.
- Sık geçen genel kelimeler (örn. "ofis", "kat") tetikleyici pattern ile birlikte dizilim oluşturduğunda blok üretir.
- Daha hassas çıktı istiyorsanız blokları kendiniz tekrar işleyebilirsiniz.
---
## Proje Yapısı
ayikla/ ├── init.py ├── extractor.py ├── isimler.txt ├── soyisimler.txt pyproject.toml MANIFEST.in README.md
---
## Özellikler
- Türkçe özel isim ve soyisim sözlükleri ile daha doğru isim yakalama
- Farklı yazılmış telefon numaralarını normalize etme (`+905xx...`)
- "yarın", "bugün", "dün", "akşam 8'de" gibi doğal dil ifadelerinden tarih/saat ayıklama
- Basit kurallarla lokasyon / adres blokları yakalama (mahalle, cadde, sokak, no, kat, daire vs.)
### Detaylar
#### 1. İsim / Ünvan Algılama
- Dahili `isimler.txt` ve `soyisimler.txt` sözlükleri kullanılır.
- Büyük harfle başlayan ve sözlükte olmayan bazı kelimeler olası soyisim olarak etiketlenir.
- Ünvanlar (Dr, Prof, Av vb.) başta yakalanır ve tam isimle birleştirilir.
- Çoklu ad + soyad dizilimleri ("Ahmet Can Yılmaz") desteklenir.
Sınırlamalar:
- Noktalama ile biten kırpılmış parçalar ("Ahmet,") temizleme sonrası düşebilir.
- Kısaltmalar ("ABD") yanlış pozitif oluşturabilir.
#### 2. Telefon Numarası
- `phonenumbers` kütüphanesiyle TR varsayılan bölgesi kullanılır.
- Boşluk, tire varyantları normalize edilip E.164 formatı döner.
- Tarih çıkarımı sırasında telefon benzeri kalıplar maskelenerek çakışma azaltılır.
Sınırlamalar:
- Harf içeren son ekler ("1234x") doğrulama dışında bırakılır ama hamda korunur.
#### 3. Tarih & Saat
- Doğal dil kalıpları: "yarın", "bugün", "gelecek pazartesi", "akşam 8" vb. normalize edilir.
- Türkçe saat anlatımları HH:MM formuna çevrilir.
- Tek ayrı saat + tek ayrı tarih bulunursa birleştirilir.
Sınırlamalar:
- Çok belirsiz ifadeler ("sonra bir ara") atlanır.
- Çalışma zamanı sistem tarihi relative ifadeleri etkiler.
#### 4. Lokasyon / Adres Blokları
- Tetikleyiciler: mahalle, cadde, sokak, bulvar, no, kat, daire vb. + `lokasyon.txt` içeriği.
- Yakın (pencere ~10 kelime) indeksler bloklanarak geniş bağlam döndürülür.
Sınırlamalar:
- Yapısal ayrıştırma yapmaz; sadece blok metin döner.
- Çok uzun metinlerde pencereyi değiştirmek için şimdilik kaynak kod düzenlenmeli (parametre opsiyonel yapılabilir).
---
## Gelişmiş Kullanım
```python
from ayikla.extractor import TextEntityExtractor
# Özel sözlük dosyaları belirtme (aynı paket içinde varsayılanlar zaten gömülü)
extr = TextEntityExtractor(
isimler_dosyasi="isimler.txt",
soyisimler_dosyasi="soyisimler.txt",
lokasyon_dosyasi="lokasyon.txt"
)
metin = "Dr Mehmet Kara 532 111 2233 yarın akşam 8'de ankara çankaya no:12 kat 3 bekliyorum"
print(extr.extract_all(metin))
Örnek çıktı:
{
"isimler": ["Dr Mehmet Kara"],
"telefonlar": ["+905321112233"],
"tarihler": [{"tarih": None, "saat": "20:00"}],
"lokasyonlar": ["Dr Mehmet Kara 532 111 2233 yarın akşam 8'de ankara çankaya no:12 kat 3 bekliyorum"]
}
Sürüm Notları
1.1.x
- Lokasyon (adres blokları) çıkarımı eklendi (
lokasyonlaranahtarı) - README güncellendi, örnekler genişletildi
- Küçük iyileştirmeler: veri dosyaları paket içine gömülü okunuyor
Yazar
Hasan Çağrı Güngör
İletişim: iletisim@cagrigungor.com
Lisans
MIT License. Özgürce kullanabilir ve geliştirebilirsiniz.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ayikla-1.1.10.tar.gz.
File metadata
- Download URL: ayikla-1.1.10.tar.gz
- Upload date:
- Size: 103.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a86d01b89397369f3017db882250da51d5c92ec4d7280f106d272cea713d91ba
|
|
| MD5 |
d0e31280e4fd625e00b10a1ea990009d
|
|
| BLAKE2b-256 |
6d653dc4b55ed597290edc27f437573c5f67a0634f135860097121b26635c4a3
|
File details
Details for the file ayikla-1.1.10-py3-none-any.whl.
File metadata
- Download URL: ayikla-1.1.10-py3-none-any.whl
- Upload date:
- Size: 100.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0b71a41e92a96de28c055b1f5c790eae27bee53dc5d27494d4a40ac00795bf5
|
|
| MD5 |
a53ac1a6cf2014d6a8d62b4e4fd55917
|
|
| BLAKE2b-256 |
ec8c9bc0692217ab5033e1a92879099f8d2fcf423a2ca248004b6de6386f0baf
|