Google Meet Summarizer multilingüe – Proyecto Python

A principios de 2020, enfrentamos la mayor crisis del siglo XXI: la pandemia de COVID-19. En medio del caos, la generación finalmente encontró una manera de hacer el trabajo mediante la introducción de la automatización en todos los demás aspectos de la vida. Tras el golpe de la pandemia, nos hemos encontrado con un aumento del 87 % en las herramientas de videoconferencia para las comunicaciones diarias. Las comunicaciones que van desde reuniones en línea, conferencias universitarias, reuniones de negocios, casi todo se alojó en Internet, que al ser virtual, invadió las posibilidades de comunicaciones infructuosas. De hecho, los datos recopilados de los empleados de todos los dominios muestran que las personas a menudo pierden puntos importantes porque encuentran que tomar actas de esas reuniones es una tarea que consume mucho tiempo, distrae y es realmente aburrida, y se desperdician más de 37 mil millones de dólares en estas reuniones improductivas. .

Multilingual Google Meet Summarizer Python Poject

El propósito de este proyecto es transcribir reuniones en línea y resumirlas mediante la aplicación de técnicas intensas de aprendizaje automático, con el fin de producir actas de la reunión y audio resumido multilingüe para obtener una mejor comprensión del tema por parte del usuario.

Las características propuestas por la extensión de Chrome son:

  • Conoce la transcripción
  • Resumen usando Modelos Extractivos y Abstractivos.
  • Generación de audio multilingüe.

Características adicionales ofrecidas –

  • Resumen de conferencias NPTEL/ MOOC
  • Como acortador de tuits de Twitter.

Herramientas y Tecnologías

  • Interfaz: Reactjs, Material-UI, Bootstrap, HTML, CSS, Javascript
  • Backend: Django, Django resto API
  • Base de datos: SQLite
  • Bibliotecas ML: NLTK, Antorcha

requisitos previos

Conocimiento de Python, Bibliotecas NLP, uso de Rest API y buena experiencia laboral en Desarrollo Web usando Reactjs.

Flujo de control 

  • El usuario inicia sesión en el sitio web y habilita la extensión de Chrome.
  • La extensión de Chrome extrae el audio de la reunión de Google de cada orador y lo transcribe a través de la extensión de Chrome.
  • Esta transcripción extraída se envía al backend donde se aplican técnicas de aprendizaje automático para el resumen del texto.
  • Este texto ultraprocesado luego se dirige hacia el traductor para traducir el extracto al idioma deseado por el usuario.
  • Esta transcripción se puede descargar o incluso escuchar en el panel de control según el deseo del usuario.

Así es como Multilingual Google Meet Summarizer contribuye a la automatización impulsada por la pandemia.

Paso B Paso Implementación

1. Extensión de cromo

La tarea principal de la extensión de Chrome es extraer el título de Google Meet de los elementos DOM de Google Meet. Hace uso del contenedor de subtítulos generado por la función incorporada de Google Meet: activar subtítulos. La reunión se transcribe de la siguiente manera:

  1. Con la ayuda de Selenium, se rastrea el Xpath del botón «Activar subtítulos».
  2. El código activa automáticamente los subtítulos de Google Meet al hacer clic automáticamente en el botón Subtítulos.
  3. Luego rastreamos el Xpath del contenedor de subtítulos y extraemos el texto generado automáticamente que se encuentra dentro del contenedor.
  4. Finalmente, agregamos el texto en una string con el nombre del hablante y la marca de tiempo.

Luego, el texto completo se envía al backend para su procesamiento.

2. Front-end y Back-end 

  • El primer paso será crear un sistema de autenticación para que los usuarios puedan iniciar sesión y guardar las transcripciones de sus reuniones en la base de datos.
    • Cree un modelo de usuario en Django.
    • Implemente JWT (token web JSON) en Django usando la aplicación djangorestframework_simplejwt.
    • Cree vistas REST respectivas para la generación y autenticación de tokens.
    • También se puede usar la autenticación social usando JWT en lugar del registro por correo electrónico según las preferencias.
  • El siguiente paso será crear una base de datos para almacenar la información de las transcripciones de las reuniones de los usuarios. Cree una relación SQL estándar en líneas similares a las que se indican a continuación.
    • Transcripción (transcript_id, propietario_nombre, transcript_date, hostname, transcript_title, meet_duration, content).
    • También se pueden usar campos y esquemas adicionales dependiendo de las funcionalidades CRUD que se proporcionarán al usuario.
  • Cree una API REST para guardar una nueva transcripción en la base de datos. Esta API será utilizada por la extensión de Chrome que enviará su transcripción junto con metainformación como marca de tiempo, nombre de host, etc.
    La API procesa la información recibida y la almacena en la base de datos.
  • Cree API separadas para cada modelo NLP que se utilizará para el resumen. El front-end enviará la transcripción a esta API. La API usa el modelo NLP y devuelve el texto resumido a la interfaz. La API simplemente ejecuta el script ML NLP que se describe a continuación. Crear API para la traducción del texto a varios idiomas.

Python3

'''
Translation Code
'''
 
from googletrans import Translator
 
LANGUAGE_CODES = {
    'ENGLISH': 'en',
    'HINDI': 'hi',
    'MARATHI': 'mr',
    'ARABIC': 'ar',
    'BENGALI': 'bn',
    'CHINESE': 'zh-CN',
    'FRENCH': 'fr',
    'GUJRATI': 'gu',
    'JAPANESE': 'ja',
    'KANNADA': 'kn',
    'MALAYALAM': 'ml',
    'NEPALI': 'ne',
    'ORIYA': 'or',
    'PORTUGUESE': 'pt',
    'PUNJABI': 'pa',
    'RUSSIAN': 'ru',
    'SPANISH': 'es',
    'TAMIL': 'ta',
    'TELUGU': 'te',
    'URDU': 'ur'
}
 
 
def translate_utility(inp_text, inp_lang, op_lang):
    inp_lang, op_lang = inp_lang.upper(), op_lang.upper()
    translator = Translator()
    text_to_translate = translator.translate(
        inp_text, src=LANGUAGE_CODES[inp_lang], dest=LANGUAGE_CODES[op_lang])
    op_text = text_to_translate.text
    return(op_text)

3. Algoritmo ML

Python3

'''
NLTK MODEL CODE
'''
 
# Tokenizing Sentences
from nltk.tokenize import sent_tokenize 
 
# Tokenizing Words
from nltk.tokenize import word_tokenize 
import nltk
from string import punctuation
from nltk.corpus import stopwords
nltk.download('stopwords')
nltk.download('punkt')
 
# Cleaning text that is got from meet transcript
def clean(text):
    sample = text.split('**')
    sample.pop(0)
    clean_text = ""
    i = 0
    for t in sample:
        if i % 2 != 0:
            clean_text += str(t)
        i += 1
    return clean_text
 
 
# Finding list of stopwords ( Stopwords are
# those which do not add meaning to sentence)
stop_words = set(stopwords.words("english"))
 
# Tokenize
def Wtokenize(text):
    words = word_tokenize(text)
    return words
 
 
# Frequency table will be storing frequency of each word
# appearing in input text after removing stop words
# Need: It will be used for finding most relevant sentences
# as we will be applying this dictionary on every sentence
# and find its importance over other
def gen_freq_table(text):
    freqTable = dict()
    words = Wtokenize(text)
     
    for word in words:
        word = word.lower()
        if word in stop_words:
            continue
        if word in freqTable:
            freqTable[word] += 1
        else:
            freqTable[word] = 1
    return freqTable
 
# Sentence Tokenize
def Stokenize(text):
    sentences = sent_tokenize(text)
    return sentences
 
# Storing Sentence Scores
def gen_rank_sentences_table(text):
   
    # dictionary storing value for each sentence
    sentenceValue = dict()
     
    # Calling function gen_freq_table to get frequency
    # of words
    freqTable = gen_freq_table(text)
     
    # Calling  list of sentences after tokenization
    sentences = Stokenize(text)
 
    for sentence in sentences:
        for word, freq in freqTable.items():
            if word in sentence.lower():
                if sentence in sentenceValue:
                    sentenceValue[sentence] += freq
                else:
                    sentenceValue[sentence] = freq
    return sentenceValue
 
 
def summary(text):
    sum = 0
    sentenceValue = gen_rank_sentences_table(text)
    for sentence in sentenceValue:
        sum += sentenceValue[sentence]
    avg = int(sum / len(sentenceValue))
    summary = ""
    sentences = Stokenize(text)
    for sentence in sentences:
        if (sentence in sentenceValue) and (sentenceValue[sentence] > (1.2 * avg)):
            summary += " " + sentence
    return summary
 
 
def mainFunc(inp_text):
   
    # getting text cleaned
    if("**" not in inp_text):
        text = inp_text
    else:
        cleaned_text = clean(inp_text)
        text = cleaned_text
    summary_text = summary(text)
    print("\nModel Summary: ", summary_text)
 
    return summary_text

Producción

Aplicación de proyectos en la vida real

  • Utilizado en reuniones virtuales de negocios
  • Utilizado por los estudiantes para obtener notas concisas de una conferencia
  • Una ayuda para los discapacitados visuales
  • También como acortador de tuits de Twitter

Miembro del equipo

  1. Tapas Tejas Sudhir
  2. yash agrawal
  3. Atul Thakre
  4. Ayush Kedia
  5. yash telkhade

Publicación traducida automáticamente

Artículo escrito por tapasts y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *