-
2021.03.24 - [✎ 21.上/Data] - [티스토리 게시글 추천 시스템 만들기] #1 계획
한글만 분석하기 위해 한글 형태소 분석기를 사용했다. 나는 이 중에 정규화까지 가능하다는 OKT를 사용했다.
tag Package — KoNLPy 0.5.2 documentation
Parameters: jvmpath – The path of the JVM passed to init_jvm(). userdic – The path to the user dictionary. This enables the user to enter custom tokens or phrases, that are mandatorily assigned to tagged as a particular POS. Each line of the dictionary
konlpy.org
사실.. HDFS에 저장할 필요도 없이 바로 HIVE로 쏠까 했는데 다 한번씩 만져보고싶어서 HDFS에 중간에 한번 저장하는 과정을 거쳤다.
from typing import List, Optionalfrom bs4 import BeautifulSoupimport requestsimport loggingimport refrom konlpy.tag import Oktfrom pyspark.sql import SparkSessionfrom tqdm import tqdmlogger = logging.getLogger()def analysis_nlp(texts: List) -> List:okt = Okt()article_pos_list = []for text in texts:article_pos = okt.pos(text)if article_pos:for pos in article_pos:article_pos_list.append({"morpheme": [pos[1]], "text": [pos[0]]})return article_pos_listdef get_content_main(post_num: int) -> List:contents: List = [""] * 500for num in tqdm(range(1, post_num)):result = get_content(num)if result:contents[num]: Optional[List] = resultelse:logger.warning("존재하지 않는 게시글입니다.")total_pos = []for content in contents:if content:nlp_set: list = analysis_nlp(content)total_pos.extend(nlp_set)return total_posdef get_content(post_num: int) -> Optional[List]:url: str = "https://weejw.tistory.com/%d" % post_numcontent = requests.get(url).contentlogger.info("URL:%s" % url)soup = BeautifulSoup(content, 'html.parser')exists_post = soup.select_one('div.absent_post')if exists_post is not None:return Nonecontents = soup.select_one('div.tt_article_useless_p_margin')if contents is None:return Noneresults: str = str(contents.findAll('p'))results: List = re.sub('<.+?>', '', results).replace("[", "").replace("]", "").split(",")results: List = [result for result in results if (result not in ['', ' '])]return results if results else Nonedef get_spark_session():app_name = "Python Example - PySpark Parsing Dictionary as DataFrame"master = "local"spark = SparkSession.builder \.appName(app_name) \.master(master) \.getOrCreate()return sparkdef log_init():logger.setLevel(logging.INFO)formatter = logging.Formatter('%(asctime)s [%(levelname)s]: %(message)s')stream_handler = logging.StreamHandler()stream_handler.setFormatter(formatter)logger.addHandler(stream_handler)def main():log_init()spark = get_spark_session()#total_pos = get_content_main(post_num=500)#spark_df = spark.createDataFrame(total_pos)file_path = "hdfs://localhost:9000/user/jiwonwee/crawler_data/crawler_data.parquet"# HDFS에 파일 저장spark_df.write.parquet(file_path)if __name__ == '__main__':main()HDFS에 저장된 파일을 다시 불러와서 출력하면 다음과 같다. 굿 ^_^
spark_df = spark.read.parquet(file_path)spark_df.show()REFERENCES
[Python] 한국어 형태소 분석기 체험 및 비교(Okt, Mecab, Komoran, Kkma)
[Python] 한국어 형태소 분석기 체험 및 비교(Okt, Mecab, Komoran, Kkma) Published Jun 07, 2020 한국어는 영어처럼 띄어쓰기만으로 단어를 분리하면 제대로 되질 않습니다. 한국어는 어미와 조사 등이
soohee410.github.io
macOS에서 Hadoop 설치하기
rap0d.github.io
hadoop - HBase 및 Parquet 파일에 데이터 저장 - IT 툴 넷
hadoop - HBase 및 Parquet 파일에 데이터 저장 출처 hadoop hbase parquet phoenix 저는 빅 데이터를 처음 사용하고 데이터를 유지하고 검색하는 다양한 방법을 이해하려고합니다. Parquet과 HBase는 열 지향 저장
pythonq.com
apache-spark 시작하기(Macbook), spark 설치, pyspark
스파크 사용 이유는? 먼저 데이터가 엄청난 양으로 증가되며, 이를 처리하기 위해 분산 프레임워크인 Hadoop과 최근에 Spark가 많이 쓰이고 있다. Hadoop은 데이터를 수집하는 목적으로 많이 사용된
parkaparka.tistory.com
위지원데이터 엔지니어로 근무 중에 있으며 데이터와 관련된 일을 모두 좋아합니다!. 특히 ETL 부분에 관심이 가장 크며 데이터를 빛이나게 가공하는 일을 좋아한답니다 ✨
'2021년 > Data' 카테고리의 다른 글
[티스토리 게시글 추천 시스템 만들기] #4 worldCloud 만들기 (0) 2021.03.26 [티스토리 게시글 추천 시스템 만들기] #3 클롤링 데이터 TF-IDF 계산하기 (0) 2021.03.25 [티스토리 게시글 추천 시스템 만들기] #1 계획 (0) 2021.03.24 koalas (0) 2021.03.23 [DB 공부] PostgreSQL Query (0) 2021.03.22