From 98c1c7dfa5c2c900a0f0267986539b6ab412c8b9 Mon Sep 17 00:00:00 2001 From: Steffen Albrecht Date: Fri, 8 Dec 2023 14:57:32 +0100 Subject: [PATCH] adding function to remove whisper hallucinations --- scraibe/transcript_exporter.py | 117 +++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/scraibe/transcript_exporter.py b/scraibe/transcript_exporter.py index 3c68d87..c40a993 100644 --- a/scraibe/transcript_exporter.py +++ b/scraibe/transcript_exporter.py @@ -5,6 +5,110 @@ from typing import Union ALPHABET = [*"abcdefghijklmnopqrstuvwxyz"] +WHISPER_HALLUCINATIONS={ + "en": [ + " www.mooji.org", + ], + "nl": [ + " Ondertitels ingediend door de Amara.org gemeenschap", + " Ondertiteld door de Amara.org gemeenschap", + " Ondertiteling door de Amara.org gemeenschap" + ], + "de": [ + " Untertitelung aufgrund der Amara.org-Community" + " Untertitel im Auftrag des ZDF für funk, 2017", + " Untertitel von Stephanie Geiges", + " Untertitel der Amara.org-Community", + " Untertitel im Auftrag des ZDF, 2017", + " Untertitel im Auftrag des ZDF, 2020", + " Untertitel im Auftrag des ZDF, 2018", + " Untertitel im Auftrag des ZDF, 2021", + " Untertitelung im Auftrag des ZDF, 2021", + " Copyright WDR 2021", + " Copyright WDR 2020", + " Copyright WDR 2019", + " SWR 2021", + " SWR 2020", + ], + "fr": [ + " Sous-titres réalisés para la communauté d'Amara.org", + " Sous-titres réalisés par la communauté d'Amara.org", + " Sous-titres fait par Sous-titres par Amara.org", + " Sous-titres réalisés par les SousTitres d'Amara.org", + " Sous-titres par Amara.org", + " Sous-titres par la communauté d'Amara.org", + " Sous-titres réalisés pour la communauté d'Amara.org", + " Sous-titres réalisés par la communauté de l'Amara.org", + " Sous-Titres faits par la communauté d'Amara.org", + " Sous-titres par l'Amara.org", + " Sous-titres fait par la communauté d'Amara.org" + " Sous-titrage ST' 501", + " Sous-titrage ST'501", + " Cliquez-vous sur les sous-titres et abonnez-vous à la chaîne d'Amara.org", + " ❤️ par SousTitreur.com", + ], + "it": [ + " Sottotitoli creati dalla comunità Amara.org", + " Sottotitoli di Sottotitoli di Amara.org", + " Sottotitoli e revisione al canale di Amara.org", + " Sottotitoli e revisione a cura di Amara.org", + " Sottotitoli e revisione a cura di QTSS", + " Sottotitoli e revisione a cura di QTSS.", + " Sottotitoli a cura di QTSS", + ], + "es": [ + " Subtítulos realizados por la comunidad de Amara.org", + " Subtitulado por la comunidad de Amara.org", + " Subtítulos por la comunidad de Amara.org", + " Subtítulos creados por la comunidad de Amara.org", + " Subtítulos en español de Amara.org", + " Subtítulos hechos por la comunidad de Amara.org", + " Subtitulos por la comunidad de Amara.org" + " Más información www.alimmenta.com", + " www.mooji.org", + ], + "gl": [ + " Subtítulos realizados por la comunidad de Amara.org" + ], + "pt": [ + " Legendas pela comunidade Amara.org", + " Legendas pela comunidade de Amara.org", + " Legendas pela comunidade do Amara.org", + " Legendas pela comunidade das Amara.org", + " Transcrição e Legendas pela comunidade de Amara.org" + ], + "la": [ + " Sottotitoli creati dalla comunità Amara.org", + " Sous-titres réalisés para la communauté d'Amara.org" + ], + "ln": [ + " Sous-titres réalisés para la communauté d'Amara.org" + ], + "pl": [ + " Napisy stworzone przez społeczność Amara.org", + " Napisy wykonane przez społeczność Amara.org", + " Zdjęcia i napisy stworzone przez społeczność Amara.org", + " napisy stworzone przez społeczność Amara.org", + " Tłumaczenie i napisy stworzone przez społeczność Amara.org", + " Napisy stworzone przez społeczności Amara.org", + " Tłumaczenie stworzone przez społeczność Amara.org", + " Napisy robione przez społeczność Amara.org" + " www.multi-moto.eu", + ], + "ru": [ + " Редактор субтитров А.Синецкая Корректор А.Егорова" + ], + "tr": [ + " Yorumlarınızıza abone olmayı unutmayın.", + ], + "su": [ + " Sottotitoli creati dalla comunità Amara.org" + ], + "zh": [ + "字幕由Amara.org社区提供", + "小編字幕由Amara.org社區提供" + ] +} class Transcript: """ @@ -23,6 +127,7 @@ class Transcript: """ self.transcript = transcript + self._remove_hallucinations() self.speakers = self._extract_speakers() self.segments = self._extract_segments() self.annotation = {} @@ -62,6 +167,18 @@ class Transcript: return self + def _remove_hallucinations(self) -> None: + segments_to_drop=[] + + for id in self.transcript: + for language, snippets in WHISPER_HALLUCINATIONS.items(): + for snippet in snippets: + self.transcript[id]['text']=self.transcript[id]['text'].replace(snippet,'') + if self.transcript[id]['text'] == '': segments_to_drop.append(id) + + for id in segments_to_drop: + del self.transcript[id] + def _extract_speakers(self) -> list: """ Extracts the unique speaker names from the transcript.