Files
cooney 096222c64f 랭체인 심화2
- 뉴스 크롤링 후 필요 내용 가공
- 유사 단어 추출
- 각종 문서안 필요 내용 가공
2026-06-02 18:11:05 +09:00

63 lines
2.0 KiB
Python

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