Ich möchte die Merkmale der Titel der Top-10-Websites kennen, die von Google mit einem bestimmten Keyword durchsucht wurden.
Dieses Mal werde ich mit Jupyter Notebook schreiben, also muss es installiert sein.
Ich werde den eigentlichen Code schreiben, aber da ich wenig Erfahrung damit habe, schreibe ich ihn möglicherweise ineffizient. Bitte beachten Sie.
Dieses Mal werden wir nur diese Bibliothek verwenden, also importieren Sie sie am Anfang.
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
from math import log
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import POSStopFilter
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
Verwenden Sie BeautifulSoup, um die Google-Suchergebnisse zu durchsuchen.
#Header anfordern
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
list_keywd = ['Schlüsselwort 1','Schlüsselwort 2']
input_num = 10
url = 'https://www.google.co.jp/search?num={}&q='.format(input_num) + ' '.join(list_keywd)
#Verbinden
response = requests.get(url, headers=headers)
#Überprüfen Sie den HTTP-Statuscode (Ausnahmebehandlung außer 200).
response.raise_for_status()
#Analysieren Sie den abgerufenen HTML-Code
soup = bs(response.content, 'html.parser')
#Holen Sie sich Titel und Links zu Suchergebnissen
ret_link = soup.select('.r > a')
#Um das Entfernen von Brotresten zu vermeiden
ret_link2 = soup.select('.r > a > h3')
title_list = []
url_list = []
leng = len(ret_link)
r_list = []
cols = ['title','url']
for i in range(len(ret_link)):
#Holen Sie sich den Textteil des Titels
title_txt = ret_link2[i].get_text()
#Holen Sie sich nur den Link und entfernen Sie das zusätzliche Teil
url_txt = ret_link[i].get('href').replace('/url?q=','')
title_list.append(title_txt)
url_list.append(url_txt)
tmp = []
tmp = [title_txt,url_txt]
r_list.append(tmp)
#Suchergebnisse anzeigen
df = pd.DataFrame(r_list,columns=cols)
df
Die Top 10 Websites in den Google-Suchergebnissen für ein bestimmtes Keyword waren wie folgt.
Nachdem wir die Titel der Top 10 Sites erhalten haben, werden wir alles von der morphologischen Analyse bis zur Teilung durchführen. Janome wurde für die morphologische Analyse verwendet.
#Registrieren Sie die Nomenklatur jedes Blogs separat
work = []
WAKATI = []
for i in BLOG.keys():
texts_flat = "".join(BLOG[i]["title"])
tokens = a.analyze(texts_flat)
work.append(' '.join([t.surface for t in tokens]))
WAKATI.append(work[i].lower().split())
#Bestätigung
for i in BLOG.keys():
print("■WAKATI[{}]: {}".format(i,WAKATI[i]))
#scikit-Berechnen Sie die Häufigkeit des Auftretens von Wörtern mit learn
vectorizer = CountVectorizer()
#Bogenberechnung
X = vectorizer.fit_transform([work[i] for i in range(len(work))])
WORDS = vectorizer.get_feature_names()
WORDS.sort()
print('=========================================')
print('Alle Worte')
print('=========================================')
print(WORDS)
Es wurde auf diese Weise analysiert.
Dieses Mal habe ich eine Funktion geschrieben, um den tf-Wert, den idf-Wert und den tf-idf-Wert zu finden.
#Funktionsdefinition
def tf(t, d):
return d.count(t)/len(d)
def idf(t):
df = 0
for wak in WAKATI:
df += t in wak
#return log(N/df) + 1
return log(N/np.array(df)) + 1
def tfidf(t,d):
return tf(t,d) * idf(t)
def highlight_negative(val):
if val > 0:
return 'color: {0}; font-weight: bold'.format('red')
else:
return 'color: {0}'.format('black')
#Ende der Funktionsdefinition
Schauen wir uns zunächst den tf-Wert an.
#tf Berechnung
print('■ TF-Wert für jeden Standort')
print('Häufigkeit des Auftretens in einem Dokument')
ret = []
for i in range(N):
ret.append([])
d = WAKATI[i]
for j in range(len(WORDS)):
t = WORDS[j]
if len(d) > 0:
ret[-1].append(tf(t,d))
tf_ = pd.DataFrame(ret, columns=WORDS)
tf_.style.applymap(highlight_negative)
Wie in der folgenden Abbildung gezeigt, wurde der tf-Wert erfasst. Die verwendeten Teilwörter sind rot geschrieben. "Maske" und "cool" werden in vielen Titeln verwendet. Möglicherweise können Sie das Suchwort nur anhand des tf-Werts finden.
Je höher der IDF-Wert ist, desto unwahrscheinlicher ist es, dass er in anderen Titeln erscheint, was ihn zu einem seltenen Wort macht. Umgekehrt wird der Wert umso häufiger verwendet, je kleiner er ist.
#IDF-Berechnung
ret = []
for i in range(len(WORDS)):
t = WORDS[i]
ret.append(idf(t))
idf_ = pd.DataFrame(ret, index=WORDS, columns=["IDF"])
idf_s = idf_.sort_values('IDF')
idf_s.style.applymap(highlight_negative)
Was den tf-Wert betrifft, so ist der häufig auftretende idf-Wert von "mask" und "cool" natürlich klein. In diesem Ergebnis wird der Wert 2.609438 an zwei Stellen und der Wert 3.302585 nur an einer Stelle angezeigt.
Je höher der tf-idf-Wert ist, desto wichtiger ist das Wort im Titel.
ret = []
for i in range(N):
ret.append([])
d = WAKATI[i]
for j in range(len(WORDS)):
t = WORDS[j]
if len(d) > 0:
ret[-1].append(tfidf(t,d))
tfidf_ = pd.DataFrame(ret,columns=WORDS)
tfidf_.style.applymap(highlight_negative)
Das Ergebnis sieht so aus. Die Zeile ist die Site und die Spalte enthält alle Wörter. Der Wert von Wörtern, die nicht auf der Site erscheinen, ist "0". Wenn man sich jede Site ansieht, kann man sagen, dass ein Wort mit einem großen Wert eine große Rolle im Site-Titel spielt.
Sie können die Funktionen wie folgt überprüfen. Dies kann hilfreich sein, wenn Sie ein Wort zum Einfügen finden, z. B. den Titel der Website.
Recommended Posts