sum / app.py
dryudhis's picture
Upload 2 files
ea00a70
Raw History Blame Contribute Delete
5.94 kB
import streamlit as st
from dotenv import load_dotenv
import os
from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
from langchain.prompts.chat import (
ChatMessagePromptTemplate,
SystemMessagePromptTemplate,
AIMessagePromptTemplate,
HumanMessagePromptTemplate
)
from langchain.callbacks import get_openai_callback
# scrapper
from langchain.document_loaders import AsyncChromiumLoader
from langchain.document_transformers import BeautifulSoupTransformer
import requests
#data
import pandas as pd
import json
from pandas import json_normalize
def rewrite(text, language='Bahasa Indonesia'):
llm = ChatOpenAI(model='gpt-3.5-turbo-16k', temperature=0)
message = [
SystemMessage(content='Your are expert blogger'),
HumanMessage(content=f'write the following text into 1000 words blog article, use language: {language}, use casual tone. and give clickbait title. TEXT: {text}')
]
with get_openai_callback() as cost:
output = llm(message).content
return output, cost
def extract_seo_keywords(text):
llm = ChatOpenAI(model='gpt-3.5-turbo-16k', temperature=0)
message = [
SystemMessage(content='Your are an SEO expert'),
HumanMessage(content=f'indentify 10 SEO keywords in this text. order by the most relevance keyword. output format: comma separated value. example output: keyword,another keyword,some keyword. TEXT: {text}')
]
with get_openai_callback() as cost:
keywords = llm(message).content.split(',')
array_keywords = [i.lstrip() for i in keywords]
return array_keywords, cost
def summarize(text, language='Bahasa Indonesia'):
llm = ChatOpenAI(model='gpt-3.5-turbo-16k', temperature=0)
message = [
SystemMessage(content='Your are expert copywriter'),
HumanMessage(content=f'Extract main idea the following article and summarize into 10 bullet point or more. Use language: {language}. TEXT: {text}')
]
with get_openai_callback() as cost:
summary = llm(message).content
return summary, cost
def scrap(url):
scraper = AsyncChromiumLoader(url)
html = scraper.load()
extractor = BeautifulSoupTransformer()
content = extractor.transform_documents(html, tags_to_extract=['h1', 'h2', 'h3', 'h4','h5', 'h6','p'])
print(content[0].page_content)
return content[0].page_content
def get_keywords_data(keywords):
my_data = {
'currency': 'USD',
'dataSource': 'gkp',
'kw[]': keywords
}
kw_api_key = os.environ.get('KEYWORD_API')
auth = f'Bearer {kw_api_key}'
my_headers = {
'Accept': 'application/json',
'Authorization': auth
}
response = requests.post('https://api.keywordseverywhere.com/v1/get_keyword_data', data=my_data, headers=my_headers)
if response.status_code == 200:
data = body=response.content.decode('utf-8')
return data
else:
st.write(body=response.content.decode('utf-8'))
def main():
load_dotenv()
st.subheader("Summarize, Extract Keywords, Rewrite")
url = st.text_input("Enter URL, start with http:// or https://")
options = ['Bahasa Indonesia', 'English', 'Japanese', 'France', 'Germany', 'Dutch']
language = st.selectbox("Output language", options=options)
submit = st.button("submit")
content = None
if url and submit:
with st.spinner(f'Processing: {url}'):
content = scrap([url])
if content is not None:
tab1, tab2, = st.tabs(["Summary", "Rewritten content"])
with tab1:
with st.spinner('summarizing content..'):
st.subheader('Summary')
summary, cost = summarize(content, language)
st.write(summary)
st.write(cost)
with st.spinner('extracing keywords..'):
st.subheader('SEO Keywords ')
keywords, cost = extract_seo_keywords(content)
#st.write(keywords)
st.write(cost)
data = get_keywords_data(keywords)
# Use json_normalize() to convert JSON to DataFrame
dict= json.loads(data)
# Initialize empty lists to store data
vol_list = []
cpc_value_list = []
keyword_list = []
competition_list = []
trend_value_list = []
# Iterate through the data and extract relevant information
for item in dict["data"]:
vol_list.append(item["vol"])
cpc_value_list.append(float(item["cpc"]["value"]))
keyword_list.append(item["keyword"])
competition_list.append(item["competition"])
trend_values = [trend["value"] for trend in item["trend"]]
trend_value_list.append(trend_values)
# Create a DataFrame
df = pd.DataFrame({
'Keyword': keyword_list,
'Vol': vol_list,
'CPC': cpc_value_list,
'Competition': competition_list,
'Trend (last 12 months)': trend_value_list
})
# Display the DataFrame
st.dataframe(
df,
column_config={
"CPC": st.column_config.NumberColumn(
format="$%f",
),
"Trend (last 12 months)": st.column_config.LineChartColumn(y_min=0)
},
hide_index=True,
width=800
)
with st.expander("see extracted content"):
st.write(content)
with tab2:
st.subheader("Rewrite content")
rewrite_button = st.button("Rewrite!")
if rewrite_button:
with st.spinner('rewriting content..'):
st.subheader('rewritten content')
output, cost = rewrite(summary, language)
st.write(output)
st.write(cost)
if __name__ == "__main__":
main()