Sistem otomatis untuk mendeteksi berita hoax menggunakan teknik Machine Learning dan Natural Language Processing (NLP) dalam bahasa Indonesia.
Proyek ini mengembangkan sistem yang dapat mengklasifikasikan artikel berita sebagai "HOAX" atau "VALID" berdasarkan konten teksnya. Sistem ini menggunakan data yang dikumpulkan dari sumber-sumber terpercaya seperti TurnBackHoax dan Kompas untuk melatih model machine learning.
- Web Scraping Otomatis: Mengumpulkan data berita dari TurnBackHoax dan Kompas
- Preprocessing Teks: Pembersihan teks dengan stemming dan stopword removal
- Multiple Models: Implementasi Naive Bayes dan Random Forest
- Evaluasi Model: Analisis akurasi dan performa model
- Prediksi Real-time: Klasifikasi teks berita baru
Hoax-Detection/
├── scraper.py # Orchestrator untuk semua scraper
├── turnbackhoax_scraper.py # Scraper untuk TurnBackHoax
├── kompas_scraper.py # Scraper untuk Kompas
├── normalizer.py # Preprocessing dan pembersihan teks
├── trainer.py # Training model machine learning
├── prediktor.py # Prediksi berita baru
├── data/ # Data mentah hasil scraping
│ ├── kompas.csv
│ └── turnbackhoax.csv
├── data_clean/ # Data yang sudah dibersihkan
│ ├── kompas_cleaned.csv
│ └── turnbackhoax_cleaned.csv
└── model/ # Model yang sudah dilatih
├── nb.pkl # Naive Bayes model
├── rf.pkl # Random Forest model
└── vectorizer.pkl # TF-IDF Vectorizer
pip install pandas scikit-learn nltk Sastrawi joblib beautifulsoup4 requests
import nltk
nltk.download('stopwords')
Jalankan scraper untuk mengumpulkan data dari kedua sumber:
python scraper.py
Atau jalankan scraper individual:
python turnbackhoax_scraper.py
python kompas_scraper.py
Bersihkan dan normalkan teks:
python normalizer.py
Latih model machine learning:
python trainer.py
Opsi tambahan:
python trainer.py --test-size 0.3 --model nb # Hanya Naive Bayes
python trainer.py --model rf # Hanya Random Forest
Gunakan model untuk memprediksi teks baru:
from prediktor import predict_text
# Prediksi single text
result = predict_text("Teks berita yang ingin diprediksi", model_type="nb")
print(f"Prediksi: {result['prediction']}")
print(f"Confidence: {result['confidence']:.2f}")
# Prediksi dari file CSV
from prediktor import predict_csv
predict_csv("input.csv", "output.csv", model_type="rf")
Sistem menggunakan tag dalam judul untuk mengklasifikasikan berita:
HOAX Tags:
[SALAH]
[PENIPUAN]
[FITNAH]
[DISINFORMASI]
[HOAX]
VALID Tags:
[VALID]
[BENAR]
[FAKTA]
[KLARIFIKASI]
Pipeline preprocessing meliputi:
- Konversi ke lowercase
- Penghapusan angka
- Penghapusan tanda baca
- Penghapusan stopwords bahasa Indonesia
- Stemming menggunakan Sastrawi
Sistem menggunakan dua algoritma machine learning:
- Multinomial Naive Bayes: Cocok untuk klasifikasi teks dengan asumsi independensi fitur
- Random Forest: Ensemble method yang robust terhadap overfitting
Evaluasi model menggunakan:
- Accuracy Score
- Classification Report (Precision, Recall, F1-score)
- Confusion Matrix
Judul,Link,Tanggal,Author,Isi Ringkas
[VALID] Judul Berita,https://example.com,01/01/2025,Author,Konten berita...
Judul,Isi Ringkas,Prediction,Confidence_NB,Confidence_RF
Judul Berita,Konten...,VALID,0.85,0.92
- Python 3.8+
- pandas
- scikit-learn
- nltk
- Sastrawi
- joblib
- beautifulsoup4
- requests
- Implementasi deep learning models (LSTM, BERT)
- Web interface untuk prediksi real-time
- API endpoints untuk integrasi eksternal
- Ekspansi sumber data
- Implementasi active learning
Kontribusi sangat diterima! Silakan:
- Fork repository ini
- Buat feature branch (
git checkout -b feature/AmazingFeature
) - Commit perubahan (
git commit -m 'Add some AmazingFeature'
) - Push ke branch (
git push origin feature/AmazingFeature
) - Buat Pull Request
Proyek ini menggunakan lisensi MIT. Lihat file LICENSE
untuk detail lebih lanjut.
- Sastrawi untuk Indonesian stemming
- NLTK untuk natural language processing tools
- TurnBackHoax sebagai sumber data hoax
- Kompas sebagai sumber berita valid
Jika ada pertanyaan atau saran, silakan buat issue di repository ini.