25-2-10 AI claude 정말 대박
claude에 스팀 블록체인에 올라온 글 중에서 맛집과 카페에 대한 글을 추출하고 그것을 지역별로 정리해달라고 했다. 그랬더니 다음과 같이 코드를 짜 주었다.
from beem import Steem
from beem.discussions import Query, Discussions
import re
import pandas as pd
from datetime import datetime, timedelta
from collections import defaultdict
def extract_detailed_location(text):
"""상세 위치 정보 추출"""
# 광역시/도 패턴
major_regions = {
'서울': '서울특별시',
'부산': '부산광역시',
'대구': '대구광역시',
'인천': '인천광역시',
'광주': '광주광역시',
'대전': '대전광역시',
'울산': '울산광역시',
'세종': '세종특별자치시',
'경기': '경기도',
'강원': '강원도',
'충북': '충청북도',
'충남': '충청남도',
'전북': '전라북도',
'전남': '전라남도',
'경북': '경상북도',
'경남': '경상남도',
'제주': '제주특별자치도'
}
location_info = {
'major_region': None, # 광역시/도
'sub_region': None, # 시/군/구
'detail': None # 상세주소
}
# 주소 패턴 매칭
address_pattern = r'(?:위치|주소)[:\s]*([가-힣0-9\s-]+)'
address_match = re.search(address_pattern, text)
if address_match:
full_address = address_match.group(1)
# 광역시/도 매칭
for short_name, full_name in major_regions.items():
if full_name in full_address or short_name in full_address:
location_info['major_region'] = full_name
break
# 시/군/구 매칭
sub_region_pattern = r'([가-힣]+(?:시|군|구))'
sub_match = re.search(sub_region_pattern, full_address)
if sub_match:
location_info['sub_region'] = sub_match.group(1)
# 상세주소
location_info['detail'] = full_address
# 위치/주소 태그가 없는 경우 본문에서 지역명 찾기
if not location_info['major_region']:
for short_name, full_name in major_regions.items():
if full_name in text or short_name in text:
location_info['major_region'] = full_name
break
return location_info
def extract_restaurant_cafe_content(days_ago=7):
# Steem 인스턴스 생성
steem = Steem()
# 현재 시간으로부터 지정된 일수 전의 시간 계산
start_time = datetime.utcnow() - timedelta(days=days_ago)
# 한글 패턴 정규식
korean_pattern = re.compile('[가-힣]+')
# 식당/카페 관련 키워드
keywords = [
'식당', '레스토랑', '맛집', '카페', '커피', 'cafe', '음식점', '식사',
'밥집', '디저트', '브런치', '메뉴', '주문', '음식', '요리',
'커피숍', '베이커리', '디저트카페', '브런치카페', '식사류',
'맛있', '먹', '마시', '배달', '포장'
]
# 키워드 패턴 생성
keyword_pattern = '|'.join(keywords)
# 결과를 저장할 리스트
food_posts = []
# 쿼리 설정
query = Query(limit=100, tag="")
discussions = Discussions()
# 게시물 조회
for post in discussions.get_discussions('created', query, limit=100):
if post['created'] < start_time:
continue
title = post.get('title', '')
body = post.get('body', '')
if (korean_pattern.search(title) or korean_pattern.search(body)) and \
(re.search(keyword_pattern, title.lower()) or re.search(keyword_pattern, body.lower())):
# 위치 정보 추출
location_info = extract_detailed_location(title + " " + body)
food_posts.append({
'major_region': location_info['major_region'] or '지역미상',
'sub_region': location_info['sub_region'],
'detail_location': location_info['detail'],
'title': title,
'author': post['author'],
'created': post['created'],
'url': f"https://steemit.com/@{post['author']}/{post['permlink']}",
'tags': post.get('tags', []),
'body_preview': body[:200] + '...' if len(body) > 200 else body,
'is_review': is_review(title + " " + body)
})
# DataFrame으로 변환
df = pd.DataFrame(food_posts)
# 지역별로 정렬
if not df.empty:
df = df.sort_values(['major_region', 'sub_region', 'title'])
return df
def is_review(text):
"""리뷰 게시물인지 판단"""
review_keywords = ['후기', '리뷰', '방문', '먹어', '마시', '주문', '평가', '별점']
return any(keyword in text for keyword in review_keywords)
def save_to_csv(df, filename='regional_restaurant_cafe_posts.csv'):
"""결과를 CSV 파일로 저장"""
df.to_csv(filename, encoding='utf-8-sig', index=False)
def print_regional_summary(df):
"""지역별 게시물 수 요약 출력"""
print("\n=== 지역별 게시물 수 ===")
regional_counts = df['major_region'].value_counts()
for region, count in regional_counts.items():
print(f"{region}: {count}개")
print(f"총 게시물 수: {len(df)}개")
사용 예시
if name == "main":
# 최근 7일간의 식당/카페 관련 게시물 추출
food_data = extract_restaurant_cafe_content(days_ago=7)
# CSV 파일로 저장
save_to_csv(food_data)
# 지역별 통계 출력
print_regional_summary(food_data)
정말 대박이다. 이것을 바탕으로 한번 돌려보면서 오류만 수정하면 되지 않을까 한다.
엄청나다.
This post has been upvoted by @italygame witness curation trail
If you like our work and want to support us, please consider to approve our witness
Come and visit Italy Community
AI의 출현이 인터넷이 처음나왔을때보다 더 엄청난 변화와 혁신을 가져오는 듯 합니다
멋져요. 예전에 맛집 포스팅 많았는데요. ㅎㅎ
앞으로 맛집 포스팅에 지역이나 주소 같은 정보까지 함께 기록해야 겠어요~