Scrape Google Ngram Viewer usando Python

En este artículo, aprenderemos cómo raspar Google Ngarm usando Python. Google Ngram/Google Books Ngram Viewer es un motor de búsqueda en línea que registra las frecuencias de cualquier conjunto de strings de búsqueda.

¿Qué es el visor de Google Ngram?

Google Ngram Viewer es un motor de búsqueda que se utiliza para determinar la popularidad de una palabra o una frase en los libros. El visor de Google ngram nos brinda varias opciones de filtro, incluida la selección del idioma/género de los libros (también llamado corpus ) y el rango de años en los que se publicaron los libros. De forma predeterminada, la búsqueda distingue entre mayúsculas y minúsculas.  

¿Qué aspecto tiene un resultado de búsqueda de Google Ngram?

Si buscamos “Albert Einstein” en Google Ngram, el resultado de la búsqueda se verá así.

 

Una frase que tiene una sola palabra (digamos «geek»), la frase se llama unigrama . De manera similar, una frase que contiene dos palabras (por ejemplo, «Isaac Newton») se llama bigrama . Si busca una frase de bigrama en google ngram, le mostrará esto: De todos los bigramas presentes en los libros, qué porcentaje de ellos contenía la frase que buscaba.

Incluso podemos comparar la popularidad de diferentes frases en el mismo resultado de búsqueda separándolas con comas. Por ejemplo, podemos comparar la popularidad de «Albert Einstein» frente a «Isaac Newton» entre los años 1850 y 1900 en diferentes libros escritos en inglés.

Trabajar con las URL de Google Ngram

Si buscamos «Albert Einstein» en google ngram con los años que van desde 1850 a 1860, siendo el corpus inglés y suavizado 0, veremos un gráfico como el que se muestra en la imagen de arriba. La URL de esta consulta de búsqueda se verá así.

https://books.google.com/ngrams/graph?content=Albert%20Einstein&year_start=1850&year_end=1860&corpus=26&smoothing=0

En la URL anterior, si reemplazamos la palabra gráfico con la palabra json, obtendremos los datos JSON de nuestra consulta de búsqueda en lugar del gráfico. La nueva URL se verá así.

https://books.google.com/ngrams/json?content=Albert%20Einstein&year_start=1850&year_end=1860&corpus=26&smoothing=0

El resultado de la búsqueda de esta URL se verá así:

 

Podemos extraer estos datos JSON usando Python.

¿Cómo raspar Google Ngrams?

Para raspar google ngram, usaremos las requests de Python y las bibliotecas urllib .

Ahora, crearemos una función que extraiga los datos del sitio web de google ngram. Revise los comentarios escritos junto con el código para seguirlo. 

Python3

import requests
import urllib
  
def runQuery(query, start_year=1850, 
             end_year=1860, corpus=26,
             smoothing=0):
  
    # converting a regular string to 
    # the standard URL format
    # eg: "geeks for,geeks" will
    # convert to "geeks%20for%2Cgeeks"
    query = urllib.parse.quote(query)
  
    # creating the URL
    url = 'https://books.google.com/ngrams/json?content=' + query +
    '&year_start=' + str(start_year) + '&year_end=' +
    str(end_year) + '&corpus=' + str(corpus) + '&smoothing=' +
    str(smoothing) + ''
  
    # requesting data from the above url
    response = requests.get(url)
  
    # extracting the json data from the response we got
    output = response.json()
  
    # creating a list to store the ngram data
    return_data = []
  
    if len(output) == 0:
        # if no data returned from site,
        # print the following statement
        return "No data available for this Ngram."
    else:
        # if data returned from site,
        # store the data in return_data list
        for num in range(len(output)):
            
              # getting the name
            return_data.append((output[num]['ngram'], 
                                  
                                # getting ngram data
                                output[num]['timeseries']) 
                               )
  
    return return_data

En la función runQuery , tomamos una consulta de string de argumentos como argumento de la función, mientras que el resto de los argumentos eran argumentos predeterminados. De forma predeterminada, el rango de años se mantuvo entre 1850 y 1860, el corpus fue 26 (es decir, idioma inglés) y el suavizado se mantuvo en 0. Creamos la URL de Google Ngram según la string de argumentos. Luego, usamos esta URL para obtener los datos de Google Ngram. Una vez que se devolvieron los datos JSON, almacenamos los datos que necesitábamos en una lista y luego devolvimos la lista.

Ahora, usemos la función runQuery para averiguar la popularidad de «Albert Einstein».

Python3

query = "Albert Einstein"
  
print(runQuery(query))

Producción:

[(‘Alberto Einstein’, [0.0, 0.0, 0.0, 0.0, 2.171790969285325e-09, 

1.014315520464492e-09, 6.44787723214079e-10, 0.0, 7.01216085197131e-10, 0.0, 0.0])]

Incluso podemos ingresar varias frases en la misma consulta separando cada frase con comas.

Python3

query = "Albert Einstein,Isaac Newton"
  
print(runQuery(query))

Producción:

[(‘Alberto Einstein’, [0.0, 0.0, 0.0, 0.0, 2.171790969285325e-09, 

1.014315520464492e-09, 6.44787723214079e-10, 0.0, 7.01216085197131e-10, 

0.0, 0.0]), (‘Isaac Newton’, [1.568728407619346e-06, 1.135979687205690e-06, 

1.140318772741011e-06, 1.102130454455618e-06, 1.34806168716750e-06, 

2.039112359852879e-06, 1.356955749542976e-06, 1.121004174819972e-06, 

1.223622120960499e-06, 1.18965874662535e-06, 1.077695060303085e-06])]

Publicación traducida automáticamente

Artículo escrito por urvishmahajan 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 *