-
Notifications
You must be signed in to change notification settings - Fork 1
AI (Flask Server, Dataset)
SeungWon Lee edited this page May 14, 2024
·
7 revisions
github Flask repository url: https://github.com/Garam-e/Flask
이 프로젝트는 Flask 웹 애플리케이션으로, 다양한 웹사이트에서 데이터를 크롤링하고, 크롤링한 데이터를 기반으로 질문에 대한 답변을 제공하는 시스템입니다. 주요 기능은 다음과 같습니다:
- 웹사이트 공지사항 크롤링
- 학사 일정 크롤링
- 도서관 좌석 정보 크롤링
- 학식 메뉴 크롤링
- 질문에 대한 최적의 답변 제공
- Python 3.7 이상
- pip (Python 패키지 관리자)
-
프로젝트를 클론합니다:
git clone https://github.com/your-repo/your-project.git cd your-project
-
필요한 라이브러리를 설치합니다:
pip install -r requirements.txt
-
dataset
폴더를 생성하고 필요한 JSON 파일을 저장할 수 있는 경로를 확인합니다. -
Flask 애플리케이션을 실행합니다:
python app.py
-
Flask
: 웹 애플리케이션 프레임워크로 사용됩니다. -
apscheduler
: 정기적으로 작업을 예약하고 실행하는 데 사용됩니다. -
flasgger
: Swagger UI를 통해 API 문서를 자동으로 생성하고 제공합니다. -
json
: 데이터를 JSON 형식으로 저장하고 로드하는 데 사용됩니다.
-
question_processing
: 질문을 처리하고 가장 적합한 답변을 선택하는 모듈입니다. -
crawler
: 다양한 웹사이트에서 데이터를 크롤링하는 모듈입니다. -
httpx
: HTTP 클라이언트로, 웹 페이지로부터 데이터를 가져오는 데 사용됩니다. -
BeautifulSoup
: HTML 파싱 라이브러리로, 웹 페이지로부터 원하는 데이터를 추출하는 데 사용됩니다. -
torch
,sentence_transformers
: 질문을 임베딩하고 유사한 질문을 찾는 데 사용됩니다. -
pandas
: 데이터 프레임을 처리하는 데 사용됩니다. -
numpy
: 수치 데이터를 처리하는 데 사용됩니다.
질문에 대한 최적의 답변을 반환합니다.
-
URL:
/get-question/<question>
-
Method:
GET
-
URL 파라미터:
-
question
(string): 사용자의 질문
-
-
응답:
-
answer
(string): 질문에 대한 최적의 답변 -
button_name
(string): 버튼 이름 -
link
(string): 관련 링크 -
question
(string): 처리된 질문
-
curl -X GET "http://localhost:5000/get-question/도서관 좌석은?"
{
"answer": "현재 도서관 좌석 정보는 ...",
"button_name": "도서관 좌석 확인",
"link": "http://library.example.com/seats",
"question": "도서관 좌석은?"
}
아래 코드는 Flask 애플리케이션을 실행하고 /get-question
엔드포인트에 GET 요청을 보내 질문에 대한 답변을 받는 예제입니다.
import requests
def get_answer(question):
url = f"http://localhost:5000/get-question/{question}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print(f"Question: {data['question']}")
print(f"Answer: {data['answer']}")
print(f"Link: {data['link']}")
print(f"Button Name: {data['button_name']}")
else:
print("Error:", response.status_code)
if __name__ == "__main__":
question = "도서관 좌석은?"
get_answer(question)
이 코드는 로컬 서버에서 Flask 애플리케이션을 실행한 후, 사용자가 입력한 질문에 대해 가장 적합한 답변을 반환합니다. 응답 데이터는 JSON 형식으로 반환되며, 각 키와 값을 출력합니다.
가천대학교 공식 데이터를 수집 후 가공하여 사용
- qna 데이터셋
- 유저의 질문과 유사도가 높은 답변과 관련 링크를 제공
- 데이터셋 구조
항목 | 내용 |
---|---|
소분류 | 총장실 |
질문 | 총장님이 궁금해요 |
답변 | 총장님에 대해 알려드릴게요. 현재 가천대학교 총장님은 이길여 총장님으로, 항상 학생들을 위해 힘써주시는 분이에요. 버튼을 누르면 현 총장님의 인사말, 프로필, 포토갤러리, 메시지를 확인할 수 있어요. |
링크 |
https://www.gachon.ac.kr/kor/641/subview.do https://www.gachon.ac.kr/kor/643/subview.do https://www.gachon.ac.kr/kor/644/subview.do https://www.gachon.ac.kr/kor/830/subview.do |
버튼이름 | 인사말 프로필 포토갤러리 메시지 |
- 웹크롤링 데이터셋
- 공지사항, 학사일정, 학사메뉴, 도서관 좌석 실시간 데이터 제공
- 가천대학교 사이트에서 크롤링하여 수집 후 가공
- 라이브러리: BeautifulSoup
import httpx
from bs4 import BeautifulSoup
def crawl_notices():
url = 'https://www.gachon.ac.kr/kor/7986/subview.do'
response = httpx.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
notices = [item.get_text().strip() for item in soup.find_all('td', 'td-subject')[:5]]
return notices
-
설명: 이 함수는 가천대학교 공지사항 페이지에서 최근 5개의 공지 제목을 크롤링합니다.
httpx
를 사용해 페이지 HTML을 가져오고,BeautifulSoup
으로 파싱하여 공지 제목을 추출합니다.
def crawl_library_seats(type='READING', libno='2'):
url = 'https://lib.gachon.ac.kr/main/seatAjax'
params = {'type': type, 'libno': libno, 'time': int(time.time() * 1000)}
response = httpx.get(url, params=params)
return response.json()
-
설명: 이 함수는 중앙도서관 좌석 정보를 가져옵니다.
httpx
를 사용해 AJAX 요청을 보내고, 좌석 상태를 JSON 형식으로 반환받아 파싱합니다.params
로 요청 파라미터를 전달하여 필요한 좌석 정보를 얻습니다.