MBTI ๋ณ ํน์ฑ์ ํ์ ํ๋ ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ ๋๋ค. ์์ง๋ ํ ์คํธ๋ค์ ๋ณด๋ ์ด๋ชจ์ง๊ฐ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ ๊ฑธ ์ฐพ์ ์ ์์์ต๋๋ค.
###Q: Emoji๊ฐ ElasticSearch ์์ ๊ฒ์์ด ๋๋์?
###A: ๋ค Emoji๋ ํ
์คํธ๋ก ์ทจ๊ธ๋๊ธฐ ๋๋ฌธ์ ๊ฒ์์ด ์ ๋ฉ๋๋ค!
ํ์ง๋ง ๋ชจ๋ ์ด๋ชจ์ง๋ฅผ ๊ฒ์ํ์ฌ ๋ฌธ์ ์๊ฐ ์ผ๋ง๋ ์๋์ง ํ์
ํ๊ธฐ๋ ์ฝ์ง ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฏธ ์์ง๋ ๋ฐ์ดํฐ์์ ์ด๋ชจ์ง๋ง ํ์ฑ ํด๋ด
์๋ค.
์ ๋ Python์ Regex๋ฅผ ์ด์ฉํด์ ์ด๋ชจ์ง๋ฅผ ์ถ์ถํ์ต๋๋ค.
import pandas as pd
import re
# ... DB์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ ์๋ต
# df๋ ์นผ๋ผ์ผ๋ก contents(์์ง๋ ํ
์คํธ), doc_url(ํ
์คํธ์ url)์ ๊ฐ์ง๊ณ ์์
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags=re.UNICODE)
# emoji_set ์ ์๋ฌธ์์ ํ์ฑํ ๋ชจ๋ ์ด๋ชจ์ง๋ฅผ ์์งํจ
result, emoji_set = [], []
for idx, row in df.iterrows():
cont, url = row['contents'], row['doc_url']
emoji_list = emoji_pattern.findall(cont)
if not emoji_list:
continue
emoji_list = ''.join(emoji_list)
emj_set = list(set([e for e in emoji_list]))
result.append({url: emj_set})
emoji_set.extend(emj_set)
# set ํจ์๋ฅผ ์ฌ์ฉํด ์ค๋ณต์ ์ ๊ฑฐํจ
emoji_set = list(set(emoji_set))
# ์๋ผ์คํฑ์์น์ ์ฐ๊ฒฐ
es = elasticsearch.Elasticsearch(["<URL>"])
# emoji๋ฅผ ํ์ฑํ๋ ํจ์
def parse_emoji(t, e):
"""
:params t: elasticsearch ๊ฒฐ๊ณผ
:params e: emoji
"""
result_list = t.body.get('aggregations', {}).get('mbti_types', {}).get('buckets', [])
parse_meta = {r['key']:r['doc_count'] for r in result_list}
parse_meta = dict({'emoji': e}, **parse_meta)
# {"emoji": "emoji", "MBTI-TYPE": 1 ...}
return parse_meta
# ์ฟผ๋ฆฌ์ ์ด๋ชจ์ง๋ฅผ ๋ฃ์ด ๊ฐ ์ด๋ชจ์ง๋ณ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํจ
parse_list = []
for e in emoji_set:
query = {
"size": 0,
"query": {
"match": {
"contents": e
}
},
"aggs": {
"mbti_types": {
"terms": {
"field": "keyword",
"size": 16
}
}
}
}
t = es.search(index='mbti', body=query)
parse_list.append(parse_emoji(t, e))
์ถ์ฒ: https://studyprogram.tistory.com/1
Python์์ ํ ์คํธ ์์ ์ด๋ชจ์ง(emoji)์ ๊ฑฐํ๊ธฐ
ํ์ด์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ค ์์ ์ด๋ชจ์ง๊ฐ ์์ผ๋ฉด ์ฒ๋ฆฌ๋ฅผ ๋ชปํด์ ์๋ฌ๊ฐ ๋๋ ์ผ์ด ์์์ต๋๋ค. ์ ๋ ๋์ find_element_by_*****.send_key(text) ์์ text์ ์ด๋ชจ์ง๊ฐ ์์ ๋ WebDriverException: unkno..
studyprogram.tistory.com
์ด๋ฅผ ํตํด ์ป์ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.

๋๋ต์ ์ธ ๊ฒฐ๊ณผ์ด์ง๋ง, ์ด๋ฅผ RDB์ Insert ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ข ํฉํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
ํ์ง๋ง ์๊ฐํด๋ด์ผ ํ ๊ฒ์ด ์์ต๋๋ค. ์ฝํ ์ธ ๋ ์์ผ๋ก ๊ณ์ ์์ง๋ ๊ฒ์ด๊ณ ์ด๋ฏธ ์๋ ์ด๋ชจ์ง๋ผ๋ฉด ์นด์ดํธ๊ฐ ๊ณ์ Update ๋๋ ํํ๊ฐ ๋์ด์ผ ํฉ๋๋ค. ์ ๋ฐ์ดํธ๊ฐ ์์ฃผ ์ผ์ด๋๋ ํ๊ฒฝ์์๋ RDB๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ง ์์ต๋๋ค.
์ด์ ๋ฐฉํฅ์ 2๊ฐ์ง๋ฅผ ์๊ฐํด๋ด์ผ ํฉ๋๋ค.
1. RDB ์ธ์ ๋ค๋ฅธ DB๋ฅผ ์ฌ์ฉํ๋ค(Document DB or NoSQL)
2. ์ผ์๋ณ, MBTI ์ ํ๋ณ ์ด๋ชจ์ง์ ๋ฌธ์ ์๋ฅผ ์ง๊ณํ๋ค.
3. Elastic Search Query์์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ค.
ํ์ฌ Elastic Search๋ฅผ ๊ณต๋ถ ์ค์ด๋, ๋ค์์๋ 3๋ฒ ํด๊ฒฐ๋ฐฉ์์ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.