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