# 사용자가 입력하는 단어와 유사한 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()