Bu proje, Kocaeli iline ait yerel haber sitelerinden otomatik olarak veri toplayan, toplanan haberleri doğal dil işleme teknikleriyle sınıflandıran, coğrafi konum bilgisini çıkarıp Google Maps üzerinde interaktif olarak görselleştiren uçtan uca (end-to-end) bir sistemdir.
- Çoklu Kaynaktan Web Scraping: Kocaeli'nin önde gelen 5 yerel haber sitesinden (
cagdaskocaeli.com.tr,ozgurkocaeli.com.tr,seskocaeli.com,yenikocaeli.comvebizimyaka.com) son 3 güne ait veriler anlık olarak çekilir. - SSL Hata Toleransı:
safe_get()fonksiyonu sayesinde SSLv3 handshake hatası veren sitelerden bile kesintisiz veri toplanır. - NLP Tabanlı Duplicate (Mükerrer) Tespiti: Üç kademeli kontrol (Link, Başlık ve
paraphrase-multilingual-MiniLM-L12-v2embedding modeli ile %90 üzeri Cosine benzerliği) sayesinde farklı sitelerdeki aynı haberler tek bir harita marker'ı altında birleştirilir. - Akıllı Haber Sınıflandırma: Haberler öncelik sırasına göre (Yangın, Elektrik Kesintisi, Hırsızlık, Trafik Kazası, Kültürel Etkinlikler) anahtar kelime tabanlı ve Türkçe karakter normalizasyonlu olarak sınıflandırılır.
- Gelişmiş Konum Çıkarımı: "En erken pozisyon yöntemi" kullanılarak ajans imzaları elenir. Regex ile Mahalle, Sokak ve Cadde tespiti yapılarak Google Geocoding API ile koordinatlara dönüştürülür.
- Performans & Önbellekleme: Mükerrer Google API çağrılarını önlemek amacıyla coğrafi kodlama sonuçları MongoDB'de
konum_cachekoleksiyonunda önbelleğe alınır. - Dinamik Filtreleme Paneli: Kullanıcı arayüzü üzerinden harita yenilenmeden ilçe, haber türü ve tarih bazında dinamik filtreleme yapılabilir.
Sistem 4 ana katmandan oluşmaktadır:
- Web Scraping Katmanı: BeautifulSoup tabanlı Python modülü.
- Sınıflandırma ve Ön İşleme Katmanı: Metin temizleme, normalizasyon ve kategori belirleme motoru.
- Konum ve Geocoding Katmanı: Adres çıkarımı, koordinat dönüşümü ve MongoDB cache mekanizması.
- API ve Görselleştirme Katmanı: FastAPI RESTful backend ve Google Maps JavaScript API entegrasyonlu ön yüz.
- Python 3.9+
- MongoDB
- Google Maps & Geocoding API Anahtarı (Key)
-
Projeyi klonlayın:
git clone https://github.com/kullaniciadi/kentsel-haber-izleme.git cd kentsel-haber-izleme -
Gerekli kütüphaneleri yükleyin:
pip install -r requirements.txt
-
Kök dizinde bir
.envdosyası oluşturun ve API anahtarlarınızı tanımlayın:MONGO_URI=mongodb://localhost:27017/ GOOGLE_API_KEY=YOUR_GOOGLE_MAPS_API_KEY
-
Backend servisini (FastAPI) başlatın:
uvicorn main:app --reload
This project is an end-to-end system developed to automatically collect data from local news websites in Kocaeli, classify them using natural language processing (NLP) techniques, extract geographical location information, and visualize them interactively on Google Maps.
- Multi-Source Web Scraping: Real-time data scraping from 5 local news sources (
cagdaskocaeli.com.tr,ozgurkocaeli.com.tr,seskocaeli.com,yenikocaeli.com, andbizimyaka.com) capturing news from the last 3 days. - SSL Fault Tolerance: Continuous data extraction even from sites with SSLv3 handshake errors using a custom
safe_get()mechanism. - NLP-Based Deduplication: A 3-tier duplicate check (Link, Title, and embedding-based similarity using
paraphrase-multilingual-MiniLM-L12-v2with 90% or higher cosine similarity) merges identical news items from different sources under a single map marker. - Smart News Classification: Keyword-based classification with Turkish character normalization, based on a strict priority order: (1) Fire, (2) Power Outage, (3) Theft, (4) Traffic Accident, (5) Cultural Events.
- Advanced Location Extraction: Employs an "earliest position method" to filter out agency signatures. It uses regex to capture neighborhood, street, and avenue entities, converting them to coordinates via the Google Geocoding API.
- Performance & Caching: Geocoding results are cached in MongoDB's
konum_cachecollection to eliminate redundant and costly Google API calls. - Dynamic Filtering Panel: Offers a user-friendly UI sidebar to filter incidents by district, news type, and date range dynamically without reloading the map.
The system consists of 4 main layers:
- Web Scraping Layer: BeautifulSoup-based Python scraping module.
- Classification & Preprocessing Layer: Text cleaning, normalization, and category-matching engine.
- Location & Geocoding Layer: Address extraction, coordinate transformation, and MongoDB caching mechanism.
- API & Visualization Layer: FastAPI RESTful backend paired with a Google Maps JavaScript API frontend.
- Python 3.9+
- MongoDB
- Google Maps & Geocoding API Key
-
Clone the repository:
git clone https://github.com/username/urban-news-monitoring.git cd urban-news-monitoring -
Install the dependencies:
pip install -r requirements.txt
-
Create a
.envfile in the root directory and add your API keys:MONGO_URI=mongodb://localhost:27017/ GOOGLE_API_KEY=YOUR_GOOGLE_MAPS_API_KEY
-
Run the FastAPI backend server:
uvicorn main:app --reload


