2026/07/30

오늘의 이야기

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>Oracle 유사도 검색 방법 정리</title>
  <style>
    body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; }
    h1, h2, h3 { color: #2c3e50; }
    code { background: #f4f4f4; padding: 2px 4px; border-radius: 4px; }
    table { border-collapse: collapse; width: 100%; margin-top: 10px; }
    table, th, td { border: 1px solid #ccc; }
    th, td { padding: 8px; text-align: left; }
    th { background: #f9f9f9; }
  </style>
</head>
<body>

<h1>Oracle에서 유사도 검색 방법 정리</h1>

<h2>1. 문자열 기반 검색</h2>

<h3>LIKE 연산자</h3>
<ul>
  <li>패턴 매칭에 사용</li>
  <li><code>%</code> : 0개 이상의 문자 대체</li>
  <li><code>_</code> : 정확히 1개의 문자 대체</li>
</ul>
<pre><code>SELECT * FROM employees WHERE first_name LIKE '%ohn%';
</code></pre>
<p>→ "John", "Johnson" 등 포함된 결과 반환</p>

<h3>INSTR 함수</h3>
<ul>
  <li>특정 문자열 내에서 부분 문자열의 위치를 반환</li>
</ul>
<pre><code>SELECT INSTR('CORPORATE FLOOR', 'OR', 3) FROM dual;
</code></pre>

<hr>

<h2>2. PURGE 명령어</h2>

<h3>DROP TABLE ... PURGE</h3>
<p>테이블을 <strong>Recycle Bin</strong>에 남기지 않고 즉시 삭제</p>
<pre><code>DROP TABLE employees PURGE;
</code></pre>

<h3>PURGE RECYCLEBIN</h3>
<p>현재 사용자 스키마의 Recycle Bin 전체 비움</p>
<pre><code>PURGE RECYCLEBIN;
</code></pre>

<h3>PURGE DBA_RECYCLEBIN</h3>
<p>DBA 권한으로 데이터베이스 전체 Recycle Bin 비움</p>

<hr>

<h2>3. 글자 유사도 검색</h2>

<h3>기본 검색</h3>
<ul>
  <li>LIKE: 단순 패턴 매칭</li>
  <li>INSTR: 문자열 내 위치 반환</li>
</ul>

<h3>고급 검색 (문자열 유사도)</h3>
<p>Oracle 표준 DB에는 <code>FUZZY_MATCH</code> 함수가 없으며, 대신 <strong>UTL_MATCH 패키지</strong>를 사용해야 함.</p>

<h4>주요 함수</h4>
<ul>
  <li><strong>EDIT_DISTANCE</strong> (Levenshtein 거리 기반)</li>
</ul>
<pre><code>SELECT UTL_MATCH.EDIT_DISTANCE('Chris', 'Kris') FROM dual;
-- 결과: 2
</code></pre>

<ul>
  <li><strong>EDIT_SIMILARITY</strong> (0~100 점수 반환)</li>
</ul>
<pre><code>SELECT UTL_MATCH.EDIT_SIMILARITY('Chris', 'Kris') FROM dual;
-- 결과: 80
</code></pre>

<ul>
  <li><strong>JARO_WINKLER</strong> (발음/철자 유사성 기반)</li>
  <li><strong>JARO_WINKLER_SIMILARITY</strong> (유사도 점수 반환)</li>
</ul>

<hr>

<h2>4. 요약 비교</h2>

<table>
  <tr>
    <th>방법</th>
    <th>특징</th>
    <th>적합한 상황</th>
  </tr>
  <tr>
    <td>LIKE</td>
    <td>단순 패턴 매칭</td>
    <td>특정 문자열 포함 여부 확인</td>
  </tr>
  <tr>
    <td>INSTR</td>
    <td>문자열 내 위치 반환</td>
    <td>텍스트 분석, 위치 기반 검색</td>
  </tr>
  <tr>
    <td>UTL_MATCH</td>
    <td>Levenshtein, Jaro-Winkler 지원</td>
    <td>오타 교정, 고객 데이터 중복 제거</td>
  </tr>
  <tr>
    <td>PURGE</td>
    <td>Recycle Bin 비우기/즉시 삭제</td>
    <td>공간 확보, 불필요한 객체 제거</td>
  </tr>
</table>

<hr>

<h2>5. 결론</h2>
<ul>
  <li>단순 검색에는 <strong>LIKE/INSTR</strong> 활용</li>
  <li>철자 오류나 발음 유사성을 고려한 검색에는 <strong>UTL_MATCH 패키지</strong> 사용</li>
  <li><code>FUZZY_MATCH</code>는 표준 Oracle DB에는 없음 → 혼동 주의</li>
  <li>데이터 정제 및 중복 제거 작업에 유용</li>
</ul>

</body>
</html>





오늘의 이야기


#스하리1000명프로젝트,
In Korea verloren? Auch wenn Sie kein Koreanisch sprechen, hilft Ihnen diese App dabei, sich problemlos fortzubewegen.
Sprechen Sie einfach Ihre Sprache – es übersetzt, sucht und zeigt Ergebnisse in Ihrer Sprache an.
Ideal für Reisende! Unterstützt mehr als 10 Sprachen, darunter Englisch, Japanisch, Chinesisch, Vietnamesisch und mehr.
Probieren Sie es jetzt aus!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/27

오늘의 이야기


#스하리1000명프로젝트,
Nawala sa Korea? Kahit na hindi ka nagsasalita ng Korean, tinutulungan ka ng app na ito na madaling makalibot.
Sabihin lang ang iyong wika—ito ay nagsasalin, naghahanap, at nagpapakita ng mga resulta pabalik sa iyong wika.
Mahusay para sa mga manlalakbay! Sinusuportahan ang 10+ wika kabilang ang English, Japanese, Chinese, Vietnamese, at higit pa.
Subukan ito ngayon!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/26

오늘의 이야기


#스하리1000명프로젝트,
迷失在韓國?即使您不會說韓語,這個應用程式也可以幫助您輕鬆出行。
只需說出您的語言即可 - 它會翻譯、搜尋並以您的語言顯示結果。
非常適合旅行者!支援英語、日語、中文、越南語等10多種語言。
現在就試試吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/25

오늘의 이야기


#스하리1000명프로젝트,
迷失在韩国?即使您不会说韩语,这个应用程序也可以帮助您轻松出行。
只需说出您的语言即可 - 它会翻译、搜索并以您的语言显示结果。
非常适合旅行者!支持英语、日语、中文、越南语等10多种语言。
现在就试试吧!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/24

오늘의 이야기


#스하리1000명프로젝트,
韓国で迷子になりましたか?韓国語が話せなくても、このアプリを使えば簡単に移動できます。
あなたの言語で話すだけで、翻訳、検索が行われ、結果があなたの言語で表示されます。
旅行者に最適!英語、日本語、中国語、ベトナム語などを含む 10 以上の言語をサポートします。
今すぐ試してみましょう!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/23

오늘의 이야기


#스하리1000명프로젝트,
한국에서 길을 잃었나요? 한국어를 못하더라도 이 앱을 사용하면 쉽게 돌아다닐 수 있습니다.
귀하의 언어로 말하면 귀하의 언어로 번역, 검색 및 결과가 표시됩니다.
여행자에게 좋습니다! 영어, 일본어, 중국어, 베트남어 등 10개 이상의 언어를 지원합니다.
지금 사용해 보세요!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/22

오늘의 이야기

네이버 맛집 정보 수집 + 소형 AI JSON 변환 기획서


1. 목표



  • 키워드 성시경 맛집으로 네이버 검색을 수행한다.

  • 검색 결과 목록의 요약문이 아닌, 각 결과의 상세 링크 페이지를 순회한다.

  • 상세 페이지에서 맛집 관련 텍스트를 추출/정제한다.

  • 라즈베리파이에서 구동 가능한 소형 모델(Qwen GGUF)을 사용해 정보를 구조화하고, 최종적으로 JSON 스키마로 출력한다.


2. 현재 문제와 개선 방향



  • 현재 구현은 검색 결과 페이지의 snippet만 읽어서 정보 밀도가 낮다.

  • 개선안은 다음 2단계 수집으로 전환한다.



  1. 검색 결과 페이지에서 상세 링크 목록 수집

  2. 각 상세 링크 페이지 본문에서 텍스트 수집 후 AI 분석


3. 전체 처리 파이프라인



  1. 검색 요청

    • Query: 성시경 맛집

    • User-Agent 포함



  2. 상세 링크 추출

    • 네이버 검색 결과 DOM에서 외부/내부 상세 링크 URL 수집

    • 광고/쇼핑/중복 링크 제거



  3. 상세 페이지 크롤링

    • 링크별 HTML 요청

    • title, 본문 후보(article, main, 블로그 본문 영역 등) 추출



  4. 텍스트 정제

    • 공백/줄바꿈 정규화

    • 메뉴판/가격/주소/전화 패턴 우선 보존

    • 페이지별 길이 제한 (메모리 보호)



  5. AI 구조화

    • 소형 Qwen 모델로 스키마 기반 정보 추출

    • page 단위 1차 JSON 생성



  6. 통합/중복 제거

    • 상호명+주소 기준 유사 항목 병합



  7. 최종 출력

    • restaurants 배열 JSON으로 저장/출력




4. 권장 JSON 스키마


{
"query": "성시경 맛집",
"generated_at": "ISO-8601 datetime",
"restaurants": [
{
"name": "상호명",
"address": "주소",
"contact": "연락처",
"menus": ["메뉴1", "메뉴2"],
"review_summary": "리뷰 요약",
"source_url": "정보를 추출한 상세 페이지 URL"
}
]
}

5. 라즈베리파이 소형 모델 전략



  • 우선 모델: Qwen/Qwen2.5-0.5B-Instruct-GGUF

  • 권장 파일: qwen2.5-0.5b-instruct-q4_k_m.gguf

  • 이유: 낮은 메모리 사용량, 구조화 추출 작업에 충분한 품질


추론 권장 설정(초안)



  • n_ctx: 1024~2048

  • n_threads: 라즈베리파이 CPU 코어 수 기반(예: 4)

  • temperature: 0.0 (형식 안정성 우선)

  • 출력 실패 시 재시도: 프롬프트에 “JSON만 출력” 강제 후 1회 재시도


6. Hugging Face에서 Qwen 모델 설치/다운로드


6.1 Python 패키지 설치


pip install --upgrade huggingface_hub llama-cpp-python requests beautifulsoup4

6.2 모델 다운로드 코드


from huggingface_hub import hf_hub_download

model_path = hf_hub_download(
repo_id="Qwen/Qwen2.5-0.5B-Instruct-GGUF",
filename="qwen2.5-0.5b-instruct-q4_k_m.gguf"
)
print(model_path)

6.3 모델 로드 예시


from llama_cpp import Llama

llm = Llama(
model_path=model_path,
n_ctx=1024,
n_threads=4,
verbose=False
)

7. 크롤링/분석 구현 포인트



  • 링크 수집 개수 제한: 예) 상위 10~20개 상세 링크

  • 요청 간 지연: 예) 0.5~1.0초(과도 요청 방지)

  • 타임아웃/실패 처리: 실패 링크는 스킵하고 로그 기록

  • 본문 선택자 다중 전략:

    • article, main, .se-main-container, #postViewArea 등 순차 시도



  • 페이지별 추출 결과를 먼저 JSON으로 저장(디버깅 용이)


8. 프롬프트 설계 방향



  • System Prompt:

    • “맛집 정보 추출기”

    • “설명문 금지, JSON만 출력”

    • “스키마 외 키 금지”



  • User Prompt:

    • 페이지 URL + 정제 텍스트 전달

    • 필드별 누락 허용 규칙(null 또는 "") 명시




9. 품질 기준(Definition of Done)



  • 상세 링크 기반으로 최소 N개(예: 5개 이상) 식당 후보가 JSON에 채워짐

  • JSON 파싱 100% 성공(실패 시 재시도 로직으로 보완)

  • 각 항목에 name 또는 address 중 최소 1개 이상 유효값 존재

  • source_url 추적 가능


10. 개발 단계 제안



  1. 링크 수집기 구현/검증

  2. 상세 페이지 본문 추출기 구현/검증

  3. Qwen JSON 추출 파이프라인 연결

  4. 병합/중복 제거 및 최종 JSON 생성

  5. 오류 처리/재시도/로그 보강


11. 주의사항



  • 사이트 이용정책/robots.txt/요청 빈도 제한을 준수한다.

  • 개인 정보 또는 민감 정보는 저장/출력하지 않는다.

  • 모델 출력은 신뢰도 한계가 있으므로 원문 URL 추적 필드를 유지한다.





오늘의 이야기


#스하리1000명프로젝트,
Perso in Corea? Anche se non parli coreano, questa app ti aiuta a muoverti facilmente.
Parla semplicemente la tua lingua: traduce, cerca e mostra i risultati nella tua lingua.
Ottimo per i viaggiatori! Supporta oltre 10 lingue tra cui inglese, giapponese, cinese, vietnamita e altre.
Provalo adesso!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/21

오늘의 이야기


#스하리1000명프로젝트,
Perdu en Corée ? Même si vous ne parlez pas coréen, cette application vous aide à vous déplacer facilement.
Parlez simplement votre langue : il traduit, recherche et affiche les résultats dans votre langue.
Idéal pour les voyageurs ! Prend en charge plus de 10 langues, dont l'anglais, le japonais, le chinois, le vietnamien et plus encore.
Essayez-le maintenant !
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




2026/07/19

오늘의 이야기


#스하리1000명프로젝트,
In Korea verloren? Auch wenn Sie kein Koreanisch sprechen, hilft Ihnen diese App dabei, sich problemlos fortzubewegen.
Sprechen Sie einfach Ihre Sprache – es übersetzt, sucht und zeigt Ergebnisse in Ihrer Sprache an.
Ideal für Reisende! Unterstützt mehr als 10 Sprachen, darunter Englisch, Japanisch, Chinesisch, Vietnamesisch und mehr.
Probieren Sie es jetzt aus!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127




오늘의 이야기

<!DOCTYPE html> <html lang="ko"> <head>   <meta charset="UTF-8">   <title>Or...