File size: 3,314 Bytes
01ace26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# -*- coding: utf-8 -*-
"""

Created on Fri Nov  6 16:26:17 2020



@author: rejid4996

"""

import streamlit as st
import numpy as np
import pandas as pd
import base64
from io import BytesIO
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
model = SentenceTransformer('distilbert-base-nli-stsb-mean-tokens')

def find_similar(vector_representation, all_representations, k=1):
    similarity_matrix = cosine_similarity(vector_representation, all_representations)
    np.fill_diagonal(similarity_matrix, 0)
    similarities = similarity_matrix[0]
    if k == 1:
        return [np.argmax(similarities)]
    elif k is not None:
        return np.flip(similarities.argsort()[-k:][::1])

def to_excel(df):
    output = BytesIO()
    writer = pd.ExcelWriter(output, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    writer.save()
    processed_data = output.getvalue()
    return processed_data

def get_table_download_link(df):
    """Generates a link allowing the data in a given panda dataframe to be downloaded

    in:  dataframe

    out: href string

    """
    val = to_excel(df)
    b64 = base64.b64encode(val)  # val looks like b'...'
    return f'<a href="data:application/octet-stream;base64,{b64.decode()}" download="extract.xlsx">Download file</a>'

def main():
    """NLP App with Streamlit"""
    
    from PIL import Image
    
    wallpaper = Image.open('thorteam.jpg')
    wallpaper = wallpaper.resize((700,350))
        
    st.sidebar.title("Semantic Search App")
    st.sidebar.success("Please reach out to https://www.linkedin.com/in/deepak-john-reji/ for more queries")
    st.sidebar.subheader("Text extraction using NLP model ")
    
    st.info("For more contents subscribe to my Youtube Channel https://www.youtube.com/channel/UCgOwsx5injeaB_TKGsVD5GQ")
    st.image(wallpaper)
    
    uploaded_file = st.sidebar.file_uploader("Choose the Knowledge base file", type="xlsx")
        
    if uploaded_file:
        df = pd.read_excel(uploaded_file)
                
        search_string = st.sidebar.text_input("your search word", "")
        
        gcr_config = st.sidebar.slider(label="choose the no of Sentences",
                           min_value=1,
                           max_value=10,
                           step=1)
    
        run_button = st.sidebar.button(label='Run Extraction')
        if run_button:
                    
            paragraph = df.iloc[:, 0]
            embeddings_distilbert = model.encode(paragraph.values)
            
            description = search_string
            K = gcr_config
                        
            distilbert_similar_indexes = find_similar(model.encode([description]), embeddings_distilbert, K)
            output_data = []
            for index in distilbert_similar_indexes:
                output_data.append(paragraph[index])
             
            output1 = pd.DataFrame(output_data, columns = ['extracted text'])
            output1.dropna()
            
            st.table(output1)
                
            st.markdown(get_table_download_link(output1), unsafe_allow_html=True)
            
        
if __name__ == "__main__":
    main()