def test_extract_topics_1():
    # https://kokkai.ndl.go.jp/#/detail?minId=120405254X01120210309
    first_speech = """
    (省略)
        ―――――――――――――
     議事日程 第五号
      令和三年三月九日
        午後一時開議
     第一 原子力発電施設等立地地域の振興に関する特別措置法の一部を改正する法律案(内閣提出)
        ―――――――――――――
    ○本日の会議に付した案件
     日程第一 原子力発電施設等立地地域の振興に関する特別措置法の一部を改正する法律案(内閣提出)
     デジタル社会形成基本法案(内閣提出)、デジタル庁設置法案(内閣提出)、デジタル社会の形成を図るための関係法律の整備に関する法律案(内閣提出)、公的給付の支給等の迅速かつ確実な実施のための預貯金口座の登録等に関する法律案(内閣提出)及び預貯金者の意思に基づく個人番号の利用による預貯金口座の管理等に関する法律案(内閣提出)の趣旨説明及び質疑
        午後一時二分開議
    """

    expected_topics = [
        '原子力発電施設等立地地域の振興に関する特別措置法の一部を改正する法律案(内閣提出)',
        'デジタル社会形成基本法案(内閣提出)',
        'デジタル庁設置法案(内閣提出)',
        'デジタル社会の形成を図るための関係法律の整備に関する法律案(内閣提出)',
        '公的給付の支給等の迅速かつ確実な実施のための預貯金口座の登録等に関する法律案(内閣提出)',
        '預貯金者の意思に基づく個人番号の利用による預貯金口座の管理等に関する法律案(内閣提出)の趣旨説明及び質疑',
    ]
    assert extract_topics(first_speech) == expected_topics

    expected_topics_no_split = [
        '原子力発電施設等立地地域の振興に関する特別措置法の一部を改正する法律案(内閣提出)',
        'デジタル社会形成基本法案(内閣提出)、デジタル庁設置法案(内閣提出)、デジタル社会の形成を図るための関係法律の整備に関する法律案(内閣提出)、公的給付の支給等の迅速かつ確実な実施のための預貯金口座の登録等に関する法律案(内閣提出)及び預貯金者の意思に基づく個人番号の利用による預貯金口座の管理等に関する法律案(内閣提出)の趣旨説明及び質疑',
    ]
    assert extract_topics(first_speech,
                          split=False) == expected_topics_no_split
def test_extract_topics_4():
    # https://kokkai.ndl.go.jp/#/detail?minId=120115254X01920200527
    first_speech = """
    (省略)
        ━━━━━━━━━━━━━
    ○議事日程 第十九号
      令和二年五月二十七日
       午前十時開議
     第一 所得に対する租税に関する二重課税の除
      去並びに脱税及び租税回避の防止のための日
      本国とアルゼンチン共和国との間の条約の締
      結について承認を求めるの件(衆議院送付)
     第二 所得に対する租税に関する二重課税の除
      去並びに脱税及び租税回避の防止のための日
      本国とウルグアイ東方共和国との間の条約の
      締結について承認を求めるの件(衆議院送付
      )
        ━━━━━━━━━━━━━
    ○本日の会議に付した案件
     一、復興庁設置法等の一部を改正する法律案(
      趣旨説明)
     以下 議事日程のとおり
         ─────・─────
    """

    expected_topics = [
        '所得に対する租税に関する二重課税の除去並びに脱税及び租税回避の防止のための日本国とアルゼンチン共和国との間の条約の締結について承認を求めるの件(衆議院送付)',
        '所得に対する租税に関する二重課税の除去並びに脱税及び租税回避の防止のための日本国とウルグアイ東方共和国との間の条約の締結について承認を求めるの件(衆議院送付)',
        '復興庁設置法等の一部を改正する法律案(趣旨説明)',
    ]
    assert extract_topics(first_speech) == expected_topics
def test_extract_topics_2():
    # https://kokkai.ndl.go.jp/#/detail?minId=120304183X00320201126
    first_speech = """
    (省略)
        ―――――――――――――
    本日の会議に付した案件
     日本国憲法の改正手続に関する法律の一部を改正する法律案(逢沢一郎君外五名提出、第百九十六回国会衆法第四二号)
     日本国憲法及び日本国憲法に密接に関連する基本法制に関する件(日本国憲法及び憲法改正国民投票法を巡る諸問題)
         ――――◇―――――
        """

    expected_topics = [
        '日本国憲法の改正手続に関する法律の一部を改正する法律案(逢沢一郎君外五名提出、第百九十六回国会衆法第四二号)',
        '日本国憲法及び日本国憲法に密接に関連する基本法制に関する件(日本国憲法及び憲法改正国民投票法を巡る諸問題)',
    ]
    assert extract_topics(first_speech) == expected_topics
示例#4
0
    def scrape_minutes_activities_speeches_urls(self, response_body):
        minutes_lst, activity_lst, speech_lst, url_lst = [], [], [], []

        for meeting_rec in response_body['meetingRecord']:
            try:
                minutes = build_minutes(
                    meeting_rec['nameOfHouse'] + meeting_rec['nameOfMeeting'],
                    datetime.strptime(meeting_rec['date'], '%Y-%m-%d'))
                minutes.ndl_min_id = meeting_rec['issueID']
                topics = extract_topics(
                    meeting_rec['speechRecord'][0]['speech'])
                if topics:
                    minutes.topics = topics
            except ValueError as e:
                LOGGER.warning(f'failed to parse minutes: {e}')
                continue
            minutes_lst.append(minutes)

            url = build_url(meeting_rec['meetingURL'], UrlTitle.HONBUN,
                            self.domain)
            url.to_id = minutes.id
            url_lst.append(url)

            speakers = set()
            for speech_rec in meeting_rec['speechRecord']:
                speaker = speech_rec['speaker']
                speech = build_speech(minutes.id,
                                      int(speech_rec['speechOrder']))
                speech.speaker_name = speaker
                if self.collect_speech:
                    speech_lst.append(speech)
                if speaker not in speakers:
                    speakers.add(speaker)
                    try:
                        member = self.member_finder.find_one(speaker)
                    except Exception:
                        pass
                    else:
                        activity = build_minutes_activity(
                            member.id, minutes.id, minutes.start_date_time)
                        url = build_url(speech_rec['speechURL'],
                                        UrlTitle.HONBUN, self.domain)
                        url.to_id = activity.id
                        activity_lst.append(activity)
                        url_lst.append(url)

        return minutes_lst, activity_lst, speech_lst, url_lst
def test_extract_topics_3():
    # https://kokkai.ndl.go.jp/#/detail?minId=120104577X00320200601
    first_speech = """
    (省略)
        ―――――――――――――
    本日の会議に付した案件
     政府参考人出頭要求に関する件
     公職選挙法の一部を改正する法律案(逢沢一郎君外九名提出、衆法第一六号)
     政治倫理の確立及び公職選挙法改正に関する件
         ――――◇―――――
    """

    expected_topics = [
        '政府参考人出頭要求に関する件',
        '公職選挙法の一部を改正する法律案(逢沢一郎君外九名提出、衆法第一六号)',
        '政治倫理の確立及び公職選挙法改正に関する件',
    ]
    assert extract_topics(first_speech) == expected_topics