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)
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')
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)
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]')
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!')
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]')
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]' )
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!')
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!')