Spaces:
Sleeping
Sleeping
Upload 13 files
Browse files- Dockerfile +35 -0
- app.py +162 -0
- requirements.txt +6 -0
- static/banner.png +0 -0
- static/comment_logo.png +0 -0
- static/crystal_background.jpg +0 -0
- static/css/style.css +124 -0
- static/gator_logo.jpeg +0 -0
- static/logo.jpg +0 -0
- static/turkcell_logo.png +0 -0
- templates/after.html +105 -0
- templates/home.html +122 -0
- templates/image/crystal_background.jpg +0 -0
Dockerfile
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Use the official Python 3.10 image
|
| 2 |
+
FROM python:3.10
|
| 3 |
+
|
| 4 |
+
# Set the working directory to /code
|
| 5 |
+
WORKDIR /code
|
| 6 |
+
|
| 7 |
+
# Copy the current directory contents into the container at /code
|
| 8 |
+
COPY ./requirements.txt /code/requirements.txt
|
| 9 |
+
|
| 10 |
+
# Flask uygulamasını ve ilgili dizinleri kopyala
|
| 11 |
+
COPY static/ /code/static
|
| 12 |
+
COPY templates/ /code/templates
|
| 13 |
+
|
| 14 |
+
# Install requirements.txt
|
| 15 |
+
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
| 16 |
+
|
| 17 |
+
# Set up a new user named "user" with user ID 1000
|
| 18 |
+
RUN useradd -m -u 1000 user
|
| 19 |
+
# Switch to the "user" user
|
| 20 |
+
USER user
|
| 21 |
+
# Set home to the user's home directory
|
| 22 |
+
ENV HOME=/home/user PATH=/home/user/.local/bin:$PATH
|
| 23 |
+
|
| 24 |
+
# Set the working directory to the user's home directory
|
| 25 |
+
WORKDIR $HOME/code
|
| 26 |
+
|
| 27 |
+
# Copy the current directory contents into the container at $HOME/app setting the owner to the user
|
| 28 |
+
COPY --chown=user . $HOME/code
|
| 29 |
+
|
| 30 |
+
ENV FLASK_APP=app.py
|
| 31 |
+
|
| 32 |
+
EXPOSE 8000
|
| 33 |
+
|
| 34 |
+
# Start the FastAPI app on port 7860, the default port expected by Spaces
|
| 35 |
+
CMD ["flask", "run", "--host=0.0.0.0"]
|
app.py
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from flask import Flask, render_template, request
|
| 2 |
+
from bs4 import BeautifulSoup
|
| 3 |
+
from urllib.request import urlopen, Request
|
| 4 |
+
from google_play_scraper import reviews
|
| 5 |
+
from app_store_scraper import AppStore
|
| 6 |
+
import re
|
| 7 |
+
|
| 8 |
+
app = Flask(__name__)
|
| 9 |
+
|
| 10 |
+
################################################################################################
|
| 11 |
+
# Sikayetvar
|
| 12 |
+
################################################################################################
|
| 13 |
+
|
| 14 |
+
headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
|
| 15 |
+
|
| 16 |
+
def sikayetvar_get_complaint_links(url):
|
| 17 |
+
yorum_linkleri = []
|
| 18 |
+
page_url = f"{url}?page=1"
|
| 19 |
+
req = Request(page_url, headers=headers)
|
| 20 |
+
page_request = urlopen(req)
|
| 21 |
+
soup = BeautifulSoup(page_request.read(), "html.parser")
|
| 22 |
+
containers = soup.find_all("article", class_="card-v2 card-v3 ga-v ga-c")
|
| 23 |
+
for i in range(3):
|
| 24 |
+
a_div = containers[i].find("a", class_="complaint-layer card-v3-container")
|
| 25 |
+
data_url = a_div['href']
|
| 26 |
+
print(data_url)
|
| 27 |
+
yorum_linkleri.append("https://www.sikayetvar.com" + data_url)
|
| 28 |
+
return yorum_linkleri
|
| 29 |
+
|
| 30 |
+
def sikayetvar_scrape_complaint(url):
|
| 31 |
+
req = Request(url, headers=headers)
|
| 32 |
+
page_request = urlopen(req)
|
| 33 |
+
soup = BeautifulSoup(page_request, "html.parser")
|
| 34 |
+
try:
|
| 35 |
+
yorum = soup.find("div", class_="complaint-detail-description").text.strip()
|
| 36 |
+
return yorum
|
| 37 |
+
except Exception as e:
|
| 38 |
+
print(f"Error processing {url}: {e}")
|
| 39 |
+
return None
|
| 40 |
+
|
| 41 |
+
def sikayetvar_find(search):
|
| 42 |
+
url = f"https://www.sikayetvar.com/{search}"
|
| 43 |
+
review_links = sikayetvar_get_complaint_links(url)
|
| 44 |
+
reviews_arr = []
|
| 45 |
+
|
| 46 |
+
for idx, link in enumerate(review_links, 1):
|
| 47 |
+
complaint_data = sikayetvar_scrape_complaint(link)
|
| 48 |
+
reviews_arr.append({f"{idx}": complaint_data})
|
| 49 |
+
|
| 50 |
+
return reviews_arr
|
| 51 |
+
|
| 52 |
+
################################################################################################
|
| 53 |
+
|
| 54 |
+
################################################################################################
|
| 55 |
+
# Google Play Store
|
| 56 |
+
################################################################################################
|
| 57 |
+
|
| 58 |
+
def playstore_get_reviews(url):
|
| 59 |
+
result = reviews(url, lang="tr", country="tr", count=3)
|
| 60 |
+
reviews_arr = []
|
| 61 |
+
for idx, r in enumerate(result[0]):
|
| 62 |
+
reviews_arr.append({f"{idx}": r["content"]})
|
| 63 |
+
|
| 64 |
+
return reviews_arr
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
def playstore_find(search):
|
| 68 |
+
search_json = {
|
| 69 |
+
"paycell": "com.turkcell.paycell",
|
| 70 |
+
"turkcell": "com.ttech.android.onlineislem",
|
| 71 |
+
"bip": "com.turkcell.bip",
|
| 72 |
+
"gnç": "com.solidict.gnc2",
|
| 73 |
+
"upcall": "com.turkcell.sesplus",
|
| 74 |
+
"platinum": "com.turkcellplatinum.main",
|
| 75 |
+
"calarkendinlet": "tr.com.turkcell.calarkendinlet",
|
| 76 |
+
"tv+": "com.turkcell.ott",
|
| 77 |
+
"fizy": "com.turkcell.gncplay",
|
| 78 |
+
"lifebox": "tr.com.turkcell.akillidepo"
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
url = search_json[search]
|
| 82 |
+
result = playstore_get_reviews(url)
|
| 83 |
+
return result
|
| 84 |
+
|
| 85 |
+
################################################################################################
|
| 86 |
+
|
| 87 |
+
################################################################################################
|
| 88 |
+
# App Store
|
| 89 |
+
################################################################################################
|
| 90 |
+
|
| 91 |
+
def appstore_get_reviews(app_name, app_id):
|
| 92 |
+
data = AppStore(country='tr', app_name=app_name, app_id=app_id)
|
| 93 |
+
data.review(how_many=1)
|
| 94 |
+
|
| 95 |
+
reviews_arr = []
|
| 96 |
+
print(data.reviews)
|
| 97 |
+
print(len(data.reviews))
|
| 98 |
+
for idx, r in enumerate(data.reviews[:3]):
|
| 99 |
+
reviews_arr.append({f"{idx}": r["review"]})
|
| 100 |
+
|
| 101 |
+
return reviews_arr
|
| 102 |
+
|
| 103 |
+
def appstore_find(search):
|
| 104 |
+
search_json = {
|
| 105 |
+
"paycell": { "app_name": "Paycell - Digital Wallet", "app_id": 1198609962 },
|
| 106 |
+
"turkcell": { "app_name": "Turkcell", "app_id": 335162906 },
|
| 107 |
+
"bip": { "app_name": "BiP - Messenger, Video Call", "app_id": 583274826 },
|
| 108 |
+
"gnç": { "app_name": "GNÇ", "app_id": 894318685 },
|
| 109 |
+
"upcall": { "app_name": "UpCall", "app_id": 1149307476 },
|
| 110 |
+
"platinum": { "app_name": "Turkcell Platinum", "app_id": 671494224 },
|
| 111 |
+
"calarkendinlet": { "app_name": "ÇalarkenDinlet", "app_id": 1026830839 },
|
| 112 |
+
"tv+": { "app_name": "TV+", "app_id": 835880015 },
|
| 113 |
+
"fizy": { "app_name": "fizy – Music & Video", "app_id": 404239912 },
|
| 114 |
+
"lifebox": { "app_name": "Lifebox: Storage & Backup", "app_id": 665036334 }
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
app_name = search_json[search]["app_name"]
|
| 118 |
+
app_id = search_json[search]["app_id"]
|
| 119 |
+
result = appstore_get_reviews(app_name, app_id)
|
| 120 |
+
return result
|
| 121 |
+
|
| 122 |
+
################################################################################################
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
@app.route("/")
|
| 126 |
+
def main():
|
| 127 |
+
return render_template('./home.html')
|
| 128 |
+
|
| 129 |
+
""" @app.route("/predict", methods=['POST'])
|
| 130 |
+
def home():
|
| 131 |
+
search = request.form['search']
|
| 132 |
+
firm = request.form["firm"]
|
| 133 |
+
if firm == "sikayetvar":
|
| 134 |
+
reviews_arr = sikayetvar_find(search)
|
| 135 |
+
elif firm == "playstore":
|
| 136 |
+
reviews_arr = playstore_find(search)
|
| 137 |
+
elif firm == "appstore":
|
| 138 |
+
reviews_arr = appstore_find(search)
|
| 139 |
+
|
| 140 |
+
pred = "Negative"
|
| 141 |
+
return render_template('./after.html', data=reviews_arr) """
|
| 142 |
+
@app.route("/predict", methods=['POST'])
|
| 143 |
+
def home():
|
| 144 |
+
search = request.form['search']
|
| 145 |
+
firm = request.form["firm"]
|
| 146 |
+
if firm == "sikayetvar":
|
| 147 |
+
reviews_arr = sikayetvar_find(search)
|
| 148 |
+
elif firm == "playstore":
|
| 149 |
+
reviews_arr = playstore_find(search)
|
| 150 |
+
elif firm == "appstore":
|
| 151 |
+
reviews_arr = appstore_find(search)
|
| 152 |
+
|
| 153 |
+
# Başlığı dinamik olarak ayarla
|
| 154 |
+
title = f"{firm} sitesinde {search} firmasi için yapılan yorumlar"
|
| 155 |
+
print(reviews_arr)
|
| 156 |
+
def clean_comment(comment_dict):
|
| 157 |
+
comment = next(iter(comment_dict.values()))
|
| 158 |
+
return re.sub(r"\{'\d+':\s'(.+)'\}", r"\1", comment)
|
| 159 |
+
reviews_arr = [clean_comment(review) for review in reviews_arr]
|
| 160 |
+
return render_template('./after.html', data=reviews_arr, title=title, search=search)
|
| 161 |
+
|
| 162 |
+
app.run(port=8000, debug=True)
|
requirements.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Flask
|
| 2 |
+
re
|
| 3 |
+
urllib
|
| 4 |
+
google-play-scraper
|
| 5 |
+
app-store-scraper
|
| 6 |
+
beautifulsoup4
|
static/banner.png
ADDED
|
static/comment_logo.png
ADDED
|
static/crystal_background.jpg
ADDED
|
static/css/style.css
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
* {
|
| 2 |
+
--bg-color: #ff;
|
| 3 |
+
--glass-color: rgb(0, 0, 0, 0.8);
|
| 4 |
+
--searchbar-height: 3.0rem;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
body {
|
| 8 |
+
background: var(--bg-color);
|
| 9 |
+
margin: 0;
|
| 10 |
+
font-family: 'Poppins', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
| 11 |
+
display: flex;
|
| 12 |
+
flex-direction: column;
|
| 13 |
+
justify-content: space-between;
|
| 14 |
+
height: 100vh;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
nav {
|
| 18 |
+
height: 3em;
|
| 19 |
+
display: flex;
|
| 20 |
+
align-items: center;
|
| 21 |
+
justify-content: space-between;
|
| 22 |
+
padding: 0 1rem;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
.links:hover {
|
| 26 |
+
text-decoration: underline;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
.icon-container img {
|
| 30 |
+
height: 1.5em;
|
| 31 |
+
border-radius: 50%;
|
| 32 |
+
display: flex;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
.center-container {
|
| 36 |
+
display: flex;
|
| 37 |
+
flex-direction: column;
|
| 38 |
+
align-items: center;
|
| 39 |
+
gap: 1rem;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
.searchbar-container {
|
| 43 |
+
border: 1px solid var(--glass-color);
|
| 44 |
+
height: var(--searchbar-height);
|
| 45 |
+
width: 90%;
|
| 46 |
+
max-width: 600px;
|
| 47 |
+
display: flex;
|
| 48 |
+
align-items: center;
|
| 49 |
+
justify-content: space-between;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.searchbar-container img {
|
| 53 |
+
height: 1.5rem;
|
| 54 |
+
padding: 0 0.5rem;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
.searchbar-container input {
|
| 58 |
+
height: 40px;
|
| 59 |
+
outline: none;
|
| 60 |
+
border: none;
|
| 61 |
+
margin-top: 5px;
|
| 62 |
+
width: 100%;
|
| 63 |
+
color: black;
|
| 64 |
+
background-color: white;
|
| 65 |
+
font-family: poppins, monospace;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
.buttons-container {
|
| 69 |
+
display: flex;
|
| 70 |
+
gap: 1rem;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.buttons-container input {
|
| 74 |
+
height: var(--searchbar-height);
|
| 75 |
+
background-color: var(--hover-color);
|
| 76 |
+
color: white;
|
| 77 |
+
background-color: #9c9c9c;
|
| 78 |
+
font-family: poppins, monospace;
|
| 79 |
+
padding: 0 1rem;
|
| 80 |
+
font-weight: 300;
|
| 81 |
+
border: 1px solid transparent;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
.buttons-container input:hover {
|
| 85 |
+
border: 1px solid var(--glass-color);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
footer {
|
| 89 |
+
background-color: #ebeaea;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
footer a {
|
| 93 |
+
color: black;
|
| 94 |
+
text-decoration: none;
|
| 95 |
+
opacity: 0.6;
|
| 96 |
+
font-weight: 300;
|
| 97 |
+
font-size: 0.8rem;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
footer a:hover {
|
| 101 |
+
text-decoration: underline;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
.footer-links div:not(:nth-of-type(2)) a {
|
| 105 |
+
padding: 0 0.5rem;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
footer img {
|
| 109 |
+
height: 0.7rem;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
.footer-links {
|
| 113 |
+
display: flex;
|
| 114 |
+
flex-wrap: wrap;
|
| 115 |
+
gap: 1rem;
|
| 116 |
+
justify-content: space-evenly;
|
| 117 |
+
padding: 1rem;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
form {
|
| 121 |
+
padding-top: 16;
|
| 122 |
+
width: 700;
|
| 123 |
+
display: flex;
|
| 124 |
+
}
|
static/gator_logo.jpeg
ADDED
|
static/logo.jpg
ADDED
|
static/turkcell_logo.png
ADDED
|
templates/after.html
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
|
| 4 |
+
<head>
|
| 5 |
+
<meta charset="UTF-8">
|
| 6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 7 |
+
<title>{{ title }}</title>
|
| 8 |
+
<!-- Bootstrap CSS -->
|
| 9 |
+
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&display=swap" rel="stylesheet">
|
| 10 |
+
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet">
|
| 11 |
+
<style>
|
| 12 |
+
.custom-heading {
|
| 13 |
+
color: #0f0b5d;
|
| 14 |
+
font-family: 'Montserrat', sans-serif;
|
| 15 |
+
font-weight: bold;
|
| 16 |
+
font-size: 18px;
|
| 17 |
+
/* İstediğiniz boyutu ayarlayın */
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
body {
|
| 21 |
+
background-image: url("{{ url_for('static', filename='crystal_background.jpg') }}");
|
| 22 |
+
background-size: cover;
|
| 23 |
+
/* Görseli merkeze hizala */
|
| 24 |
+
background-repeat: repeat;
|
| 25 |
+
/* Görselin tekrarını engelle */
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.container {
|
| 29 |
+
border-radius: 8px;
|
| 30 |
+
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
| 31 |
+
padding: 20px;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
.data-item {
|
| 35 |
+
background-color: #e9ecef;
|
| 36 |
+
border-radius: 4px;
|
| 37 |
+
padding: 15px;
|
| 38 |
+
color: #495057;
|
| 39 |
+
font-size: 18px;
|
| 40 |
+
margin-bottom: 10px;
|
| 41 |
+
word-wrap: break-word;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
.data-title {
|
| 45 |
+
font-weight: bold;
|
| 46 |
+
margin-bottom: 10px;
|
| 47 |
+
|
| 48 |
+
}
|
| 49 |
+
</style>
|
| 50 |
+
</head>
|
| 51 |
+
|
| 52 |
+
<body>
|
| 53 |
+
<div class="container">
|
| 54 |
+
<h1 class="mb-4" style=" text-align: center;"> YORUMLAR </h1>
|
| 55 |
+
<div style="display: flex; flex-direction: row;">
|
| 56 |
+
<div
|
| 57 |
+
style="height: 600px; width: 360px; margin-left: 60px; margin-right: 60px; background-color: rgb(255, 255, 255); display: flex; flex-direction: column; align-items: center; border-color: rgb(213, 210, 210); border-width: 1px; border-style: solid;">
|
| 58 |
+
<img src="{{ url_for('static', filename='gator_logo.jpeg') }}" alt="Logo" class="img-fluid"
|
| 59 |
+
style="max-width: 200px; margin-top: 20px; margin-bottom: 10px;">
|
| 60 |
+
<h3 style="font-family: 'Montserrat', sans-serif;"> G4TOR </h3>
|
| 61 |
+
<p style="font-family: 'Montserrat', sans-serif; font-size: 18px; color: black;"> Türkçe Doğal Dil İşleme Yarışması </p>
|
| 62 |
+
<div
|
| 63 |
+
style="display: flex; width: 80%; background-color: #35afd4; border-bottom: 2px,solid,rgb(138, 36, 172); margin-bottom: 3px; justify-content: center; align-items: center;">
|
| 64 |
+
<p class="custom-heading" > GÜNCEL YORUMLAR </p>
|
| 65 |
+
</div>
|
| 66 |
+
<div
|
| 67 |
+
style="display: flex; width: 80%; background-color: #35afd4; border-bottom: 1px,solid,rgb(43, 122, 117); justify-content: center; align-items: center;">
|
| 68 |
+
<p class="custom-heading" > YORUM ANALİZİ </p>
|
| 69 |
+
</div>
|
| 70 |
+
</div>
|
| 71 |
+
<div style="width: 70%;">
|
| 72 |
+
{% for item in data %}
|
| 73 |
+
<div
|
| 74 |
+
style="padding: 10px; display: flex; flex-direction: column; width: 90%; background-color: #fff; height: 200px; border-color: rgb(213, 210, 210); border-width: 1px; border-style: solid; border-radius: 4px; margin-bottom: 10px;">
|
| 75 |
+
<div style="display: flex; flex-direction: row;">
|
| 76 |
+
<img src="{{ url_for('static', filename='comment_logo.png') }}" alt="Logo" class="img-fluid"
|
| 77 |
+
style="max-width: 50px; margin-bottom: 25px;">
|
| 78 |
+
<div
|
| 79 |
+
style="display: flex; background-color: #15a84f; width: 100px; height: 30px; justify-content: center; align-items: center; margin-left: 30px; margin-top: 5px;">
|
| 80 |
+
<p style="color: #fff;"> OLUMLU </p>
|
| 81 |
+
</div>
|
| 82 |
+
</div>
|
| 83 |
+
<span style="font-size: 20px; color: black; font-weight: 600;">
|
| 84 |
+
{{ item }}
|
| 85 |
+
</span>
|
| 86 |
+
<br>
|
| 87 |
+
<div style="display: flex; flex-direction: row;">
|
| 88 |
+
<p style="font-size: 18px; color: rgb(162, 162, 162); font-weight: 600;"> 2024-08-05 12.59.45
|
| 89 |
+
Sikayetvar - Turkcell </p>
|
| 90 |
+
<div
|
| 91 |
+
style="display: flex; background-color: #35afd4; width: 80px; height: 30px; margin-left: 30px; margin-top: 10px; justify-content: center; align-items: center;">
|
| 92 |
+
<h3> Turkcell </h3>
|
| 93 |
+
</div>
|
| 94 |
+
</div>
|
| 95 |
+
</div>
|
| 96 |
+
{% endfor %}
|
| 97 |
+
</div>
|
| 98 |
+
</div>
|
| 99 |
+
</div>
|
| 100 |
+
<!-- Bootstrap JS, Popper.js, and jQuery (optional) -->
|
| 101 |
+
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
|
| 102 |
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/5.3.0/js/bootstrap.min.js"></script>
|
| 103 |
+
</body>
|
| 104 |
+
|
| 105 |
+
</html>
|
templates/home.html
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!-- <!DOCTYPE html>
|
| 2 |
+
<html lang="tr">
|
| 3 |
+
|
| 4 |
+
<head>
|
| 5 |
+
<meta charset="UTF-8">
|
| 6 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
| 7 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 8 |
+
<title>G4T0R2 SEARCH</title>
|
| 9 |
+
<link rel="stylesheet" href="{{ url_for('static', filename = 'css/style.css') }}" />
|
| 10 |
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
| 11 |
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
| 12 |
+
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap" rel="stylesheet">
|
| 13 |
+
</head>
|
| 14 |
+
|
| 15 |
+
<body>
|
| 16 |
+
<div class="center-container">
|
| 17 |
+
<div class="logo-container">
|
| 18 |
+
<img src="{{ url_for('static', filename = 'banner.png') }}" alt="Logo" width="250"
|
| 19 |
+
style="margin-top: 350px;">
|
| 20 |
+
</div>
|
| 21 |
+
|
| 22 |
+
<div class="searchbar-container">
|
| 23 |
+
<form method="POST" , action="/predict" style="width: 700px;">
|
| 24 |
+
<input type="text" , name='search' , placeholder="Cumle giriniz.">
|
| 25 |
+
|
| 26 |
+
<select name="firm">
|
| 27 |
+
<option value="sikayetvar">Sikayetvar</option>
|
| 28 |
+
<option value="playstore">Play Store</option>
|
| 29 |
+
<option value="appstore">App Store</option>
|
| 30 |
+
</select>
|
| 31 |
+
|
| 32 |
+
<div class="buttons-container">
|
| 33 |
+
<input type="submit" value="Sınıflandır">
|
| 34 |
+
</div>
|
| 35 |
+
</form>
|
| 36 |
+
</div>
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
</div>
|
| 40 |
+
|
| 41 |
+
<footer>
|
| 42 |
+
<div class="footer-links">
|
| 43 |
+
<div>
|
| 44 |
+
<a href="https://github.com/thealper2/gat0r-nlp">Github</a>
|
| 45 |
+
</div>
|
| 46 |
+
<div>
|
| 47 |
+
<img src="{{ url_for('static', filename = 'logo.jpg') }}" alt="logo" width="20">
|
| 48 |
+
<a href="https://github.com/thealper2/gat0r-nlp ">GAT0R</a>
|
| 49 |
+
</div>
|
| 50 |
+
</div>
|
| 51 |
+
</footer>
|
| 52 |
+
|
| 53 |
+
</body>
|
| 54 |
+
|
| 55 |
+
</html> -->
|
| 56 |
+
|
| 57 |
+
<!DOCTYPE html>
|
| 58 |
+
<html lang="tr">
|
| 59 |
+
<style>
|
| 60 |
+
body {
|
| 61 |
+
font-family: 'Poppins', sans-serif;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
footer {
|
| 65 |
+
background-color: #f8f9fa;
|
| 66 |
+
}
|
| 67 |
+
</style>
|
| 68 |
+
|
| 69 |
+
<head>
|
| 70 |
+
<meta charset="UTF-8">
|
| 71 |
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
| 72 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 73 |
+
<title>G4T0R2 SEARCH</title>
|
| 74 |
+
<!-- Bootstrap CSS -->
|
| 75 |
+
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
|
| 76 |
+
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
| 77 |
+
<!-- Google Fonts -->
|
| 78 |
+
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600&display=swap" rel="stylesheet">
|
| 79 |
+
</head>
|
| 80 |
+
|
| 81 |
+
<body>
|
| 82 |
+
<div class="container text-center mt-5">
|
| 83 |
+
<div class="mb-5">
|
| 84 |
+
<img src="{{ url_for('static', filename='gator_logo.jpeg') }}" alt="Logo" class="img-fluid"
|
| 85 |
+
style="max-width: 200px;margin-top: 20px; margin-bottom: 25px;">
|
| 86 |
+
</div>
|
| 87 |
+
|
| 88 |
+
<div class="row justify-content-center">
|
| 89 |
+
<div class="col-md-8">
|
| 90 |
+
<form method="POST" action="/predict" class="form-inline justify-content-center">
|
| 91 |
+
<input type="text" name="search" class="form-control mr-2" placeholder="Cümle giriniz."
|
| 92 |
+
style="width: 300px;">
|
| 93 |
+
<select name="firm" class="form-control mr-2">
|
| 94 |
+
<option value="sikayetvar">Sikayetvar</option>
|
| 95 |
+
<option value="playstore">Play Store</option>
|
| 96 |
+
<option value="appstore">App Store</option>
|
| 97 |
+
</select>
|
| 98 |
+
<button type="submit" class="btn btn-primary">Sınıflandır</button>
|
| 99 |
+
</form>
|
| 100 |
+
</div>
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
+
<footer>
|
| 105 |
+
<div class="footer-links">
|
| 106 |
+
<div>
|
| 107 |
+
<a href="https://github.com/thealper2/gat0r-nlp">Github</a>
|
| 108 |
+
</div>
|
| 109 |
+
<div>
|
| 110 |
+
<img src="{{ url_for('static', filename = 'logo.jpg') }}" alt="logo" width="20">
|
| 111 |
+
<a href="https://github.com/thealper2/gat0r-nlp ">GAT0R</a>
|
| 112 |
+
</div>
|
| 113 |
+
</div>
|
| 114 |
+
</footer>
|
| 115 |
+
|
| 116 |
+
<!-- Bootstrap JS and dependencies -->
|
| 117 |
+
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
|
| 118 |
+
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
|
| 119 |
+
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
|
| 120 |
+
</body>
|
| 121 |
+
|
| 122 |
+
</html>
|
templates/image/crystal_background.jpg
ADDED
|