๐Ÿ“ฆ๋ถ„์„ ํ”„๋กœ์ ํŠธ/๐Ÿป ์ด๋ชจํ‹ฐ์ฝ˜ ํŠธ๋ Œ๋“œ ๋ฐ ํ†ต๊ณ„ ๋ถ„์„

๐Ÿป ์ด๋ชจํ‹ฐ์ฝ˜ ํŠธ๋ Œ๋“œ ๋ฐ ํ†ต๊ณ„ ๋ถ„์„ (3) - EasyOCR, Google Cloud Vision API

๋ฐ์ดํ„ฐํŒ์Šค 2024. 10. 13. 15:24

EasyOCR๋ฅผ ํ™œ์šฉํ•ด ์Šคํฌ๋ฆฐ์ƒท์„ ํ…์ŠคํŠธ๋กœ ์ „ํ™˜

import easyocr

# EasyOCR Reader ์ƒ์„ฑ
reader = easyocr.Reader(['en', 'ko'])  # ์˜์–ด์™€ ํ•œ๊ตญ์–ด ์ง€์›

# ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ์ถ”์ถœ
result = reader.readtext('C:\\Users\\dasom\\Desktop\\google api\\sample.png')

# ํ…์ŠคํŠธ ์ถœ๋ ฅ
for detection in result:
    print(detection[1])  # ํ…์ŠคํŠธ ๋ถ€๋ถ„๋งŒ ์ถœ๋ ฅ

 

๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ฐ˜ EasyOCR๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

Tesseract OCR๋ณด๋‹ค๋Š” ์ž˜ ๋‚˜์˜ค์ง€๋งŒ ์—ฌ์ „ํžˆ ์„ฑ๋Šฅ์ด ๊ตฌ๋ฆฝ๋‹ˆ๋‹ค.

์ด์ œ ๋‚จ์€ ๋ฐฉ๋ฒ•์€ Google Cloud Vision API ๋˜๋Š” chat gpt๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ์—” ๋”ฅ๋Ÿฌ๋‹์„ ์ด์šฉํ•ด ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ  ํ…์ŠคํŠธ ์ „ํ™˜ ์„ฑ๋Šฅ์ด ๋Š˜์–ด๋‚œ ๋ชจ๋ธ์„ ์“ฐ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ์š”.

๊ทธ๋Ÿฌ๋ ค๋จผ ์™„๋ฒฝํ•œ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ๊ทธ๊ฑธ๋กœ ๋ชจ๋ธ ํ›ˆ๋ จ์„ ํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋งž์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ธ๊ฑฐ ๊ฐ™์•„์„œ google cloud vision api๋ฅผ ์ด์šฉํ•ด ๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๊ฐ€์žฅ ๋น ๋ฅด๊ณ  ์†์‰ฌ์šด ๋ฐฉ๋ฒ•์€ chat gpt์ด๊ธด ํ•˜์ง€๋งŒ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋‹ˆ๊นŒ api๋ฅผ ์ด์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž..

 

 

Google Cloud Vision API๋ฅผ ํ™œ์šฉํ•ด ์Šคํฌ๋ฆฐ์ƒท์„ ํ…์ŠคํŠธ๋กœ ์ „ํ™˜

import io
import os
from google.cloud import vision

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r"C:\Users\user\Desktop\google api\emoticon.json"

# Google Cloud Vision API ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ
client = vision.ImageAnnotatorClient()

# ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ
image_path = 'C:\\Users\\user\\Desktop\\google api\\sample.png'

# ์ด๋ฏธ์ง€ ์ฝ๊ธฐ
with io.open(image_path, 'rb') as image_file:
    content = image_file.read()

# ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์„ค์ •
image = vision.Image(content=content)

# ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ๊ฐ์ง€
response = client.text_detection(image=image)
texts = response.text_annotations

# ์ถ”์ถœ๋œ ํ…์ŠคํŠธ ์ถœ๋ ฅ
for text in texts:
    print(f"Detected text: {text.description}")

# ์—๋Ÿฌ ํ•ธ๋“ค๋ง
if response.error.message:
    raise Exception(f'{response.error.message}')

 

Googl Cloud vision api๋Š” ํ•œ๋‹ฌ์— 1000ํšŒ์— ์ œํ•œํ•˜์—ฌ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.

์‹ ๊ทœ ์‚ฌ์šฉ์ž๋Š” ํ•œ๋‹ฌ์— 30$ ์ดํ•˜๊นŒ์ง€๋Š” ๋ฌด๋ฃŒ๋ผ๊ณ  ํ•ด์„œ google cloud ๊ณ„์ • ์ƒ์„ฑ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  emotcion.json ํŒŒ์ผ์„ ๋‹ค์šด๋ฐ›์•„์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•ด์คฌ์Šต๋‹ˆ๋‹ค!!

ํ•ด๋‹น ๋ฐฉ๋ฒ•์€ ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•˜์‹œ๋ฉด ์ž์„ธํ•˜๊ฒŒ ๋‚˜์˜ค๋‹ˆ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ ํ›„ , ์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์ถ”์ถœํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์•„์ฃผ์•„์ฃผ ์ž˜ ๋˜๋„ค์š” ๋งŒ์กฑ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

 

์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•ด์„œ ํ•œ์ค„ ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

import io
import os
import pandas as pd
from google.cloud import vision

# Google Cloud Vision API ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ
client = vision.ImageAnnotatorClient()

# ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ
image_path = 'C:\\Users\\user\\Desktop\\google api\\sample2.png'

# ์ด๋ฏธ์ง€ ์ฝ๊ธฐ
with io.open(image_path, 'rb') as image_file:
    content = image_file.read()

# ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์„ค์ •
image = vision.Image(content=content)

# ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ๊ฐ์ง€
response = client.text_detection(image=image)
texts = response.text_annotations

# ์ฒซ ๋ฒˆ์งธ ํ…์ŠคํŠธ(์ „์ฒด ํ…์ŠคํŠธ)๋ฅผ ์ค„ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
if texts:
    full_text = texts[0].description  # ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์ด ์ „์ฒด ํ…์ŠคํŠธ
    lines = full_text.split('\n')  # ์ค„๋ฐ”๊ฟˆ(\n)์„ ๊ธฐ์ค€์œผ๋กœ ํ…์ŠคํŠธ ๋ถ„๋ฆฌ

    # ์ค„ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ๋œ ํ…์ŠคํŠธ๋ฅผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜
    df = pd.DataFrame({'Detected Text': lines})

    # ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
    print(df)

# ์—๋Ÿฌ ํ•ธ๋“ค๋ง
if response.error.message:
    raise Exception(f'{response.error.message}')

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…์ŠคํŠธ๊ฐ€ ํ•œ์ค„ ๋‹จ์œ„๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ทผ๋ฐ ๊น”๋”ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅ์ด ๋˜์งˆ ์•Š์Šต๋‹ˆ๋‹ค. 

์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ค„ ๋‹จ์œ„๋กœ ์ธ์‹ํ•œ ํ›„, ๊ฐ ์ค„์„ ๋ณ„๋„๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Google Cloud Vision API๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค„ ๋‹จ์œ„๋กœ ํ…์ŠคํŠธ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ์ถ”์ถœ > ์ค„ ๋‹จ์œ„๋กœ ์ €์žฅ์ด ์•„๋‹ˆ๋ผ

ํ…์ŠคํŠธ ์ถ”์ถœ์‹œ ์ค„ ๋‹จ์œ„๋กœ ์ถ”์ถœ > ์ค„ ๋‹จ์œ„๋กœ ์ €์žฅ  ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

import io
import os
import pandas as pd
from google.cloud import vision

# Google Cloud Vision API ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ
client = vision.ImageAnnotatorClient() # Google Cloud Vision API์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ Vision API๋กœ ๋ณด๋‚ด๊ณ  ํ…์ŠคํŠธ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ
image_path = 'C:\\Users\\user\\Desktop\\google api\\sample4.png' # ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ๋กœ๋Š” ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

# ์ด๋ฏธ์ง€ ์ฝ๊ธฐ
with io.open(image_path, 'rb') as image_file: # rb ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. io.open()์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ฝ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    content = image_file.read() # ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ์–ด์™€์„œ content ๋ณ€์ˆ˜์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‚ด์šฉ์€ Vision API๋กœ ์ „์†ก๋  ์ด๋ฏธ์ง€์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค.

# ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์„ค์ •
image = vision.Image(content=content)  # Vision API์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. content ๋ณ€์ˆ˜์—๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ ๊ฐ์ง€
response = client.text_detection(image=image) # Vision API์— ํ…์ŠคํŠธ ๊ฐ์ง€๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์€ ์ด๋ฏธ์ง€์—์„œ ํ…์ŠคํŠธ๋ฅผ ์ฐพ์•„์„œ ์‘๋‹ต(response) ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. response์—๋Š” ๊ฐ์ง€๋œ ํ…์ŠคํŠธ ์ •๋ณด๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

texts = response.text_annotations

# ๊ฐ ํ…์ŠคํŠธ ์ค„ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
if texts: # ํ…์ŠคํŠธ๊ฐ€ ๊ฐ์ง€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ํ…์ŠคํŠธ๊ฐ€ ๊ฐ์ง€๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ดํ›„ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    # ์ฒซ ๋ฒˆ์งธ ํ…์ŠคํŠธ ํ•ญ๋ชฉ์— ์ „์ฒด ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋จ
    full_text = texts[0].description # ์ „์ฒด ํ…์ŠคํŠธ๋Š” texts[0].description์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ…์ŠคํŠธ๋Š” ์ด๋ฏธ์ง€์—์„œ ๊ฐ์ง€๋œ ๋ชจ๋“  ํ…์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
    lines = full_text.split('\n') # ํ…์ŠคํŠธ๋ฅผ ์ค„๋ฐ”๊ฟˆ(\n)์„ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ์ค„์„ lines ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    # ์ค„ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ๋œ ํ…์ŠคํŠธ๋ฅผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜
    df = pd.DataFrame({'Detected Text': lines}) # ๋ถ„๋ฆฌ๋œ ํ…์ŠคํŠธ ์ค„์„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์€ ํ•œ ์—ด(Detected Text)๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ ํ–‰์€ ๊ฐ์ง€๋œ ํ…์ŠคํŠธ์˜ ํ•œ ์ค„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    # ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
    print(df)

# ์—๋Ÿฌ ํ•ธ๋“ค๋ง
if response.error.message:
    raise Exception(f'{response.error.message}')

 

์ฃผ์„์„ ๋‚จ๊ฒจ์„œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ํ•ด์„ค์„ ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. 

์ฝ”๋“œ์— ๋Œ€ํ•œ ์ฃผ์„์„ ๊ณ„์† ๋‚จ๊ธฐ๋Š” ์ด์œ ๋Š” ๋‹ค๋ฅธ ๋ถ„๋“ค์ด ์ดํ•ดํ•˜๊ธฐ ํŽธํ•จ๋„ ์žˆ์ง€๋งŒ,

๋‚˜์ค‘์— ์ œ๊ฐ€ ๋‹ค์‹œ ๋ณผ๋•Œ ์™œ ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ผ์ง€? ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๊ธฐ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„ ์ž‘์„ฑํ•˜๋Š” ํŽธ์ž…๋‹ˆ๋‹ค.  

 

์•„์ฃผ ์ž˜ ์ถ”์ถœ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด๋ด…์‹œ๋‹ค.

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ csv๋กœ ๋ฐ”๊พผ๋‹ค์Œ์— ์ค‘๊ฐ„ ์ค‘๊ฐ„์— ์ œ๋Œ€๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ๋“ค์„ ํ™•์ธํ•˜์—ฌ ์ˆ˜์ž‘์—…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

# ์ง€์ •ํ•  ์นผ๋Ÿผ๋ช… ๋ฆฌ์ŠคํŠธ
column_names = ['Text']
left = pd.read_csv('C:\\Users\\user\\Desktop\\analysis\\project\emoticon\\199.csv', encoding='utf-8-sig', header=None, names=column_names)

# ์ง€์ •ํ•  ์นผ๋Ÿผ๋ช… ๋ฆฌ์ŠคํŠธ
column_names = ['Text']
right = pd.read_csv('C:\\Users\\user\\Desktop\\analysis\\project\emoticon\\200.csv', encoding='utf-8-sig', header=None, names=column_names)

import pandas as pd

# DataFrame์œผ๋กœ ๋ถˆ๋Ÿฌ์™”์„ ๋•Œ ์ด์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
left_df = pd.DataFrame(left, columns=["Text"])
right_df = pd.DataFrame(right, columns=["Text"])

# ์ง์ˆ˜ ํ•ญ๋ชฉ(์ด๋ชจํ‹ฐ์ฝ˜)๊ณผ ํ™€์ˆ˜ ํ•ญ๋ชฉ(์ž‘๊ฐ€๋ช…) ๋ถ„๋ฆฌ
emoticons = left_df.iloc[::2].reset_index(drop=True)  # ์ง์ˆ˜ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ (์ด๋ชจํ‹ฐ์ฝ˜)
authors = left_df.iloc[1::2].reset_index(drop=True)   # ํ™€์ˆ˜ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ (์ž‘๊ฐ€๋ช…)

emoticons2 = right_df.iloc[::2].reset_index(drop=True)  # ์ง์ˆ˜ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ (์ด๋ชจํ‹ฐ์ฝ˜)
authors2 = right_df.iloc[1::2].reset_index(drop=True)   # ํ™€์ˆ˜ ์ธ๋ฑ์Šค ํ•ญ๋ชฉ (์ž‘๊ฐ€๋ช…)

# ์ƒˆ๋กœ์šด DataFrame ๊ตฌ์„ฑ
result_df = pd.DataFrame({
    "์ด๋ชจํ‹ฐ์ฝ˜": emoticons["Text"],
    "์ž‘๊ฐ€๋ช…": authors["Text"]
})

result_df2 = pd.DataFrame({
    "์ด๋ชจํ‹ฐ์ฝ˜": emoticons2["Text"],
    "์ž‘๊ฐ€๋ช…": authors2["Text"]
})

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(result_df)

result_df['์ˆœ์œ„'] = [i for i in range(1, 2*len(result_df), 2)]  # 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํ™€์ˆ˜ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
result_df2['์ˆœ์œ„'] = [i for i in range(2, 2*len(result_df2)+1, 2)]  # 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํ™€์ˆ˜ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

result = pd.concat([result_df, result_df2], ignore_index=True)

result_sorted = result.sort_values(by='์ˆœ์œ„')
result_sorted_reset = result_sorted.reset_index(drop=True)

๊ทธ ๋‹ค์Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์ณค์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์— ํ•ด์•ผ ํ•  ๊ฒƒ์€ ํ•˜๋‚˜์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ž‘์—…์œผ๋กœ ์ˆ˜์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.