Пример #1
0
def evaluate_newest_sessions(id_list: List[str]):
    for id in id_list:
        current_session = utils.get_crawled_session(id)
        if not current_session:
            logging.warning(f"Could not find the session '{id}' in crawler DB. Won't update...")
            continue

        file_content = read_transcripts_json(current_session)
        for metadata, inter_candidates in file_content:
            transcript = Transcript.from_interactions(
                metadata=metadata,
                interactions=extract_communication_model(inter_candidates))

            # write to DB
            if len(transcript.interactions) == 0:
                logging.warning(f"Could not find any interactions in session with id '{id}'")
            else:
                session_id = transcript.session_no
                logging.info(
                    f"Inserting evaluated session '{session_id}' with {len(transcript.interactions)} interactions into DB")

                transcript_dict = transcript.dict(exclude_none=True, exclude_unset=True)
                transcript_dict['session_id'] = session_id
                database.update_one("session", {"session_id": session_id}, transcript_dict)

    utils.notify_sentiment_analysis_group(id_list)
Пример #2
0
    def test_extract_funny_sample1(self):
        comment = "(Heiterkeit und Beifall bei Abgeordneten der CDU/CSU, der SPD und der LINKEN – Lachen bei der AfD)"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]
        interaction_1 = cm[1]
        interaction_2 = cm[2]
        interaction_3 = cm[3]

        self.assertEqual(interaction_0.sender, Faction.CDU_AND_CSU)
        self.assertEqual(
            interaction_0.message,
            'Heiterkeit und Beifall bei Abgeordneten der CDU/CSU, der SPD und der LINKEN'
        )
        self.assertEqual(interaction_1.sender, Faction.SPD)
        self.assertEqual(
            interaction_1.message,
            'Heiterkeit und Beifall bei Abgeordneten der CDU/CSU, der SPD und der LINKEN'
        )
        self.assertEqual(interaction_2.sender, Faction.DIE_LINKE)
        self.assertEqual(
            interaction_2.message,
            'Heiterkeit und Beifall bei Abgeordneten der CDU/CSU, der SPD und der LINKEN'
        )
        self.assertEqual(interaction_3.sender, Faction.AFD)
        self.assertEqual(interaction_3.message, 'Lachen bei der AfD')
Пример #3
0
def manual_import(args):
    if args.dry_run:
        MDB.set_storage_mode("runtime")

    files = []
    for file in args.files:
        if file.is_file():
            files.append(file)
        elif file.is_dir():
            for sub_file in list(file.iterdir()):
                if sub_file.is_file():
                    files.append(sub_file)

    for file in files:
        logger.info("reading \"{}\" now...".format(file.as_posix()))
        transcripts = list()

        if file.suffix.lower() == ".json":
            logger.info("reading json based transcript file now...")
            file_content = read_transcripts_json_file(file)
        else:
            logger.info("reading xml based transcript file now...")
            file_content = [read_transcript_xml_file(file)]

        logger.info("extracting communication model now...".format(file.as_posix()))
        for metadata, inter_candidates in file_content:

            transcript = Transcript.from_interactions(
                metadata=metadata,
                interactions=extract_communication_model(
                    candidates=inter_candidates,
                    add_debug_objects=args.add_debug_objects))

            # insert into DB
            if not args.dry_run:
                transcript_dict = transcript.dict(exclude_none=True, exclude_unset=True)
                logger.info(f"writing transcript with '{len(transcript_dict['interactions'])}' interactions into db.")
                database.update_one("session", {"session_id": transcript.session_no}, transcript_dict)

            transcripts.append(transcript)

            # notify sentiment group
            if args.notify and transcript:
                utils.notify_sentiment_analysis_group([str(transcript.session_no)])

        cm = CommunicationModel(transcripts=transcripts)

        if args.dry_run:
            out_file: Path = file.with_suffix(".converted.json")
            logger.info("writing transcripts into {}.".format(out_file.absolute().as_posix()))
            with open(out_file, "w", encoding="utf-8") as o:
                o.write(cm.json(exclude_none=True, indent=4, ensure_ascii=False))
            with open(out_file.parent / "mdb.json", "w", encoding="utf-8") as o:
                safe_json_dump(MDB._mdb_runtime_storage, o)
Пример #4
0
    def test_extract_funny_sample_4(self):
        comment = "(Heiterkeit des Abg. Manfred Grund [CDU/CSU])"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]

        self.assertEqual(
            interaction_0.sender,
            MDB.find_and_add_in_storage(forename="Manfred",
                                        surname="Grund",
                                        memberships=[(datetime.min, None,
                                                      Faction.CDU_AND_CSU)]))
        self.assertEqual(interaction_0.message,
                         'Heiterkeit des Abg. Manfred Grund [CDU/CSU]')
Пример #5
0
    def test_extract_sample3(self):
        comment3 = "(Carsten Schneider [Erfurt] [SPD]: Was für ein Blödsinn! – Zuruf vom BÜNDNIS90/DIE GRÜNEN: Vielleicht mal lesen! Lesen bildet!)"

        cm3 = extract_communication_model([_build_candidate(comment3)])
        interaction_0 = cm3[0]
        interaction_1 = cm3[1]

        self.assertEqual(
            interaction_0.sender,
            MDB.find_and_add_in_storage(forename="Carsten",
                                        surname="Schneider",
                                        memberships=[(datetime.min, None,
                                                      Faction.SPD)]))
        self.assertEqual(interaction_0.message, 'Was für ein Blödsinn!')
        self.assertEqual(interaction_1.sender, Faction.DIE_GRÜNEN)
        self.assertEqual(interaction_1.message,
                         'Vielleicht mal lesen! Lesen bildet!')
Пример #6
0
    def test_extract_sample2(self):
        comment = "(Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN – Zuruf des Abg. Armin-Paulus Hampel [AfD])"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]
        interaction_1 = cm[1]
        interaction_2 = cm[2]
        interaction_3 = cm[3]
        interaction_4 = cm[4]
        interaction_5 = cm[5]
        self.assertEqual(interaction_0.sender, Faction.CDU_AND_CSU)
        self.assertEqual(
            interaction_0.message,
            'Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN'
        )
        self.assertEqual(interaction_1.sender, Faction.SPD)
        self.assertEqual(
            interaction_1.message,
            'Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN'
        )
        self.assertEqual(interaction_2.sender, Faction.FDP)
        self.assertEqual(
            interaction_2.message,
            'Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN'
        )
        self.assertEqual(interaction_3.sender, Faction.DIE_LINKE)
        self.assertEqual(
            interaction_3.message,
            'Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN'
        )
        self.assertEqual(interaction_4.sender, Faction.DIE_GRÜNEN)
        self.assertEqual(
            interaction_4.message,
            'Beifall bei der CDU/CSU, der SPD, der FDP, der LINKEN und dem BÜNDNIS 90/DIE GRÜNEN'
        )
        self.assertEqual(
            interaction_5.sender,
            MDB.find_and_add_in_storage(forename="Armin-Paulus",
                                        surname="Hampel",
                                        memberships=[(datetime.min, None,
                                                      Faction.AFD)]))
        self.assertEqual(interaction_5.message,
                         'Zuruf des Abg. Armin-Paulus Hampel [AfD]')
Пример #7
0
    def test_extract_funny_sample_3(self):
        comment = "(Heiterkeit und Beifall bei der CDU/CSU sowie des Abg. Jens Beeck [FDP])"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]
        interaction_1 = cm[1]

        self.assertEqual(interaction_0.sender, Faction.CDU_AND_CSU)
        self.assertEqual(
            interaction_0.message,
            'Heiterkeit und Beifall bei der CDU/CSU sowie des Abg. Jens Beeck [FDP]'
        )
        self.assertEqual(
            interaction_1.sender,
            MDB.find_and_add_in_storage(forename="Jens",
                                        surname="Beeck",
                                        memberships=[(datetime.min, None,
                                                      Faction.FDP)]))
        self.assertEqual(
            interaction_1.message,
            'Heiterkeit und Beifall bei der CDU/CSU sowie des Abg. Jens Beeck [FDP]'
        )
Пример #8
0
    def test_extract_funny_sample2(self):
        comment = "(Beifall bei der SPD sowie bei Abgeordneten der LINKEN – Matthias W. Birkwald [DIE LINKE]: Ich mich auch!)"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]
        interaction_1 = cm[1]
        interaction_2 = cm[2]

        self.assertEqual(interaction_0.sender, Faction.SPD)
        self.assertEqual(
            interaction_0.message,
            'Beifall bei der SPD sowie bei Abgeordneten der LINKEN')
        self.assertEqual(interaction_1.sender, Faction.DIE_LINKE)
        self.assertEqual(
            interaction_1.message,
            'Beifall bei der SPD sowie bei Abgeordneten der LINKEN')
        self.assertEqual(
            interaction_2.sender,
            MDB.find_and_add_in_storage(forename="Matthias W.",
                                        surname="Birkwald",
                                        memberships=[(datetime.min, None,
                                                      Faction.DIE_LINKE)]))
        self.assertEqual(interaction_2.message, 'Ich mich auch!')
Пример #9
0
    def test_extract_sample1(self):
        comment = "(Beifall bei der FDP sowie bei Abgeordneten der CDU/CSU, der SPD und des BÜNDNISSES 90/DIE GRÜNEN – Dr. Eberhardt Alexander Gauland [AfD]: Ha, ha, ha!)"

        cm = extract_communication_model([_build_candidate(comment)])
        interaction_0 = cm[0]
        interaction_1 = cm[1]
        interaction_2 = cm[2]
        interaction_3 = cm[3]
        interaction_4 = cm[4]
        self.assertEqual(interaction_0.sender, Faction.FDP)
        self.assertEqual(
            interaction_0.message,
            'Beifall bei der FDP sowie bei Abgeordneten der CDU/CSU, der SPD und '
            'des BÜNDNISSES 90/DIE GRÜNEN')
        self.assertEqual(interaction_1.sender, Faction.CDU_AND_CSU)
        self.assertEqual(
            interaction_1.message,
            'Beifall bei der FDP sowie bei Abgeordneten der CDU/CSU, der SPD und '
            'des BÜNDNISSES 90/DIE GRÜNEN')
        self.assertEqual(interaction_2.sender, Faction.SPD)
        self.assertEqual(
            interaction_2.message,
            'Beifall bei der FDP sowie bei Abgeordneten der CDU/CSU, der SPD und '
            'des BÜNDNISSES 90/DIE GRÜNEN')
        self.assertEqual(interaction_3.sender, Faction.DIE_GRÜNEN)
        self.assertEqual(
            interaction_3.message,
            'Beifall bei der FDP sowie bei Abgeordneten der CDU/CSU, der SPD und '
            'des BÜNDNISSES 90/DIE GRÜNEN')
        self.assertEqual(
            interaction_4.sender,
            MDB.find_and_add_in_storage(forename="Eberhardt Alexander",
                                        surname="Gauland",
                                        memberships=[(datetime.min, None,
                                                      Faction.AFD)]))
        self.assertEqual(interaction_4.message, 'Ha, ha, ha!')