Рубрики
Без рубрики

Python Реализация нормализованного расстояния Google (простой пример скачки веб)

Реализация нормализованного расстояния Google в Python в качестве простого и практического примера веб-канала с помощью Python

Автор оригинала: Mathias Gatti.

Вступление

Основываясь на подсчете результатов Google, мы можем вывести популярность слова. Также взаимосвязь между частотой двух слов вместе с уважением к своей индивидуальной частоте является полезной мерой того, насколько связаны два слова.

WhatsApp Image 2019-06-09 на 13.58.03.jpeg

На основании этих идей определяется Нормализовано расстояние Google В этом посте я покажу, как реализовать его в Python, используя основные инструменты Scraping Web. Окончательный код можно найти здесь Отказ

Код

Импорт библиотек

import requests
from bs4 import BeautifulSoup
import math
import sys

Делать поиск и получить счет

Здесь я реализую эту функцию, которая делает GOO GOOGLE, используя заголовки, которые указывают, что мы находимся на настольном компьютере (а не на телефоне), я также указываю параметр GL, чтобы сделать поиск как если бы я был в США.

def number_of_results(text):
  headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
  r = requests.get("https://www.google.com/search?q="+text.replace(" ","+"),params={"gl":"us"},headers=headers)

Затем красивая конструкция используется для извлечения HTML-части, где указан счет.

  soup = BeautifulSoup(r.text, "lxml")
  res = soup.find("div", {"id": "resultStats"})

Наконец это просто печатает и возвращает анализируемый номер

  print(res.text)
  for t in res.text.split():
    try:
      number = float(t.replace(",",""))
      print("{} results for {}".format(number,text))
      return number
    except:
      pass

  raise Exception("Couldn't find a valid number of results on Google")

Вычислить формулу

Здесь мы реализуем формулу, указанную в Wikipedia

WhatsApp Image 2019-06-09 в 14.12.48 (1) .jpeg
# N = number_of_results("the")
N = 25270000000.0
N = math.log(N,2)

def normalized_google_distance(w1, w2):
  f_w1 = math.log(number_of_results(w1),2)
  f_w2 = math.log(number_of_results(w2),2)
  f_w1_w2 = math.log(number_of_results(w1+" "+w2),2)

  return (max(f_w1,f_w2) - f_w1_w2) / (N - min(f_w1,f_w2))

Основная функция

Весь код выполнен из основной функции

def main(argv):
  w1 = argv[1]
  w2 = argv[2]
  score = normalized_google_distance(w1,w2)

  print("Score is",round(score,2))
  print("W1='"+ w1+ "' W2='"+ w2+ "'")

# Usage example
# python normalized_google_distance.py shakespeare macbeth
# python normalized_google_distance.py "shakespeare " "macbeth"

main(sys.argv)