pythonla metin şeklindeki zaman bilgisini ayrıştırmak
dateparser, datefinder gibi bir modul kullanma imkanınız yoksa metin şeklinde yazılmış bir zaman verisini nasıl işleyebiliriz basit bir örnek yapalım.
3 yıl 4 ay 5 gün 10 dakika şeklinde yazılmış bir zaman verisinin kaç dakika olduğunu hesaplayalım.
öncelikle uygun bir regex oluşturalım. daha optimize şekilde yazılabilir ancak ben aşagıdaki yapıyı kullanacağım.
desenler = {
'YIL': re.compile(r'(\d+)\s*[Yy][İiIi][Ll]', re.I),
'AY': re.compile(r'(\d+)\s*[Aa][Yy]', re.I),
'HAFTA': re.compile(r'(\d+)\s*[Hh][Aa][Ff][Tt][Aa]', re.I),
'GUN': re.compile(r'(\d+)\s*[Gg][ÜuUu][Nn]', re.I),
'SAAT': re.compile(r'(\d+)\s*[Ss][Aa][Aa][Tt]', re.I),
'DAKIKA': re.compile(r'(\d+)\s*[Dd][Aa][Kk][İiIi][Kk][Aa]', re.I),
'SANIYE': re.compile(r'(\d+)\s*[Ss][Aa][Nn][İiIi][Yy][Ee]', re.I)
}
şimdide dakika dönüşü için gerekli hesaplamayı yapacağız listeyi oluşturalım.
dakika_donusturme = {
'YIL': 365 * 24 * 60,
'AY': 30 * 24 * 60,
'HAFTA': 7 * 24 * 60,
'GUN': 24 * 60,
'SAAT': 60,
'DAKIKA': 1,
'SANIYE': 1 / 60
}
sırada ise metin bilgisini oluşturacak fonksiyonu yazalım.
def metin_ifadesinden_dakika_hesapla(metin_ifadesi):
if not isinstance(metin_ifadesi, str) or metin_ifadesi == "":
return None
zaman_birimleri = {}
for birim, desen in desenler.items():
eslesme = desen.search(metin_ifadesi)
zaman_birimleri[birim] = int(eslesme.group(1)) if eslesme else 0
toplam_dakika = sum(zaman_birimleri[birim] * dakika_donusturme[birim] for birim in zaman_birimleri)
return int(toplam_dakika)
kodumuzu çalıştırdığımız zaman
"3 yıl 4 ay 5 gün 10 dakika" zaman verisi toplam 1756810 dakikadır
çıktısını elde ederiz.