Merge pull request 'feat/dbIntigration' (#13) from feat/dbIntigration into develop
Reviewed-on: Berufsschule/Veracity_AI#13
This commit is contained in:
commit
b6dbc1dd6a
Binary file not shown.
|
@ -34,5 +34,6 @@ class VeraMindInference:
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"result": "FAKE" if is_fake else "REAL",
|
"result": "FAKE" if is_fake else "REAL",
|
||||||
"confidence": float(confidence)
|
"confidence": float(confidence),
|
||||||
|
"is_fake": is_fake
|
||||||
}
|
}
|
|
@ -1,10 +1,15 @@
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from utils.webTextExtractor import WebTextExtractor
|
from utils.webTextExtractor import WebTextExtractor
|
||||||
|
|
||||||
class TextData:
|
class TextData:
|
||||||
def __init__(self, url: str = "") -> None:
|
def __init__(self, url: str = "",text: str = "",result: str = "", is_fake_news: bool = False, provider: str = "") -> None:
|
||||||
self.url = url
|
self.url = url
|
||||||
self.text = ""
|
self.text = text
|
||||||
self.result = ""
|
self.result = result
|
||||||
|
self.is_fake_news = is_fake_news
|
||||||
|
self.provider = provider
|
||||||
self.confidence = None
|
self.confidence = None
|
||||||
self._extractor = None
|
self._extractor = None
|
||||||
|
|
||||||
|
@ -31,4 +36,34 @@ class TextData:
|
||||||
if self.confidence != None:
|
if self.confidence != None:
|
||||||
output = f"Prediction: {self.result}" + f" Confidence: {self.confidence:.4f}"
|
output = f"Prediction: {self.result}" + f" Confidence: {self.confidence:.4f}"
|
||||||
print(output)
|
print(output)
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
def get_provider(self)-> str:
|
||||||
|
self.extract_provider()
|
||||||
|
return self.provider
|
||||||
|
|
||||||
|
def extract_provider(self):
|
||||||
|
"""
|
||||||
|
Extract the domain (anbieter) from a given URL.
|
||||||
|
|
||||||
|
:param url: The URL to process
|
||||||
|
:return: The extracted domain or None if the URL is invalid
|
||||||
|
"""
|
||||||
|
if not self._is_valid_url(self.url):
|
||||||
|
self.provider = "None"
|
||||||
|
parsed_url = urlparse(self.url)
|
||||||
|
domain_parts = parsed_url.netloc.split('.')
|
||||||
|
self.provider = f"{domain_parts[-2]}.{domain_parts[-1]}" if len(domain_parts) >= 2 else "None"
|
||||||
|
|
||||||
|
def _is_valid_url(self, url: str) -> bool:
|
||||||
|
"""
|
||||||
|
Check if a given URL is valid.
|
||||||
|
|
||||||
|
:param url: The URL to validate
|
||||||
|
:return: True if the URL is valid, False otherwise
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
result = urlparse(url)
|
||||||
|
return all([result.scheme, result.netloc])
|
||||||
|
except ValueError:
|
||||||
|
return False
|
|
@ -0,0 +1,24 @@
|
||||||
|
class Provider():
|
||||||
|
|
||||||
|
def __init__(self, title: str, count: int, text_data_list) -> None:
|
||||||
|
self.title = title
|
||||||
|
self.count = count
|
||||||
|
self.text_data_list = text_data_list
|
||||||
|
|
||||||
|
def get_fake_percentage(self) -> float:
|
||||||
|
|
||||||
|
count_all = 0
|
||||||
|
count_fake = 0
|
||||||
|
for text_data in self.text_data_list:
|
||||||
|
#print(text_data.provider)
|
||||||
|
#print("FAKE" if text_data.is_fake_news else "REAL")
|
||||||
|
count_all += 1
|
||||||
|
if text_data.is_fake_news:
|
||||||
|
count_fake += 1
|
||||||
|
|
||||||
|
if count_all == 0:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
return (count_fake / count_all) * 100
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import sqlite3
|
import duckdb
|
||||||
|
|
||||||
class FakeNewsChecker:
|
class FakeNewsChecker:
|
||||||
def __init__(self, db_name='fake_news_checker.db'):
|
def __init__(self, db_name='fake_news_checker.db'):
|
||||||
|
@ -6,49 +6,50 @@ class FakeNewsChecker:
|
||||||
self.create_table()
|
self.create_table()
|
||||||
|
|
||||||
def create_connection(self):
|
def create_connection(self):
|
||||||
return sqlite3.connect(self.db_name)
|
return duckdb.connect(self.db_name)
|
||||||
|
|
||||||
def create_table(self):
|
def create_table(self):
|
||||||
conn = self.create_connection()
|
conn = self.create_connection()
|
||||||
cursor = conn.cursor()
|
conn.execute('''
|
||||||
cursor.execute('''
|
|
||||||
CREATE TABLE IF NOT EXISTS url_info (
|
CREATE TABLE IF NOT EXISTS url_info (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY,
|
||||||
url TEXT NOT NULL,
|
url VARCHAR NOT NULL,
|
||||||
anbieter TEXT NOT NULL,
|
anbieter VARCHAR NOT NULL,
|
||||||
is_fake_news BOOLEAN NOT NULL
|
is_fake_news BOOLEAN NOT NULL
|
||||||
)
|
)
|
||||||
''')
|
''')
|
||||||
conn.commit()
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
def get_next_id(self):
|
||||||
|
conn = self.create_connection()
|
||||||
|
result = conn.execute('SELECT COALESCE(MAX(id), 0) + 1 FROM url_info').fetchone()
|
||||||
|
conn.close()
|
||||||
|
return result[0]
|
||||||
|
|
||||||
def insert_data(self, url, anbieter, is_fake_news):
|
def insert_data(self, url, anbieter, is_fake_news):
|
||||||
conn = self.create_connection()
|
conn = self.create_connection()
|
||||||
cursor = conn.cursor()
|
next_id = self.get_next_id()
|
||||||
cursor.execute('''
|
conn.execute('''
|
||||||
INSERT INTO url_info (url, anbieter, is_fake_news)
|
INSERT INTO url_info (id, url, anbieter, is_fake_news)
|
||||||
VALUES (?, ?, ?)
|
VALUES (?, ?, ?, ?)
|
||||||
''', (url, anbieter, is_fake_news))
|
''', [next_id, url, anbieter, bool(is_fake_news)])
|
||||||
conn.commit()
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
def fetch_data(self):
|
def fetch_data(self):
|
||||||
conn = self.create_connection()
|
conn = self.create_connection()
|
||||||
cursor = conn.cursor()
|
result = conn.execute('SELECT * FROM url_info').fetchall()
|
||||||
cursor.execute('SELECT * FROM url_info')
|
|
||||||
rows = cursor.fetchall()
|
|
||||||
conn.close()
|
conn.close()
|
||||||
return rows
|
return result
|
||||||
|
|
||||||
# Beispielnutzung der Klasse
|
# Beispielnutzung der Klasse
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
checker = FakeNewsChecker()
|
checker = FakeNewsChecker()
|
||||||
|
|
||||||
# Daten hinzufügen
|
# Daten hinzufügen
|
||||||
checker.insert_data('https://example.com/news/123', 'Example News', 0)
|
checker.insert_data('https://example.com/news/123', 'Example News', False)
|
||||||
checker.insert_data('https://fakenews.com/article/456', 'Fake News', 1)
|
checker.insert_data('https://fakenews.com/article/456', 'Fake News', True)
|
||||||
|
|
||||||
# Daten abrufen
|
# Daten abrufen
|
||||||
data = checker.fetch_data()
|
data = checker.fetch_data()
|
||||||
for row in data:
|
for row in data:
|
||||||
print(f"ID: {row[0]}, URL: {row[1]}, Anbieter: {row[2]}, Fake News: {'Ja' if row[3] else 'Nein'}")
|
print(f"ID: {row[0]}, URL: {row[1]}, Anbieter: {row[2]}, Fake News: {'Ja' if row[3] else 'Nein'}")
|
|
@ -38,6 +38,10 @@ class MainFrame(ctk.CTkFrame):
|
||||||
self.header = ctk.CTkLabel(self.scrollview, text="Leaderboard", font=("Arial", 24, "bold"))
|
self.header = ctk.CTkLabel(self.scrollview, text="Leaderboard", font=("Arial", 24, "bold"))
|
||||||
self.header.pack(pady=10, padx=10, anchor="w")
|
self.header.pack(pady=10, padx=10, anchor="w")
|
||||||
|
|
||||||
|
# Container für Provider-Einträge
|
||||||
|
self.provider_container = ctk.CTkFrame(self.scrollview)
|
||||||
|
self.provider_container.pack(fill="both", expand=True)
|
||||||
|
|
||||||
def set_controller(self, controller):
|
def set_controller(self, controller):
|
||||||
self.controller = controller
|
self.controller = controller
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue