1. 주제 제시
본 단계에서는 사용자가 입력한 자연어 문장을 분석 가능한 구조로 변환하는 질의 해석 로직을 설계한다.
단순 입력 처리 수준이 아니라, 텍스트 기반 질문을 공간 분석 조건으로 변환하는 인터페이스 역할을 수행하는 단계로 접근하였다.
2. 목표 제시
이 단계의 목표는 사용자의 문장에서 분석에 필요한 핵심 요소(지표, 날짜, 기간 여부, 이벤트 조건)를 자동으로 추출하여,
코드 내부에서 활용 가능한 형태로 구조화하는 것이다.
또한 모호한 질의에 대해서는 보완 정보를 유도하여 분석 정확도를 유지하는 것을 목표로 한다.
3. 방법론 제시 (이론적·통계적)
자연어 질의 해석은 복잡한 NLP 모델을 사용하지 않고, 규칙 기반(rule-based parsing) 방식으로 구현하였다.
이는 제한된 도메인(위성 지표 분석)에서는 충분히 높은 정확도를 확보할 수 있기 때문이다.
통계적으로 보면 이는 비정형 텍스트를 구조화된 변수로 변환하는 feature extraction 과정에 해당하며,
키워드 기반 매핑을 통해 NDVI, NDMI, NDBI와 같은 분석 변수를 식별한다.
또한 날짜 추출은 패턴 인식 기반 정규표현식 접근으로 수행된다.
4. 코드 제시
| def parse_query(query): query = query.lower() indicator = None if "ndvi" in query: indicator = "NDVI" elif "ndmi" in query: indicator = "NDMI" elif "ndbi" in query: indicator = "NDBI" is_fire = "산불" in query return { "indicator": indicator, "is_fire": is_fire } |
5. 설명 제시
해당 함수는 사용자의 입력 문장에서 분석에 필요한 핵심 요소를 추출하는 역할을 한다.
문자열을 소문자로 변환한 후 키워드 포함 여부를 기준으로 지표를 식별하며,
“산불”이라는 키워드를 통해 이벤트 분석 여부를 결정한다.
결과는 딕셔너리 형태로 반환되어 이후 데이터 필터링 및 시각화 단계에서 활용된다.
이는 텍스트를 직접 분석에 연결하는 가장 단순하면서도 효과적인 구조다.
6. 구현 제시
실제 구현에서는 이 함수를 사용자 입력과 직접 연결하여 분석 흐름을 자동화하였다.
| user_query = st.text_input("질문을 입력하세요") if user_query: parsed = parse_query(user_query) indicator = parsed["indicator"] is_fire = parsed["is_fire"] |
이 구조를 통해 사용자는 별도의 옵션 선택 없이 자연어로 질문만 입력하면 분석 조건이 자동 설정되도록 구현하였다.
7. 고도화 제시
향후에는 단순 키워드 매칭 방식에서 벗어나 형태소 분석 또는 LLM 기반 질의 해석으로 확장할 수 있다.
예를 들어 “식생 상태”, “건조 정도”와 같은 간접 표현도 NDVI 또는 NDMI로 매핑되도록 개선할 수 있다.
또한 날짜 인식 역시 정규표현식 기반에서 더 다양한 표현을 처리할 수 있도록 확장 가능하다.
8. 연계 방향 제시
본 단계에서 생성된 분석 조건은 이후 데이터 필터링, 격자 선택, 시각화 로직과 직접적으로 연결된다.
특히 지표 선택과 이벤트 여부는 지도 생성 방식 자체를 바꾸는 핵심 변수로 작용한다.
자기화 관점에서의 정리
이 단계는 개인적으로 가장 흥미로웠던 부분이다.
기존에는 분석 조건을 코드 내부에서 직접 지정하는 방식에 익숙했지만,
이번에는 사용자의 문장을 그대로 분석 조건으로 변환하는 구조를 처음 구현해보았다.
처음에는 복잡한 NLP 모델이 필요할 것이라 생각했지만,
실제로는 제한된 도메인에서는 규칙 기반 접근만으로도 충분히 작동한다는 점을 확인할 수 있었다.
이는 통계 분석에서 복잡한 모델보다 단순한 규칙이 더 효과적인 경우가 있는 것과 유사하게 느껴졌다.
또한 “질문 → 변수 → 분석”으로 이어지는 구조를 직접 구현하면서,
데이터 분석이 단순 계산이 아니라 인터페이스 설계까지 포함된다는 점을 이해하게 되었다.
이 단계는 단순 입력 처리가 아니라,
사용자와 분석 시스템을 연결하는 핵심 구조라는 점에서 의미가 있다고 생각한다.

'취미생활 > Satellite Util' 카테고리의 다른 글
| [인공위성 연구] 위성 데이터 시계열 변화 분석 방법 (NDVI 비교 Step6) (0) | 2026.04.03 |
|---|---|
| [인공위성 연구] NDVI 기반 1km 격자 시각화 구현 (Folium 지도 Step5) (0) | 2026.04.02 |
| [인공위성 연구] 자연어 질의 기반 위성 데이터 분석 구현 (Python Step3) (0) | 2026.04.01 |
| [인공위성 연구] 위성 데이터 전처리와 오류 처리 방법 (GeoPandas 활용 Step2) (0) | 2026.04.01 |
| [인공위성 연구] MODIS 위성 데이터 분석 환경 설정 방법 (Python GIS Step1) (0) | 2026.04.01 |