Update README.md
This commit is contained in:
parent
a7a2b83b56
commit
567a61deac
103
README.md
103
README.md
@ -1,3 +1,106 @@
|
||||
# Readme.md
|
||||
|
||||
Tanggal Yang Tak Pasti
|
||||
Berikut adalah penjelasan lengkap dan detail tentang strategi dan implementasi dari fungsi evaluasi_tanggal :
|
||||
Tujuan Fungsi
|
||||
Fungsi evaluasi_tanggal() bertujuan untuk mengevaluasi setiap tanggal dalam daftar untuk menentukan apakah format tanggal tersebut ambigu atau tidak ambigu. Tanggal dianggap tidak ambigu ("YA") jika:
|
||||
1. Tanggal tersebut mengandung nama bulan (misalnya, 23-mar-2000).
|
||||
2. Format tanggalnya jelas dan tidak menimbulkan kebingungan dalam pengidentifikasian hari dan bulan (misalnya, 2011-08-22).
|
||||
Sebaliknya, tanggal dianggap ambigu ("TIDAK") jika:
|
||||
1. Tidak ada nama bulan dalam format teks.
|
||||
2. Bagian hari dan bulan bisa saling tertukar atau tidak jelas (misalnya 04/05/2010, di mana 4 dan 5 bisa berarti bulan atau hari tergantung urutannya).
|
||||
|
||||
Strategi Umum
|
||||
Fungsi ini memiliki beberapa langkah kunci untuk melakukan evaluasi tanggal:
|
||||
1. Deteksi nama bulan:
|
||||
o Jika tanggal mengandung nama bulan (misalnya mar untuk Maret), maka tanggal tersebut langsung dianggap tidak ambigu ("YA").
|
||||
2. Validasi format tanggal:
|
||||
o Tanggal yang tidak mengandung nama bulan akan diperiksa apakah sesuai dengan format yang dapat diparsing (dengan pemisah - atau /).
|
||||
o Format yang benar adalah tiga bagian (hari, bulan, tahun) setelah dipecah.
|
||||
3. Validasi tahun:
|
||||
o Tahun diidentifikasi sebagai angka lebih besar dari 999. Jika tidak ditemukan angka yang lebih besar dari 999, tanggal tersebut dianggap tidak valid ("TIDAK").
|
||||
4. Pengecekan ambiguitas:
|
||||
o Jika bagian hari dan bulan keduanya bernilai ≤ 12, maka tanggal dianggap ambigu ("TIDAK"), karena kita tidak bisa memastikan mana yang hari dan mana yang bulan.
|
||||
o Jika salah satu angka lebih besar dari 12, maka tanggal tersebut dianggap tidak ambigu ("YA"), karena kita bisa memastikan angka lebih besar adalah hari (misalnya, 13/02/1998).
|
||||
|
||||
Penjelasan Langkah demi Langkah dalam Kode
|
||||
1. Mengimpor dan Memulai Fungsi
|
||||
def evaluasi_tanggal(tanggal_list):
|
||||
hasil = []
|
||||
nama_bulan = ['jan', 'feb', 'mar', 'apr', 'may', 'jun',
|
||||
'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
|
||||
• nama_bulan adalah daftar singkatan nama bulan dalam bahasa Inggris.
|
||||
• hasil akan menyimpan pasangan (tanggal, status) yang menunjukkan apakah tanggal tersebut ambigu atau tidak.
|
||||
2. Mengevaluasi Setiap Tanggal
|
||||
for tanggal in tanggal_list:
|
||||
tgl_lower = tanggal.lower()
|
||||
# Jika mengandung nama bulan
|
||||
if any(bln in tgl_lower for bln in nama_bulan):
|
||||
hasil.append((tanggal, "YA"))
|
||||
continue
|
||||
• Pengecekan nama bulan: Jika tanggal mengandung nama bulan (misalnya mar untuk Maret), maka langsung dianggap tidak ambigu ("YA").
|
||||
3. Memproses Format Tanggal
|
||||
parts = tanggal.replace("/", "-").split("-")
|
||||
|
||||
try:
|
||||
parts_int = [int(p) for p in parts]
|
||||
except ValueError:
|
||||
hasil.append((tanggal, "TIDAK"))
|
||||
continue
|
||||
• Normalisasi pemisah: Tanggal diubah agar hanya menggunakan tanda - sebagai pemisah.
|
||||
• Konversi menjadi integer: Setiap bagian (hari, bulan, tahun) diubah menjadi angka. Jika ada bagian yang tidak bisa diubah menjadi angka, tanggal dianggap tidak valid ("TIDAK").
|
||||
4. Validasi Jumlah Bagian
|
||||
if len(parts_int) != 3:
|
||||
hasil.append((tanggal, "TIDAK"))
|
||||
continue
|
||||
• Tanggal harus terdiri dari tiga bagian (hari, bulan, tahun). Jika tidak, maka tanggal dianggap tidak valid.
|
||||
5. Identifikasi Tahun
|
||||
tahun = next((x for x in parts_int if x > 999), None)
|
||||
if not tahun:
|
||||
hasil.append((tanggal, "TIDAK"))
|
||||
continue
|
||||
• Identifikasi tahun: Tahun dipilih sebagai angka yang lebih besar dari 999 (karena tahun pasti lebih besar dari angka bulan atau hari). Jika tidak ditemukan, tanggal dianggap tidak valid.
|
||||
6. Memisahkan Hari dan Bulan
|
||||
lainnya = [x for x in parts_int if x != tahun]
|
||||
|
||||
# DEBUG PRINT
|
||||
print(f"Evaluasi: {tanggal} -> lainnya: {lainnya}")
|
||||
• lainnya: Menyimpan dua bagian lainnya (hari dan bulan) selain tahun.
|
||||
7. Evaluasi Ambiguitas
|
||||
if all(x <= 12 for x in lainnya):
|
||||
hasil.append((tanggal, "TIDAK"))
|
||||
else:
|
||||
hasil.append((tanggal, "YA"))
|
||||
• Pengecekan ambiguitas: Jika kedua angka selain tahun adalah ≤ 12, maka tanggal dianggap ambigu ("TIDAK"), karena kita tidak bisa memastikan mana yang hari dan mana yang bulan. Jika salah satu lebih besar dari 12, maka dianggap tidak ambigu ("YA").
|
||||
8. Hasil Evaluasi
|
||||
return hasil
|
||||
• Mengembalikan daftar hasil evaluasi, yang berisi pasangan (tanggal, status).
|
||||
|
||||
Contoh Data Uji dan Hasil Evaluasi
|
||||
Data Uji:
|
||||
tanggal_data = [
|
||||
"15/02/1998", # YA
|
||||
"04/05/2010", # TIDAK
|
||||
"1-3-2004", # TIDAK
|
||||
"2011-08-22", # YA
|
||||
"23-mar-2000", # YA
|
||||
"04/07/2010", # TIDAK
|
||||
"1965-3-4" # TIDAK
|
||||
]
|
||||
Hasil Evaluasi:
|
||||
15/02/1998: YA
|
||||
04/05/2010: TIDAK
|
||||
1-3-2004: TIDAK
|
||||
2011-08-22: YA
|
||||
23-mar-2000: YA
|
||||
04/07/2010: TIDAK
|
||||
1965-3-4: TIDAK
|
||||
|
||||
Kesimpulan
|
||||
Fungsi evaluasi_tanggal berhasil mendeteksi tanggal yang ambigu dan tidak ambigu berdasarkan:
|
||||
1. Ada tidaknya nama bulan dalam teks.
|
||||
2. Jika angka-angka dalam tanggal memungkinkan kebingungan antara hari dan bulan.
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user