Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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')
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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, 사전검증=사전검증)
Beispiel #7
0
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))
Beispiel #8
0
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')
Beispiel #9
0
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)
Beispiel #10
0
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')
Beispiel #11
0
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
Beispiel #12
0
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)]
Beispiel #13
0
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
Beispiel #14
0
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, 사전검증=사전검증)
Beispiel #15
0
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
Beispiel #16
0
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
Beispiel #17
0
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
Beispiel #18
0
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, 사전검증=사전검증)
Beispiel #19
0
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))
Beispiel #20
0
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
Beispiel #21
0
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, 사전검증=사전검증)
Beispiel #22
0
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
Beispiel #23
0
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]:
Beispiel #25
0
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')