python

[GPT][QUIZGPT]WikipediaRetriever

으누아빠 2024. 4. 18. 11:53
반응형

WikipediaRetriever


WikipediaRetriever는 Wikipedia의 데이터를 검색하고 검색 결과를 제공하는 오픈 소스 도구
이 도구를 사용하면 Wikipedia의 다양한 정보를 손쉽게 검색 가능

파라미터


- lang: default="en". 특정 언어 부분에서 위키피디아를 검색하려면 사용
- load_max_docs: default=100. 다운로드된 문서의 수를 제한하는 데 사용. 현재는 300개의 문서로 제한
- load_all_available_meta: default=False. 기본적으로 중요한 필드만 다운로드.  발행일(문서가 발행/최종 업데이트된 날짜), 제목, 요약. True로 설정하면 다른 필드도 다운로드됨
- top_k_results: 모델이 출력하는 결과 중에서 상위 K개의 결과만 반환

 

 

st.selectbox


st.selectbox은 Streamlit에서 선택 상자 위젯을 생성하는 함수

import streamlit as st
 
option = st.selectbox(
    '어떻게 연락드릴까요?',
    ('이메일', '집 전화', '휴대폰')
)
st.write('선택한 옵션:', option)

이 예제에서 st.selectbox은 '이메일', '집 전화', '휴대폰' 세 가지 옵션을 가진 선택 상자를 생성 선택한 옵션은 option 변수에 저장되며, 이는 코드의 다른 곳에서 사용될 수 있습니다.

 

st.selectbox의 매개변수

label: 선택 상자의 레이블로 사용될 문자열입니다.
options: 선택 상자에 표시할 옵션 목록입니다. 이는 유효한 Python 리스트 또는 배열 형태 객체입니다.
index: 기본적으로 선택된 옵션의 인덱스입니다. 지정하지 않으면 기본적으로 첫 번째 옵션이 선택됩니다.
format_func: 옵션을 인수로 받아 해당 옵션의 문자열 표현을 반환하는 함수입니다. 특정 방식으로 옵션을 표시하려는 경우 유용합니다.

 

 

# 파일 다운로드 또는 WikipediaRetriever를 이용한 퀴즈 생성

import streamlit as st
from langchain.document_loaders import UnstructuredFileLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.retrievers import WikipediaRetriever


# 파피콘 과 페이지 타이틀 설정
st.set_page_config(
    page_title="QuizGPT",
    page_icon="",
)

st.title("QuizGPT")


#Streamlit에서 앱에서 상호작용이 발생할 때마다 전체 스크립트가 처음부터 다시 실행하기 때문에 캐시 사용
@st.cache_data(show_spinner="Loading file...")
def split_file(file):

    file_content = file.read()
    file_path = f"./.cache/quiz_files/{file.name}"
    with open(file_path, "wb") as f:
        f.write(file_content)
    splitter = CharacterTextSplitter.from_tiktoken_encoder(
        separator="\n",
        chunk_size=600,
        chunk_overlap=100,
    )

    # UnstructuredFileLoader를 사용하여 파일을 로드하고 분할
    loader = UnstructuredFileLoader(file_path)
    docs = loader.load_and_split(text_splitter=splitter)
    return docs

#  사이드 바에 select 박스 형태로 file 또는 wikipedia를 선택할 수 있게 함
with st.sidebar:
    choice = st.selectbox(
        "Choose what you want to use.",
        (
            'File',
            'Wikipedia Article',
        ),
    )

    # 만일 File을 선택할 경우
    if choice == 'File':
        file = st.file_uploader(
            "Upload a .docx , .txt or .pdf file",
            type=["pdf", "txt", "docx"],
        )

        if file:
            # 파일을 읽어서 docs에 저장
            docs = split_file(file)
            st.write(docs)
    else:
        #WikipediaRetriever 사용
        topic = st.text_input("Search Wikipedia...")

        if topic:
            retriever = WikipediaRetriever(top_k_results=5)

            with st.status("Searching Wikipedia..."):
                docs = retriever.get_relevant_documents(topic)
                st.write(docs)

'python' 카테고리의 다른 글

[GPT][QUIZGPT]Formatter Prompt  (0) 2024.04.18
[GPT][QUIZGPT]Questions Prompt  (0) 2024.04.18
[GPT][PRIVATEGPT] Ollama  (0) 2024.04.16
[GPT][PRIVATEGPT] GPT4All  (0) 2024.04.16
[GPT][PRIVATEGPT] HuggingFacePipeline  (0) 2024.04.16