Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

132
Visualizações
Cree nuevos campos booleanos basados en bigramas específicos que aparecen en un marco de datos de pandas tokenizados

Recorriendo una lista de bigramas para buscar, necesito crear un campo booleano para cada bigrama según si está presente o no en una serie de pandas tokenizados. ¡Y agradecería un voto a favor si crees que esta es una buena pregunta!

Lista de bigramas:

 bigrams = ['data science', 'computer science', 'bachelors degree']

Marco de datos:

 df = pd.DataFrame(data={'job_description': [['data', 'science', 'degree', 'expert'], ['computer', 'science', 'degree', 'masters'], ['bachelors', 'degree', 'computer', 'vision'], ['data', 'processing', 'science']]})

Salida deseada:

 job_description data science computer science bachelors degree 0 [data, science, degree, expert] True False False 1 [computer, science, degree, masters] False True False 2 [bachelors, degree, computer, vision] False False True 3 [data, bachelors, science] False False False

Criterios:

  1. Solo se deben reemplazar las coincidencias exactas (por ejemplo, marcar para 'ciencia de datos' debe devolver True para 'ciencia de datos' pero False para 'datos de ciencia' o 'licenciatura en ciencias de datos')
  2. Cada término de búsqueda debe tener su propio campo y estar concatenado con el df original

Lo que he probado:

Error: df = [x for x in df['job_description'] if x in bigrams]

Error: df[bigrams] = [[any(w==term for w in lst) for term in bigrams] for lst in df['job_description']]

Error: no se pudo adaptar el enfoque aquí -> Hacer coincidir trigramas, bigramas y unigramas con un texto; si unigrama o bigrama es una subcadena de un trigrama ya emparejado, pasa; pitón

Error: tampoco se pudo adaptar este -> Comparar dos listas de bigramas y devolver el bigrama coincidente

Falló: este método está muy cerca , pero no pudo adaptarse a bigramas -> Crear nuevos campos booleanos basados en términos específicos que aparecen en un marco de datos de pandas tokenizados

¡Gracias por cualquier ayuda que usted nos pueda proporcionar!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

También puede intentar usar numpy y nltk , que deberían ser bastante rápidos:

 import pandas as pd import numpy as np import nltk bigrams = ['data science', 'computer science', 'bachelors degree'] df = pd.DataFrame(data={'job_description': [['data', 'science', 'degree', 'expert'], ['computer', 'science', 'degree', 'masters'], ['bachelors', 'degree', 'computer', 'vision'], ['data', 'processing', 'science']]}) def find_bigrams(data): output = np.zeros((data.shape[0], len(bigrams)), dtype=bool) for i, d in enumerate(data): possible_bigrams = [' '.join(x) for x in list(nltk.bigrams(d)) + list(nltk.bigrams(d[::-1]))] indices = np.where(np.isin(bigrams, list(set(bigrams).intersection(set(possible_bigrams))))) output[i, indices] = True return list(output.T) output = find_bigrams(df['job_description'].to_numpy()) df = df.assign(**dict(zip(bigrams, output)))
 | | job_description | data science | computer science | bachelors degree | |---:|:----------------------------------------------|:---------------|:-------------------|:-------------------| | 0 | ['data', 'science', 'degree', 'expert'] | True | False | False | | 1 | ['computer', 'science', 'degree', 'masters'] | False | True | False | | 2 | ['bachelors', 'degree', 'computer', 'vision'] | False | False | True | | 3 | ['data', 'processing', 'science'] | False | False | False |
over 4 years ago · Santiago Trujillo Relatório

0

Podrías usar una expresión regular y extractall :

 regex = '|'.join('(%s)' % b.replace(' ', r'\s+') for b in bigrams) matches = (df['job_description'].apply(' '.join) .str.extractall(regex).droplevel(1).notna() .groupby(level=0).max() ) matches.columns = bigrams out = df.join(matches).fillna(False)

producción:

 job_description data science computer science bachelors degree 0 [data, science, degree, expert] True False False 1 [computer, science, degree, masters] False True False 2 [bachelors, degree, computer, vision] False False True 3 [data, processing, science] False False False

expresión regular generada:

 '(data\\s+science)|(computer\\s+science)|(bachelors\\s+degree)'
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda