| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| <title>zvirevo</title> |
| <link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}"> |
| <link href="https://fonts.googleapis.com/css2?family=Jacques+Francois+Shadow&display=swap" rel="stylesheet"> |
| <link href="https://fonts.googleapis.com/css2?family=Jacques+Francois&display=swap" rel="stylesheet"> |
| <link href="https://fonts.googleapis.com/css2?family=Kavoon&display=swap" rel="stylesheet"> |
| <link href="https://fonts.googleapis.com/css2?family=Itim&display=swap" rel="stylesheet"> |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"> |
|
|
|
|
| </head> |
|
|
| <body> |
|
|
|
|
| |
| <section id="welcome" class="welcome"> |
| |
| <header> |
| |
| <nav> |
|
|
| |
| <div class="logo"> |
| <img src="{{ url_for('static', filename='images/logo.png') }}" alt="Example Image"> |
| |
| <p>Zvirevo</p> |
| </div> |
| |
|
|
| |
| <ul> |
| <li><a href="#welcome">About</a></li> |
| <li><a href="#embeddings">Embeddings</a></li> |
| <li><a href="#computations">Computations</a></li> |
| <li><a href="#contact">Contact</a></li> |
| </ul> |
| </nav> |
| <hr> |
| </header> |
|
|
| |
| <div class="welcomeMsg"> |
| <img src="{{ url_for('static', filename='images/welcome.png') }}" alt="Example Image"> |
| |
| <div class="rectangle"></div> |
| <h1>Welcome to <span style="color:rgb(163, 46, 199)">Zvirevo</span></h1> |
|
|
| <div class="container"> |
| <div class="ellipse"></div> |
|
|
| <div class="ellipse top"> |
| <div class="text">Increasing accessibility and functionality of <span style="color:rgb(171, 10, 203)">AI</span> through enhancing NLP capabilities for agglutinitive <span style="color:rgb(171, 10, 203)">African languages</span> with complex morphologies. |
| </div> |
| </div> |
| </div> |
|
|
| </div> |
|
|
|
|
|
|
| </section> |
|
|
|
|
|
|
|
|
|
|
|
|
| |
| <section id="embeddings"> |
| <h1>Perform Word <br><span style="color:rgb(163, 46, 199)">Embeddings</span></h1> |
| <img src="{{ url_for('static', filename='images/nlp.png') }}" alt="NLP Image"> |
| |
| <div class="generate"> |
| <form id="embeddingForm" class="word"> |
| <div class="word"> |
| <div class="type-word"> |
| <input type="text" id="wordInput" placeholder="Enter the word here e.g. mukadzi" required> |
| </div> |
| |
| <div class="btns1"> |
| |
| <div class="model"> |
| <label for="modelSelect">Choose model</label> |
| <select id="modelSelect" name="modelSelect" required> |
| |
| <option value="word2vec">Word2Vec</option> |
| <option value="fasttext">FastText</option> |
| </select> |
| </div> |
| |
| |
| <div class="top-n"> |
| <label for="topNSelect">Top-n</label> |
| <select id="topNSelect" name="topNSelect" required> |
| |
| <option value="1">1</option> |
| <option value="2">2</option> |
| <option value="3">3</option> |
| <option value="4">4</option> |
| <option value="5">5</option> |
| </select> |
| </div> |
| |
| |
| <div class="submit-btn"> |
| <button type="submit">Submit</button> |
| </div> |
| </div> |
| </div> |
| </form> |
| |
| <div class="result1"> |
| <div class="result-title"> |
| <h2>Results</h2> |
| </div> |
| |
| <div class="outcome"> |
| <ul id="resultsList"> |
| |
| </ul> |
| </div> |
| </div> |
| </div> |
| </section> |
| |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
|
|
|
|
| <section id="computations"> |
| <h1>Perform Word <br><span style="color:rgb(163, 46, 199)">Computations</span></h1> |
| <img src="{{ url_for('static', filename='images/nlp.png') }}" alt="Example Image"> |
| |
|
|
| <div class="generate"> |
| <form id="computationForm" class="word"> |
| <div class="word"> |
| <div class="type-word"> |
| <input id="expressionInput" type="text" placeholder="Enter expression e.g. vana + vasikana - vakomana" required> |
| </div> |
| <div class="btns1"> |
| |
| <div class="model"> |
| <label for="modelSelectComputation">Choose model</label> |
| <select id="modelSelectComputation" name="modelSelectComputation" required> |
| <option value="word2vec">Word2Vec</option> |
| <option value="fasttext">FastText</option> |
| </select> |
| </div> |
| |
| <div class="top-n"> |
| <label for="topNSelectComputation">Top-n</label> |
| <select id="topNSelectComputation" name="topNSelectComputation" required> |
| <option value="1">1</option> |
| <option value="2">2</option> |
| <option value="3">3</option> |
| <option value="4">4</option> |
| <option value="5">5</option> |
| </select> |
| </div> |
| |
| <div class="submit-btn"> |
| <button type="submit">Submit</button> |
| </div> |
| </div> |
| </div> |
| </form> |
| <div class="result2"> |
| <div class="result-title"> |
| <h2>Results</h2> |
| </div> |
| <div class="outcome"> |
| <ul id="computationResultsList"> |
| |
| </ul> |
| </div> |
| </div> |
| |
| </div> |
| |
| </section> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
| <section id="contact"> |
|
|
| |
| <div class="personal-info"> |
| <div class="people"> |
| <div class="daisy"> |
| <img src="{{ url_for('static', filename='images/daisy.png') }}" alt="Example Image"> |
| |
| <div class="daisy-bio"> |
| <p>Hello! <br> |
| "I'm Daisy, a passionate innovator in the tech world. |
| Creating this project has been an incredibly fulfilling journey for me." |
| </p> |
| </div> |
|
|
| </div> |
|
|
| <div class="ruva"> |
| <img src="{{ url_for('static', filename='images/ruva.png') }}" alt="Example Image"> |
| |
| <div class="ruva-bio"> |
| <p> |
| Hi there, <br> “I'm Ruva, a tech ethusiast. |
| Building this project was the most beautiful thing i have ever done in my life” |
| |
| </p> |
| </div> |
|
|
| </div> |
|
|
| </div> |
|
|
|
|
|
|
| <hr> |
|
|
|
|
|
|
| <div class="form-container"> |
| <form id="contactForm" action="/submit" method="POST"> |
| <h2>Contact Us</h2> |
| <hr> |
| |
| <div class="form-group"> |
| <label for="name">Name:</label> |
| <input type="text" id="name" name="name" required> |
| </div> |
| |
| <div class="form-group"> |
| <label for="email">Email:</label> |
| <input type="email" id="email" name="email" required> |
| </div> |
| |
| <div class="form-group"> |
| <textarea id="message" name="message" rows="4" required placeholder="Type message ... "></textarea> |
| </div> |
| |
| |
| |
| <div class="form-group checkbox-group"> |
| <label> |
| <input type="checkbox" name="subscribe" checked> Subscribe to our newsletter |
| </label> |
| </div> |
| |
| <button type="submit">Submit</button> |
| <div id="responseMessage"></div> |
| </form> |
| </div> |
|
|
|
|
| </div> |
|
|
|
|
|
|
| <footer> |
| <p>© zvirevo 2024</p> |
| <div class="social-media-icons"> |
| <a href="https://www.facebook.com" target="_blank"><i class="fab fa-facebook-f"></i></a> |
| <a href="https://www.twitter.com" target="_blank"><i class="fab fa-twitter"></i></a> |
| <a href="https://www.instagram.com" target="_blank"><i class="fab fa-instagram"></i></a> |
| <a href="https://www.linkedin.com/in/daisy-tsenesa-577b5a221/" target="_blank"><i class="fab fa-linkedin-in"></i></a> |
| <a href="https://github.com/daisy-py-bot" target="_blank"><i class="fab fa-github"></i></a> |
| </div> |
|
|
| </footer> |
| </section> |
| |
| </body> |
|
|
| <script> |
| |
| document.getElementById('embeddingForm').addEventListener('submit', function(e) { |
| e.preventDefault(); |
| const word = document.getElementById('wordInput').value; |
| const modelType = document.getElementById('modelSelect').value; |
| const topN = document.getElementById('topNSelect').value; |
| |
| fetch('/get_similar_words', { |
| method: 'POST', |
| headers: { 'Content-Type': 'application/json' }, |
| body: JSON.stringify({ word: word, model_type: modelType, top_n: topN }) |
| }) |
| .then(response => response.json()) |
| .then(data => { |
| const resultsList = document.getElementById('resultsList'); |
| resultsList.innerHTML = ''; |
| |
| if (data.error) { |
| resultsList.innerHTML = `<li>Error: ${data.error}</li>`; |
| } else { |
| data.similar_words.forEach(item => { |
| const listItem = document.createElement('li'); |
| listItem.textContent = `${item[0]}: ${item[1].toFixed(4)}`; |
| resultsList.appendChild(listItem); |
| }); |
| } |
| }) |
| .catch(error => console.error('Error:', error)); |
| }); |
| |
| |
| |
| |
| document.getElementById('computationForm').addEventListener('submit', function(e) { |
| e.preventDefault(); |
| const expression = document.getElementById('expressionInput').value; |
| const modelType = document.getElementById('modelSelectComputation').value; |
| const topN = document.getElementById('topNSelectComputation').value; |
| |
| fetch('/compute', { |
| method: 'POST', |
| headers: { 'Content-Type': 'application/json' }, |
| body: JSON.stringify({ expression: expression, model: modelType, top_n: topN }) |
| }) |
| .then(response => response.json()) |
| .then(data => { |
| const computationResultsList = document.getElementById('computationResultsList'); |
| computationResultsList.innerHTML = ''; |
| |
| if (data.error) { |
| computationResultsList.innerHTML = `<li>${data.error}</li>`; |
| } else { |
| data.forEach(item => { |
| const listItem = document.createElement('li'); |
| listItem.textContent = `${item.word}: ${item.similarity.toFixed(4)}`; |
| computationResultsList.appendChild(listItem); |
| }); |
| } |
| }) |
| .catch(error => console.error('Error:', error)); |
| }); |
| |
| |
| |
| |
| document.getElementById('contactForm').addEventListener('submit', function(event) { |
| event.preventDefault(); |
| |
| const formData = new FormData(this); |
| fetch('/submit', { |
| method: 'POST', |
| body: formData |
| }) |
| .then(response => response.json()) |
| .then(data => { |
| document.getElementById('responseMessage').innerText = data.message; |
| }) |
| .catch(error => { |
| console.error('Error:', error); |
| document.getElementById('responseMessage').innerText = 'An error occurred. Please try again.'; |
| }); |
| }); |
| |
| </script> |
| </html> |