랭체인 심화2
- 뉴스 크롤링 후 필요 내용 가공 - 유사 단어 추출 - 각종 문서안 필요 내용 가공
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
# 사용자가 입력하는 단어와 유사한 2개의 단어 추출
|
||||
# csv 파일에서 단어를 읽어와서 유사도를 계산하고, 유사한 단어를 추출하는 함수
|
||||
import csv
|
||||
import gradio as gr
|
||||
from langchain_community.document_loaders import CSVLoader
|
||||
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
|
||||
from langchain_core.output_parsers import StrOutputParser
|
||||
from langchain_community.vectorstores import FAISS
|
||||
from langchain_ibm import WatsonxEmbeddings
|
||||
from langchain_ollama import OllamaEmbeddings
|
||||
|
||||
|
||||
# 모델(LLM, Embeddding)
|
||||
load_dotenv()
|
||||
|
||||
apikey = os.getenv("WATSONX_API_KEY")
|
||||
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||
|
||||
watson_embedding = WatsonxEmbeddings(
|
||||
model_id="ibm/granite-embedding-278m-multilingual",
|
||||
url = f"{watsonx_ai_url}",
|
||||
api_key = f"{apikey}",
|
||||
project_id=f"{project_id}"
|
||||
)
|
||||
|
||||
ollama_embedding = OllamaEmbeddings(model="nomic-embed-text-v2-moe")
|
||||
|
||||
# loader : csv
|
||||
csv_loader = CSVLoader("./data/myData.csv",encoding="utf-8",csv_args={'delimiter':',', "fieldnames": ["Words"]})
|
||||
csv_docs = csv_loader.load()
|
||||
|
||||
# 벡터스토어
|
||||
vectorstore = FAISS.from_documents(documents=csv_docs, embedding=watson_embedding)
|
||||
|
||||
def find_similar(query):
|
||||
"""
|
||||
query 랑 유사한 단어 찾아서 리턴
|
||||
"""
|
||||
if not query.strip():
|
||||
return "검색어 확인", ""
|
||||
|
||||
docs = vectorstore.similarity_search(query, k = 2)
|
||||
result1 = docs[0].page_content if len(docs) > 0 else ""
|
||||
result2 = docs[1].page_content if len(docs) > 0 else ""
|
||||
|
||||
return result1, result2
|
||||
|
||||
with gr.Blocks() as app:
|
||||
gr.Markdown("🐴 Educate Kids")
|
||||
gr.Markdown("비슷한 단어와 또는 문장을 찾아드립니다.")
|
||||
|
||||
query = gr.Textbox(label="단어 입력", placeholder="단어를 입력하세요. 예) 애플")
|
||||
btn = gr.Button("Find Similar Things")
|
||||
output1 = gr.Textbox(label="Top Match 1")
|
||||
output2 = gr.Textbox(label="Top Match 2")
|
||||
|
||||
btn.click(find_similar, inputs=query, outputs=[output1, output2])
|
||||
|
||||
app.launch()
|
||||
Reference in New Issue
Block a user