Exemple #1
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
Exemple #2
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
Exemple #3
0
def 뉴스TBL에_존재하지않고_언어분석_원본TBL에만_존재하는_뉴스id을_가진_문서삭제(dbg_on=False,
                                                  사전검증=False,
                                                  shown_cnt=1):
    whoami = dbg.whoami(sys.modules[__name__].__file__,
                        inspect.stack()[0][3], dbg_on)
    inputs = dbg.inputs(inspect.currentframe(), dbg_on)

    tbl_A = '뉴스'
    col_a = '_id'
    tbl_B = '뉴스제목본문_ETRI언어분석_원본'
    col_b = '뉴스id'

    집합_A = mg.distinct(db명=DB명,
                       tbl명=tbl_A,
                       col명=col_a,
                       query=None,
                       dbg_on=dbg_on,
                       shown_cnt=shown_cnt)
    query = {col_b: {'$nin': 집합_A}}
    차집합_B = mg.distinct(db명=DB명,
                        tbl명=tbl_B,
                        col명=col_b,
                        query=query,
                        dbg_on=dbg_on,
                        shown_cnt=shown_cnt)

    if dbg_on == True:
        dbg._li(li=차집합_B, caller=inspect.stack()[0][3], shown_cnt=1)
    query = {col_b: {'$in': 차집합_B}}
    mg.delete_many(db명=DB명, tbl명=tbl_B, query=query, dbg_on=dbg_on, 사전검증=사전검증)
Exemple #4
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
Exemple #5
0
def 뉴스URL_중복제거로_tpl로딩(dbg_on=False, shown_cnt=1):
    뉴스원본url_li = mg.distinct(db명=DB명,
                             tbl명=PARSING_TBL,
                             col명='뉴스_url',
                             query=None,
                             dbg_on=dbg_on,
                             shown_cnt=shown_cnt)
    뉴스url_li = mg.distinct(db명=DB명,
                           tbl명=PARSED_TBL,
                           col명='뉴스_url',
                           query=None,
                           dbg_on=dbg_on,
                           shown_cnt=shown_cnt)
    파싱할url_li = lh.리스트1로부터_리스트2를_제거(li1=뉴스원본url_li, li2=뉴스url_li)
    return (뉴스원본url_li, 뉴스url_li, 파싱할url_li)
Exemple #6
0
def 뉴스TBL에_뉴스URL이_존재하면_뉴스원본TBL의_파싱완료를_True로_일괄업뎃(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)
    """
    """

    입력 = {'shown_cnt': shown_cnt, '사전검증': 사전검증}

    query = {'뉴스_url': {'$exists': 1}}
    뉴스url_li = mg.distinct(db명=DB명,
                           tbl명=PARSED_TBL,
                           col명='뉴스_url',
                           query=query,
                           dbg_on=dbg_on,
                           shown_cnt=shown_cnt)

    query = {'뉴스_url': {'$in': 뉴스url_li}}
    update = {'$set': {'파싱완료': True}}
    mg.update_many(db명=DB명,
                   tbl명=PARSING_TBL,
                   query=query,
                   update=update,
                   upsert=False,
                   dbg_on=dbg_on,
                   사전검증=사전검증)
Exemple #7
0
def 파싱완료True가_아닌_타겟의_query조건별_개수비교_보고(dbg_on=False):
    whoami = dbg.whoami(sys.modules[__name__].__file__,
                        inspect.stack()[0][3], dbg_on)
    inputs = dbg.inputs(inspect.currentframe(), dbg_on)
    """
    결과
      id개수               query
    0  1276  'res':{'$ne':None}
    1   468          'res':None
    2  1744                   _
    """

    query = {'파싱완료': {'$ne': True}, 'res': {'$ne': None}}
    li1 = mg.distinct(db명=DB명,
                      tbl명=PARSING_TBL,
                      col명='_id',
                      query=query,
                      dbg_on=dbg_on,
                      shown_cnt=1)

    query = {'파싱완료': {'$ne': True}, 'res': None}
    li2 = mg.distinct(db명=DB명,
                      tbl명=PARSING_TBL,
                      col명='_id',
                      query=query,
                      dbg_on=dbg_on,
                      shown_cnt=1)

    query = {'파싱완료': {'$ne': True}}
    li3 = mg.distinct(db명=DB명,
                      tbl명=PARSING_TBL,
                      col명='_id',
                      query=query,
                      dbg_on=dbg_on,
                      shown_cnt=1)

    print('\n' + '*' * 60 + inspect.stack()[0][3])
    dic = {
        'id개수': [len(li1), len(li2), len(li3)],
        'query': ["'res':{'$ne':None}", "'res':None", "_"],
        'id_li': [li1, li2, li3]
    }
    df = pd.DataFrame(dic)
    df1 = df.copy()
    del (df1['id_li'])
    print(df1)
    return df
Exemple #8
0
def 뉴스_원본TBL에_있는_뉴스url이_화면배치TBL에도_있다면_수집완료True_업뎃(dbg_on=False, 사전검증=False):
    print('\n' + '='*60 + inspect.stack()[0][3])

    뉴스url_li = mg.distinct(db명=DB명, tbl명=PARSING_TBL, col명='뉴스_url', query=None, dbg_on=dbg_on, shown_cnt=1)

    query = {'href':{'$in':뉴스url_li}}
    update = {'$set':{'수집완료':True}}
    mg.update_many(db명=DB명, tbl명=COLLECTING_TBL, query=query, update=update, upsert=False, dbg_on=dbg_on, 사전검증=사전검증)
Exemple #9
0
def 뉴스XX_언어분석TBL_id조사():
    id_li = mg.distinct(db명=DB명,
                        tbl명=TBL명,
                        col명='_id',
                        query=None,
                        dbg_on=True,
                        shown_cnt=1)
    id_li1 = lh.리스트의_중복제거(li=id_li)
Exemple #10
0
def 뉴스TBL과_RD_TBL간의_뉴스id를_비교대조(dbg_on=True):
    whoami = dbg.whoami(sys.modules[__name__].__file__,
                        inspect.stack()[0][3], dbg_on)
    inputs = dbg.inputs(inspect.currentframe(), dbg_on)

    뉴스TBL_ids = mg.distinct(db명=DB명,
                            tbl명='뉴스',
                            col명='_id',
                            query=None,
                            dbg_on=dbg_on,
                            shown_cnt=1)
    RD_TBL_ids = mg.distinct(db명=DB명,
                             tbl명=RD_TBL명,
                             col명='뉴스id',
                             query=None,
                             dbg_on=dbg_on,
                             shown_cnt=1)

    뉴스TBL_차집합_ids = lh.리스트1로부터_리스트2를_제거(li1=뉴스TBL_ids, li2=RD_TBL_ids)
    RD_TBL_차집합_ids = lh.리스트1로부터_리스트2를_제거(li1=RD_TBL_ids, li2=뉴스TBL_ids)
    교집한_ids = lh.리스트1과_리스트2의_교집합을_찾기(li1=뉴스TBL_ids, li2=RD_TBL_ids)
    dic = {
        'len(뉴스TBL_차집합_ids)': len(뉴스TBL_차집합_ids),
        'len(RD_TBL_차집합_ids)': len(RD_TBL_차집합_ids),
        'len(교집한_ids)': len(교집한_ids),
    }
    print('\n' + '*' * 60 + inspect.stack()[0][3])
    pp.pprint(dic)

    dic1 = {
        'ids명': ['뉴스TBL_차집합_ids', 'RD_TBL_차집합_ids', '교집한_ids'],
        'id_li': [뉴스TBL_차집합_ids, RD_TBL_차집합_ids, 교집한_ids],
        'ids_len': [len(뉴스TBL_차집합_ids),
                    len(RD_TBL_차집합_ids),
                    len(교집한_ids)]
    }
    df = pd.DataFrame(dic1)
    함수명 = inspect.stack()[0][3]
    dbg._df(df, caller=함수명, 컬럼순서li=[], df보고형태='df')
    mg.insert_many(db명=DB명,
                   tbl명=함수명,
                   dicli=df.to_dict('records'),
                   dbg_on=dbg_on,
                   사전검증=False)
Exemple #11
0
def RD_TBL의_뉴스id_중복조사(dbg_on=False):
    whoami = dbg.whoami(sys.modules[__name__].__file__,
                        inspect.stack()[0][3], dbg_on)
    inputs = dbg.inputs(inspect.currentframe(), dbg_on)
    뉴스id_li = mg.distinct(db명=DB명,
                          tbl명=RD_TBL명,
                          col명='뉴스id',
                          query=None,
                          dbg_on=dbg_on,
                          shown_cnt=1)
    lh.리스트의_중복제거(li=뉴스id_li)
Exemple #12
0
def TBL의_뉴스id가_RDTBL에도_존재한다면_파싱완료는_True여야한다(타겟col명,
                                            analyzerMethod='srl',
                                            subMethod='WSD',
                                            texttype='NNG',
                                            dbg_on=False):
    파싱타겟col명 = 타겟col명 + analyzerMethod + '_res'
    파싱저장col명 = 타겟col명 + analyzerMethod + '_' + subMethod + texttype + 'li'
    파싱완료col명 = 타겟col명 + analyzerMethod + '_res' + '파싱완료'

    query = {파싱저장col명: {'$ne': None}}
    뉴스id_li = mg.distinct(db명=DB명,
                          tbl명=TBL명,
                          col명='뉴스id',
                          query=query,
                          dbg_on=dbg_on,
                          shown_cnt=1)
    query = {'뉴스id': {'$in': 뉴스id_li}, 파싱타겟col명: {'$ne': None}}
    뉴스id_RD_li = mg.distinct(db명=DB명,
                             tbl명=RD_TBL명,
                             col명='_id',
                             query=None,
                             dbg_on=dbg_on,
                             shown_cnt=1)
    #projection = {'_id':1}
    #df = mg.find(db명=DB명, tbl명=RD_TBL명, query=None, projection=projection, dbg_on=dbg_on, 컬럼순서li=[], df보고형태='df')
    print(len(뉴스id_RD_li))

    query = {'_id': {'$in': 뉴스id_RD_li}}
    update = {'$set': {파싱완료col명: True}}
    mg.update_many(db명=DB명,
                   tbl명=RD_TBL명,
                   query=query,
                   update=update,
                   upsert=False,
                   dbg_on=dbg_on,
                   사전검증=False)
Exemple #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
Exemple #14
0
def 파싱대상_선정(파싱컬럼명, dbg_on=False):
    print('\n' + '='*60 + inspect.stack()[0][3])
    """
    """

    입력 = {'파싱컬럼명':파싱컬럼명, 'dbg_on':dbg_on}


    query = {파싱컬럼명:{'$exists':1}}
    id_li = mg.distinct(db명=DB명, tbl명=PARSING_TBL, col명='_id', query=query, dbg_on=dbg_on)

    query = {'_id':{'$nin':id_li}}
    projection = {'_id':1, 파싱컬럼명:1}
    df = 뉴스_로딩(query=query, projection=projection, dbg_on=dbg_on)

    dicli = df.to_dict('records')
    return dicli
Exemple #15
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, 사전검증=사전검증)