def res컬럼의_None_NotNone_분포현황_보고(dbg_on=False): print('\n' + '@' * 60 + inspect.stack()[0][3]) """ """ query = {'res': None} projection = {'_id': 1} df1 = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') query = {'res': {'$ne': None}} projection = {'_id': 1} df2 = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') rpt_dic = { 'res = None 인 문서 개수': len(df1), 'res = Not None 인 문서 개수': len(df2), } pp.pprint(rpt_dic)
def res컬럼의_None_NotNone_분포현황_보고(dbg_on=False): whoami = dbg.whoami(sys.modules[__name__].__file__, inspect.stack()[0][3], dbg_on) inputs = dbg.inputs(inspect.currentframe(), dbg_on) """ """ query = {'res': None} projection = {'_id': 1} df1 = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') query = {'res': {'$ne': None}} projection = {'_id': 1} df2 = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') rpt_dic = { 'res = None 인 문서 개수': len(df1), 'res = Not None 인 문서 개수': len(df2), } pp.pprint(rpt_dic)
def RD_TBL에서_뉴스XX의_뉴스id가_존재하면_뉴스TBL에_수집완료True를_업뎃(타겟col명='뉴스제목', analyzerMethod='srl', dbg_on=False, shown_cnt=1, 사전검증=False): whoami = dbg.whoami(sys.modules[__name__].__file__, inspect.stack()[0][3], dbg_on) inputs = dbg.inputs(inspect.currentframe(), dbg_on) 뉴스id_li = RD_TBL에서_ETRI언어분석수집이_정상완료된_뉴스idli로딩( 타겟col명=타겟col명, analyzerMethod=analyzerMethod, dbg_on=dbg_on, shown_cnt=shown_cnt) 수집완료col명 = 타겟col명 + '_ETRI언어분석_수집완료' query = {'_id': {'$in': 뉴스id_li}} update = {'$set': {수집완료col명: True}} mg.update_many(db명=DB명, tbl명='뉴스', query=query, update=update, upsert=False, dbg_on=dbg_on, 사전검증=사전검증) print('\n' + '*' * 60 + inspect.stack()[0][3] + '_검증') query = {'_id': {'$in': 뉴스id_li}, 수집완료col명: True} mg.find(db명=DB명, tbl명='뉴스', query=query, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df')
def 뉴스수집모듈의_두테이블간_컬럼들의_개수비교보고(dbg_on=False, shown_cnt=1): """ condition_li : 조건튜플 목록 (테이블명, 검사타겟컬럼1, 검사타겟컬럼2, ...) 결론 유일한 URL 개수만 서로 동기화되었다면 좋다. doc총개수, 유일한 수집일수는 화면배치TBL이 더 많은게 당연하다. 수집일수는 마이크로초까지 다루기 때문이다. """ condition_li = [ (lay.TBL명, 'href', '수집일시'), (RD_TBL명, '뉴스_url', '수집일시'), ] rpt_dicli = [] for cond in condition_li: print('\n' + '-'*60 + ' TBL명:{}, URL컬럼명:{}'.format(cond[0], cond[1])) projection = {'_id':1} df = mg.find(db명=DB명, tbl명=cond[0], query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') url_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[1], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 수집일시_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[2], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 자료구조_dic = { 'TBL명':cond[0], 'URL컬럼명':cond[1], '총_doc수':len(df), '유일한_URL수':len(url_li), '유일한_수집일시수':len(수집일시_li), } rpt_dicli.append(자료구조_dic) df = pd.DataFrame(rpt_dicli) print(df) return df
def 뉴스파싱모듈의_두테이블간_컬럼들의_개수비교보고(dbg_on=False, shown_cnt=1): """ condition_li : 조건튜플 목록 (테이블명, 검사타겟컬럼1, 검사타겟컬럼2, ...) 두 테이블 : RD_TBL, TBL 결론 두 테이블은 1:1 관계다. 뉴스원본TBL에서 가져온 모든 컬럼정보는 뉴스TBL과 동일해야 한다. """ condition_li = [ (RD_TBL명, '뉴스_url', '수집일시', '_id'), (TBL명, '뉴스_url', '수집일시', '뉴스_원본id'), ] rpt_dicli = [] for cond in condition_li: print('\n' + '-'*60 + ' TBL명:{}, URL컬럼명:{}'.format(cond[0], cond[1])) projection = {'_id':1} df = mg.find(db명=DB명, tbl명=cond[0], query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') url_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[1], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 수집일시_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[2], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 뉴스원본id_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[3], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 자료구조_dic = { 'TBL명':cond[0], 'URL컬럼명':cond[1], '총_doc수':len(df), '유일한_URL수':len(url_li), '유일한_수집일시수':len(수집일시_li), '뉴스_원본id':len(뉴스원본id_li), } rpt_dicli.append(자료구조_dic) df = pd.DataFrame(rpt_dicli) print(df) return df
def News_Classifier(실험tbl명=News_.PARSED_TBL, key_col='_id', 실험col명='뉴스본문', 분류기_알고리즘='MultinomialNB', 훈련tbl명='뉴스_ETRI언어분석', 훈련col명='뉴스본문srl_WSDNNGli', algorithm='KMeans', sampling=10000, n_clusters=2000, dbg_on=False, 사전검증=False): import ML print('\n' + '='*60 + inspect.stack()[0][3]) """ "어떤 클러스터"를 사용한 "어떤 훈련자료"를 이용해서 "어떤 분류기"를 훈련시킨다. ===== 사용법 ===== News_Classifier(실험tbl명=News_.PARSED_TBL, 실험col명='뉴스본문', 분류기_알고리즘='MultinomialNB', 훈련tbl명=None, 훈련col명=None, algorithm=None, sampling=None, n_clusters=None, dbg_on=False, 사전검증=False) News_Classifier(실험tbl명=News_.PARSED_TBL, key_col='_id' 실험col명='뉴스본문', 분류기_알고리즘='MultinomialNB', 훈련tbl명='뉴스_ETRI언어분석', 훈련col명='뉴스본문srl_WSDNNGli', algorithm='KMeans', sampling=10000, n_clusters=2000, dbg_on=False, 사전검증=False) 훈련tbl명='뉴스_ETRI언어분석', 훈련col명='뉴스본문srl_WSDNNGli', algorithm='KMeans', sampling=10000, n_clusters=2000 ===== 작업순서 ===== 실험자료 로딩 머신러닝_분류기_호출 """ # #입력 = {'tbl명':tbl명, 'clst타겟col명':clst타겟col명, 'algorithm':algorithm, 'n_clusters':n_clusters} # #clst_df = ML.cluster.XX_클러스터_검색로딩(clst_tbl=훈련tbl명, clst_col=훈련col명, algorithm=algorithm, sampling=sampling, n_clusters=n_clusters, dbg_on=dbg_on) query = {실험col명:{'$ne':None}} projection = {'_id':1, 실험col명:1} test_df = mg.find(db명=DB명, tbl명=실험tbl명, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') ML.classifier.뉴스클러스터기준_분류(test_df=test_df, 실험tbl명=실험tbl명, key_col=key_col, 실험col명=실험col명, 분류기_알고리즘=분류기_알고리즘, 훈련tbl명=훈련tbl명, 훈련col명=훈련col명, algorithm=algorithm, sampling=sampling, n_clusters=n_clusters, dbg_on=dbg_on, 사전검증=사전검증)
def 뉴스_원본의_중복현황(): projection = {'_id':1, '뉴스_url':1, '수집일시':1} df = mg.find(db명=DB명, tbl명=PARSING_TBL, query=None, projection=projection, dbg_on=False, 컬럼순서li=[], df보고형태='df') subset_li = [['뉴스_url'], ['뉴스_url', '수집일시']] for ss in subset_li: print('\n' + '= '*30 + 'subset=', ss) print('\n len(df) 원자료 : ',len(df)) df1 = df[ df.duplicated(subset=ss, keep='last') ] print('\n len(df) 중복자료 : ',len(df1))
def RD_TBL_차집합_ids에_해당하는_RD_TBL의_내용보기(dbg_on=True): tbl명 = '뉴스TBL과_RD_TBL간의_뉴스id를_비교대조' query = {'ids명': 'RD_TBL_차집합_ids'} dicli = mg.find(db명=DB명, tbl명=tbl명, query=query, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='dicli') RD_TBL_차집합_idli = dicli[0]['id_li'] query = {'_id': {'$in': RD_TBL_차집합_idli}} dicli = mg.find(db명=DB명, tbl명='뉴스', query=query, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='dicli')
def res컬럼값_데이터타입이_float64인_문서_보고(dbg_on=False): print('\n' + '='*60 + inspect.stack()[0][3]) """ """ query = {'res':{'$elemMatch':{'encoding':'utf-8'}}} #projection = {'_id':0,'res':1, 'r_txt':1} df1 = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') dicli = df1.to_dict('records') print(df1.iloc[:1,]) pp.pprint({'dicli[:1]':dicli[:1]}) pp.pprint({'len(df1)':len(df1)}) print(df1.dtypes)
def 화면배치TBL의_수집일시를_뉴스원본TBL에_업뎃(dbg_on=False, 사전검증=False): print('\n' + '='*60 + inspect.stack()[0][3]) projection = {'_id':1, 'href':1, '수집일시':1} df = mg.find(db명=DB명, tbl명='화면배치', query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df = df.sort_values(['href', '수집일시']) df = df.drop_duplicates(subset=['href'], keep='first', inplace=False) dicli = df.to_dict('records') dicli_len = len(dicli) i=1 for d in dicli: print('\n' + '-'*60 + '{}/{}, 수집일시:{}'.format(i, dicli_len, d['수집일시'])) query = {'뉴스_url':d['href']} update = {'$set':{'수집일시':d['수집일시'], '화면배치id':d['_id']}} mg.update_many(db명=DB명, tbl명=PARSING_TBL, query=query, update=update, upsert=True, dbg_on=dbg_on, 사전검증=사전검증) #break i+=1 if dbg_on == True: print('\n' + '='*60 + inspect.stack()[0][3]+'_검증') query = {'화면배치id':d['_id']} projection = {'_id':1, '화면배치id':1, '수집일시':1, '뉴스_url':1} dicli = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='dicli')
def 화면배치TBL_href와_뉴스원본TBL_뉴스url간의_매핑관계_관찰(dbg_on=False, shown_cnt=1): """ condition_li : 조건튜플 목록 (테이블명, 검사타겟컬럼1, 검사타겟컬럼2, ...) """ condition_li = [(lay.TBL명, 'href', '수집일시', '뉴스제목'), (RD_TBL명, '뉴스_url', '수집일시', '뉴스_url'), (TBL명, '뉴스_url', '수집일시', '뉴스제목')] rpt_dicli = [] for cond in condition_li: print('\n' + '-' * 60 + ' TBL명:{}, URL컬럼명:{}'.format(cond[0], cond[1])) projection = {'_id': 1} df = mg.find(db명=DB명, tbl명=cond[0], query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') url_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[1], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 수집일시_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[2], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 뉴스제목_li = mg.distinct(db명=DB명, tbl명=cond[0], col명=cond[3], query=None, dbg_on=dbg_on, shown_cnt=shown_cnt) 자료구조_dic = { 'TBL명': cond[0], 'URL컬럼명': cond[1], '총_doc수': len(df), '유일한_URL수': len(url_li), '유일한_수집일시수': len(수집일시_li), '유일한_뉴스제목수': len(뉴스제목_li), } rpt_dicli.append(자료구조_dic) df = pd.DataFrame(rpt_dicli) print(df) return df
def 뉴스_원본TBL_r_txt내용중_서비스이용제한_문구포함된df(): import re query = {'r_txt': {'$regex': '날씨', '$options': 1}} df = mg.find(db명=DB명, tbl명=PARSING_TBL, query=None, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df = df[df['r_txt'].str.contains(pat='제한', case=False, flags=re.IGNORECASE, na=None, regex=True)]
def 뉴스TBL을_뉴스_원본TBL로_복원(dbg_on=False): url_li = mg.distinct(db명=DB명, tbl명=PARSING_TBL, col명='뉴스_url', query=None, dbg_on=False, shown_cnt=10) query = {'뉴스_url':{'$nin':url_li}} projection = {'_id':0, '뉴스_url':1, '수집일시':1} dicli = mg.find(db명=DB명, tbl명=PARSED_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='dicli') #""" dicli_len = len(dicli) i=1 for d in dicli: print('\n' + '-'*60 + '{}/{}'.format(i, dicli_len)) query = {'뉴스_url':d['뉴스_url']} update = {'$set':{'수집일시':d['수집일시'], 'r_txt':'파싱완료'}} mg.update_one(db명=DB명, tbl명=PARSING_TBL, query=query, update=update, upsert=True, dbg_on=False) #break i+=1
def 뉴스TBL에는_중복된_뉴스원본id가_존재할수_없다(dbg_on=False, 사전검증=False): """ ===== 작업순서 ===== """ projection = {'_id':1, '뉴스_원본id':1} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') TF_srs = df.duplicated(subset=['뉴스_원본id'], keep='first') df = df[ TF_srs ] df_len = len(df) pp.pprint({'df_len':df_len}) if df_len == 0: print('if len(df) == 0: -> {} 는 중복없음.'.format('뉴스_원본id')) else: 삭제할_중복된_뉴스원본id에_해당하는_id_li = list(df['_id']) query = {'_id':{'$in':삭제할_중복된_뉴스원본id에_해당하는_id_li}} mg.delete_many(db명=DB명, tbl명=PARSED_TBL, query=query, dbg_on=dbg_on, 사전검증=사전검증)
def 뉴스_파싱완료TN_분포현황보고(dbg_on=False): print('\n' + '@' * 60 + inspect.stack()[0][3]) projection = {'_id': 1, '파싱완료': 1} df = mg.find(db명=DB명, tbl명=PARSING_TBL, query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df = df.fillna('_None') print(df.dtypes) g = df.groupby('파싱완료').count() print(g) return g
def 파싱할_뉴스원본을_URL중복제거로_선정후_dicli로딩(파싱컬럼명='r_txt', dbg_on=False): whoami = dbg.whoami(sys.modules[__name__].__file__, inspect.stack()[0][3], dbg_on) inputs = dbg.inputs(inspect.currentframe(), dbg_on) tpl = 뉴스URL_중복제거로_tpl로딩(dbg_on, shown_cnt=1) 파싱할url_li = tpl[2] query = {'뉴스_url': {'$in': 파싱할url_li}} projection = {'_id': 1, '뉴스_url': 1, 파싱컬럼명: 1, '수집일시': 1} dicli = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='dicli') return dicli
def 임시__뉴스본문의_HTML태그를_일괄제거업뎃(dbg_on=False, 사전검증=False): projection = {'_id':1, '뉴스본문':1} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df = df.fillna('_') df = df[ df['뉴스본문'] != '_' ] #return df df['뉴스본문'] = df['뉴스본문'].apply(lambda x: PCI.stripHTML(h=x, dbg_on=dbg_on) ) dicli = df.to_dict('records') dicli_len = len(dicli) i=1 for d in dicli: print('\n' + '-'*60 + '{}/{}'.format(i, dicli_len)) query = {'_id':d['_id']} update = {'$set':{'뉴스본문':d['뉴스본문']}} mg.update_one(db명=DB명, tbl명=PARSED_TBL, query=query, update=update, upsert=False, dbg_on=dbg_on, 사전검증=사전검증) i+=1
def TBL에서_뉴스url과_뉴스제목의_조합중복은_반드시_제거한다(dbg_on=False, 사전검증=False): import LangAnalysis as lanl """ 뉴스TBL에서 삭제된 id는 관련 테이블에서도 삭제 대상이다. 뉴스_ETRI언어분석_원본, 뉴스_ETRI언어분석, """ projection = {'_id':1, '뉴스_url':1, '뉴스제목':1} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=None, projection=projection, dbg_on=False, 컬럼순서li=[], df보고형태='df') df1 = df[ df.duplicated(subset=['뉴스제목', '뉴스_url'], keep='last') ] 제거id_li = list(df1['_id']) query = {'_id':{'$in':제거id_li}} mg.delete_many(db명=DB명, tbl명=PARSED_TBL, query=query, dbg_on=dbg_on, 사전검증=사전검증) query = {'뉴스id':{'$in':제거id_li}} mg.delete_many(db명=DB명, tbl명=lanl.TBL명, query=query, dbg_on=dbg_on, 사전검증=사전검증) mg.delete_many(db명=DB명, tbl명=lanl.RD_TBL명, query=query, dbg_on=dbg_on, 사전검증=사전검증)
def 뉴스url과_뉴스제목의_중복현황(): projection = {'_id':1, '뉴스_url':1, '뉴스제목':1} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=None, projection=projection, dbg_on=False, 컬럼순서li=[], df보고형태='df') group_li = [['뉴스_url', '뉴스제목'], ['뉴스제목', '뉴스_url']] for gr in group_li: print('\n' + '= '*30 + 'by=', gr) g = df.groupby(by=gr, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False) g = g.count().sort_values('_id') g = g[ g['_id'] > 1 ] print(g) print('\n len(g) : ',len(g)) subset_li = [['뉴스제목', '뉴스_url'], ['뉴스_url'], ['뉴스제목']] for ss in subset_li: print('\n' + '= '*30 + 'subset=', ss) print('\n len(df) 원자료 : ',len(df)) df1 = df[ df.duplicated(subset=ss, keep='last') ] print('\n len(df) 중복자료 : ',len(df1))
def res컬럼이_NotNone인_문서의_URL분포현황_보고(dbg_on=False): print('\n' + '@' * 60 + inspect.stack()[0][3]) """ URL를 파싱하고 URI, 서비스함수, 쿼리스트링별 등등 다각도로 분석할 필요가 있을까? """ query = {'res': {'$ne': None}} projection = {'_id': 1, '뉴스_url': 1} df = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') g = df.groupby('뉴스_url').count().sort_values('_id', ascending=False) print(g) return g
def 화면배치TBL에_존재하지_않는_URL은_뉴스원본TBL에_존재할수_없다(dbg_on=False, 사전검증=False): """ ===== 작업순서 ===== 화면배치TBL에서 유일한 href 목록을 로딩 href_li에 존재하지 않는 뉴스원본TBL의 뉴스_url 목록을 로딩 뉴스_url_li에 해당하는 _id로 문서 삭제 """ href_li = mg.distinct(db명=DB명, tbl명=COLLECTING_TBL, col명='href', query=None, dbg_on=dbg_on, shown_cnt=1) query = {'뉴스_url':{'$nin':href_li}} projection = {'_id':1, '뉴스_url':1} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df_len = len(df) pp.pprint({'df_len':df_len}) if df_len == 0: print('\n 정상. 화면배치TBL에_존재하지_않는_URL은_뉴스원본TBL에_존재하지 않는다. \n') else: 삭제할_미존재_뉴스url에_해당하는_id_li = list(df['_id']) query = {'_id':{'$in':삭제할_미존재_뉴스url에_해당하는_id_li}} mg.delete_many(db명=DB명, tbl명=PARSING_TBL, query=query, dbg_on=dbg_on, 사전검증=사전검증)
def res컬럼이_NotNone인_문서의_URL분포현황_보고(dbg_on=False): whoami = dbg.whoami(sys.modules[__name__].__file__, inspect.stack()[0][3], dbg_on) inputs = dbg.inputs(inspect.currentframe(), dbg_on) """ URL를 파싱하고 URI, 서비스함수, 쿼리스트링별 등등 다각도로 분석할 필요가 있을까? """ query = {'res': {'$ne': None}} projection = {'_id': 1, '뉴스_url': 1} df = mg.find(db명=DB명, tbl명=PARSING_TBL, query=query, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') g = df.groupby('뉴스_url').count().sort_values('_id', ascending=False) print(g) return g
def 뉴스_수집완료TN_현황보고(dbg_on=False): print('\n' + '@' * 60 + inspect.stack()[0][3]) """ True or None ===== 작업순서 ===== 화면배치TBL에서 수집완료 컬럼을 로딩 그룹-카운트 """ projection = {'_id': 1, '수집완료': 1} df = mg.find(db명=DB명, tbl명=COLLECTING_TBL, query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df') df = df.fillna('_None') print(df.dtypes) g = df.groupby('수집완료').count() print(g) return g
mg.TBL_자료구조_보고(db명=DB명, tbl명=LA.TBL명, col_uq=False, 보고제외할col_li=[]) # In[7]: #la_col = '뉴스제목srl_WSDNNGli' la_col = '뉴스본문srl_WSDNNGli' # In[8]: query = {la_col: {'$ne': None}} projection = {'뉴스id': 1, la_col: 1} df = mg.find(db명=DB명, tbl명=LA.TBL명, query=query, projection=projection, dbg_on=False, 컬럼순서li=[], df보고형태='df') # In[9]: # 원본 기초 청소 df[la_col] = df[la_col].apply(lambda x: sorted(x)) # # 명사SEQ 사전 정의 """ ============================== 명사SEQ 사전 정의 ============================== """ # In[11]:
def 뉴스원본id가_존재하지_않는_뉴스TBL의_문서(dbg_on=False): query = {'뉴스_원본id':None} df = mg.find(db명=DB명, tbl명=PARSED_TBL, query=query, projection=None, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df')