Panduan Lengkap: Membangun Knowledge Graph CTI Multi-PDF Otomatis di Google Colab
Daftar Isi
- Pendahuluan
- Arsitektur Solusi dan Alur Utama
- 1. Instalasi dan Import Dependensi
- 2. Konfigurasi Terpusat dengan
CTIConfig
- 3. Ekstraksi Teks PDF dengan
PDFProcessor
- 4. Batch Processing PDF dari Google Drive
- 5. Named Entity Recognition (NER) Multi-Sumber
- 6. Penyusunan Knowledge Graph
- 7. Pipeline Utama: Dari PDF ke Knowledge Graph & Ekspor
- 8. Penutup dan Tips Praktis
1. Pendahuluan
Cyber Threat Intelligence (CTI) sangat membutuhkan proses otomatis untuk membaca laporan PDF, melakukan ekstraksi informasi, dan membangun knowledge graph dari dokumen-dokumen tersebut. Blog ini membahas langkah-langkah terstruktur untuk membangun pipeline end-to-end: dari ekstraksi teks, entitas, hingga visualisasi dan ekspor graph, khususnya untuk file PDF di Google Drive.
2. Arsitektur Solusi dan Alur Utama
Pipeline terdiri dari 7 bagian utama:
- Instalasi dan Import Library
- Konfigurasi Global
- Ekstraksi Teks PDF
- Batch Processing PDF
- Ekstraksi Entitas (NER)
- Membangun Knowledge Graph
- Main Pipeline & Ekspor
Diagram alur:
PDFs (Google Drive)
│
▼
Ekstraksi Teks (pdfplumber)
│
▼
Ekstraksi Entitas (spaCy & regex custom)
│
▼
Analisis Relasi (Co-occurrence, dsb)
│
▼
Knowledge Graph (NetworkX)
│
▼
Ekspor (CSV, GraphML)
3. Instalasi dan Import Dependensi
Langkah pertama adalah instalasi library, baik untuk NLP, graph, maupun visualisasi.
!pip install -q numpy pandas==2.1.4 pdfplumber==0.10.3 spacy==3.7.4 networkx==3.2.1 matplotlib==3.7.4 tqdm==4.66.1 ipywidgets==8.1.2 pyvis==0.3.2
!python -m spacy download en_core_web_sm
Import semua library yang dibutuhkan:
import os
import re
import json
import hashlib
from datetime import datetime
from collections import defaultdict, Counter
import pandas as pd
import pdfplumber
import spacy
import networkx as nx
from tqdm.notebook import tqdm
from pyvis.network import Network
from IPython.display import display, HTML
Mount Google Drive untuk akses data dan ekspor hasil:
from google.colab import drive
drive.mount('/content/drive')
4. Konfigurasi Terpusat dengan CTIConfig
Semua parameter pipeline (mulai dari lokasi file, regex NER, hingga parameter graph) dikelola dalam satu class CTIConfig
supaya mudah diubah dan konsisten.
Contoh parameter utama:
- Lokasi folder Google Drive (data dan hasil)
- Regex custom untuk NER (misal: Threat Actor, Malware, MITRE Technique)
- Pengaturan text processing (min/max paragraph, sentence segmentation)
- Parameter graph (jenis relasi, besar node, dsb)
- Metadata default (misal: SHA-1, tahun, title)
Contoh kode:
class CTIConfig:
def __init__(self):
self.min_paragraph_length = 50
self.max_paragraph_length = 2000
self.ner_model = "en_core_web_sm"
self.custom_entity_types = {
"THREAT_ACTOR": r"(APT\d+|APT-\w+|Group\d+|Wicked Rose|NCPH)",
...
}
self.drive_root = "/content/drive/MyDrive/Disertasi/Buda Hartawan"
self.source_dir = os.path.join(self.drive_root, "DatasetCTI")
self.export_dir = os.path.join(self.drive_root, "CTI_Results")
...
5. Ekstraksi Teks PDF dengan PDFProcessor
Class ini bertugas membuka satu file PDF dan mengekstrak teks per halaman dengan quality control:
- Hanya halaman dengan teks cukup panjang yang diambil
- Teks dinormalisasi & bisa dipotong per kalimat atau paragraf
- Setiap segmen teks diberi hash unik untuk tracking
Tahapan:
- Buka PDF, baca tiap halaman.
- Validasi panjang teks → simpan atau abaikan.
- Setelah semua halaman, lakukan normalisasi dan segmentasi (kalimat/paragraf).
- Hasil akhir: list blok teks siap NER.
Contoh kode:
with pdfplumber.open(file_path) as pdf:
for page in pdf.pages:
text = page.extract_text()
if text and len(text) > self.config.min_paragraph_length/2:
...
6. Batch Processing PDF dari Google Drive
Untuk memproses banyak dokumen sekaligus:
- Scan folder Google Drive, cari semua file PDF
- Otomatis generate metadata (SHA-1, tahun, judul) dari nama file
- Proses ekstraksi teks pada semua file dengan progress bar
Fitur:
- Otomatis skip file yang bukan PDF
- Metadata dokumen tetap terhubung ke hasil ekstraksi
Contoh kode:
for filename in sorted(os.listdir(self.config.source_dir)):
if filename.lower().endswith('.pdf'):
...
7. Named Entity Recognition (NER) Multi-Sumber
Ekstraksi entitas dilakukan dengan dua pendekatan:
- spaCy NER: Model pretrained untuk English (en_core_web_sm)
- Regex custom: Untuk entitas khusus CTI (misal: APT, malware, teknik MITRE)
Fitur:
- Entitas didedup berdasarkan teks terpanjang
- Setiap entitas tetap terhubung ke dokumen dan segmen asal
Contoh kode:
for ent in doc.ents:
...
for ent_type, pattern in self.custom_patterns.items():
for match in pattern.finditer(text):
...
8. Penyusunan Knowledge Graph
Knowledge graph dibangun dengan NetworkX, tipe MultiDiGraph:
- Node: entitas, dokumen
- Edge: relasi antar entitas (co-occurrence, dsb), entitas ke dokumen (DOC_REF)
- Fitur: perhitungan statistik (degree, centrality, pagerank, clustering, dsb)
- Semua node dan edge menyimpan info metadata (type, source, evidence, dsb)
Contoh kode pembuatan edge:
self.graph.add_edge(
rel['source'],
rel['target'],
type=rel['type'],
evidence=str(rel.get('evidence')),
weight=float(rel.get('weight', 1.0)),
documents=documents_str
)
9. Pipeline Utama: Dari PDF ke Knowledge Graph & Ekspor
Alur utama pipeline:
- Inisialisasi config, batch processor, NER
- Temukan semua PDF di Google Drive
- Ekstrak teks dari semua dokumen
- Ekstrak entitas NER dari semua blok teks
- Relasi (co-occurrence) antar entitas dalam blok yang sama
- Bangun graph (node, edge, metrik)
- Ekspor hasil ke Google Drive (CSV node/edge, GraphML, metadata JSON)
Contoh ekspor hasil:
pd.DataFrame(nodes_data).to_csv(os.path.join(export_dir, f"kg_nodes.csv"), index=False)
pd.DataFrame(edges_data).to_csv(os.path.join(export_dir, f"kg_edges.csv"), index=False)
nx.write_graphml(kg.graph, os.path.join(export_dir, "knowledge_graph.graphml"))
Output bisa dibuka di Gephi, Cytoscape, atau jaringan visual lainnya.
10. Penutup dan Tips Praktis
- Pastikan Google Drive sudah termount dan file PDF sudah ada di folder sumber.
- Edit regex NER sesuai kebutuhan domain/riset Anda agar hasil extraction optimal.
- Gunakan hasil ekspor (CSV/GraphML) untuk analisis lanjutan atau visualisasi di tools lain.
- Pipeline ini modular: Anda bisa menambah preprocessing, entitas baru, atau tipe relasi dengan mudah.
- Debug dengan print/screenshot bila ada error pada file tertentu.
FAQ Singkat
-
Q: Bagaimana menambah entitas baru?
A: Tambahkan regex pada
config.custom_entity_types
. -
Q: Bagaimana menambah jenis relasi?
A: Tambah pada
config.relationship_types
dan logika pembuatan edge di pipeline. - Q: Bisa dijalankan di komputer lokal? A: Ya, selama struktur folder sesuai dan dependencies terinstall.
Top comments (0)