15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで、SEO対策用の共起語特定ツールを作成してみた。Selenium | Janome

Last updated at Posted at 2017-11-25

やってみたこと

  • Googleで特定の言語を検索したときに、その語句の共起語を表示するツールの作成
  • SEO対策で上位表示されるためには、共起語の出現頻度を上げるといいとか聞いたので。

アルゴリズム

  • コマンドライン引数に、検索語句を入力する 例「東ロボ 偏差値」
  • Google検索結果の上位10記事を取得する
  • 一つ一つのページに入り、HTMLファイルのbodyの中を取得する
  • 共起語を取得する
  • 共起語をテキストファイルに保存する
  • 最後のページまでおなじ動作を繰り返す
  • テキストを保存して終了

結果

  • 検索したクエリで、共起語を取得できている。
  • 東大の研究所がやっている、ロボットによる大学受験プログラムなのだが、それに近い単語の表示頻度が多いことがわかる。
  • ページによってはエラーが出てスキップされてしまっているので改善が必要
  • 内容語ではない名詞や動詞が含まれている(する、れる等)ので、もう少し改善が必要
$ python3 cooccur.py 東ロボ 偏差値

image.png

  • 出力結果
[INFO]タイトル:「東ロボくん」が偏差値57で東大受験を諦めた理由 | DOL特別レポート | ダイヤモンド・オンライン :1位
する | 15 

ため | 7 

東大 | 7 

試験 | 6 

東 | 5 

の | 5 

年 | 5 

記事 | 5 

くん | 5 

単語 | 5 

こと | 5 

見る | 5 

ロボ | 5 

夫 | 4 

的 | 4 

人 | 4 

妻 | 4 

突破 | 4 

学 | 4 

いる | 4 

-----------------------------------------------------------------------
[INFO]タイトル:AIで東大合格断念 「東ロボくん」偏差値伸びず  :日本経済新聞 :5位
日経 | 25 

する | 23 

情報 | 13 

円 | 8 

会員 | 8 

有料 | 8 

限定 | 7 

合格 | 7 

企業 | 6 

値 | 6 

接待 | 6 

電子 | 6 

一覧 | 6 

版 | 6 

偏差 | 5 

イベント | 5 

試験 | 5 

東 | 5 

東京 | 5 

模試 | 5 

-----------------------------------------------------------------------
[INFO]タイトル:東ロボくん - Wikipedia :6位
する | 21 

大学 | 16 

同上 | 12 

東大 | 11 

編集 | 10 

研究 | 10 

値 | 9 

偏差 | 9 

情報 | 9 

くん | 8 

東 | 8 

合格 | 8 

ロボット | 8 

研究所 | 8 

国立 | 8 

ロボ | 8 

入れる | 7 

人工 | 7 

いる | 7 

模試 | 7 

-----------------------------------------------------------------------
[INFO]タイトル:「東ロボくん」偏差値横ばい「57」 人工知能、東大合格は断念 - 産経ニュース :8位
[INFO]タイトル:ロボットは東大に入れるか。Todai Robot Project :9位
する | 12 

プロジェクト | 10 

新聞 | 8 

れる | 7 

年度 | 6 

研究 | 5 

掲載 | 5 

面 | 5 

件 | 5 

的 | 4 

ロボ | 4 

成果 | 4 

東 | 4 

こと | 4 

月日 | 4 

日経 | 4 

付 | 4 

産業 | 4 

朝刊 | 4 

試験 | 3 

-----------------------------------------------------------------------
[INFO]タイトル:AIプロ「東ロボくん」、東大諦めたら偏差値急上昇 数学44.3→76.2に (1/2ページ) - SankeiBiz(サンケイビズ) :4位
する | 13 

円 | 7 

氏 | 6 

問題 | 6 

模試 | 6 

東大 | 6 

数学 | 6 

企業 | 5 

情報 | 5 

車 | 5 

一覧 | 5 

日本 | 5 

兆 | 5 

スポーツ | 4 

偏差 | 4 

ソフトバンク | 4 

マテ | 4 

一 | 4 

いる | 4 

値 | 4 

-----------------------------------------------------------------------
[INFO]タイトル:【やじうまPC Watch】東大をあきらめた“東ロボくん”の偏差値が急上昇 ~東大模試数学で偏差値44.3から76.2に - PC Watch :5位
[INFO]タイトル:「AIの性能を上げている場合ではない」──東ロボくん開発者が危機感を募らせる、AIに勝てない中高生の読解力 - ITmedia NEWS :6位
する | 47 

いる | 16 

の | 12 

問題 | 12 

ある | 12 

新井 | 11 

教授 | 11 

東 | 10 

ロボ | 10 

東大 | 10 

こと | 10 

くん | 9 

文 | 9 

サイト | 9 

できる | 8 

情報 | 8 

理解 | 8 

割 | 8 

中高生 | 8 

企業 | 7 

-----------------------------------------------------------------------
[INFO]タイトル:「東ロボくん」、東大合格を断念 苦手科目を克服できず:朝日新聞デジタル :8位
[INFO]タイトル:国立情報学研究所の人工知能プロジェクト「ロボットは東大に入れるか」で数学と物理の偏差値を大幅に向上! : 富士通 :9位
する | 63 

問題 | 33 

処理 | 24 

技術 | 22 

研究所 | 22 

模試 | 19 

情報 | 18 

数学 | 18 

値 | 17 

開発 | 16 

偏差 | 16 

富士通 | 16 

物理 | 15 

研究 | 15 

言語 | 15 

東大 | 13 

入試 | 12 

数式 | 12 

大学 | 12 

国立 | 12 

-----------------------------------------------------------------------

image.png

実装

  • 形態素解析ライブラリJanome
  • スクレイピングツールSelenium
  • 細かい環境とかブログとか、コードの解説はブログで。
cooccur.py
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.tokenfilter import *

import re
import nltk


def filterText(text):
   """
   :param text: str
   :rtype : str
   """
   # アルファベットと半角英数と記号と改行とタブを排除
   text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text)
   text = re.sub(r'[!"“#$%&()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]', '', text)
   text = re.sub(r'[\n|\r|\t]', '', text)

   # 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか)
   jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)')
   text = "".join(jp_chartype_tokenizer.tokenize(text))
   text = text.replace(" ", "")
   text = text.replace(" ", "")
   return text

if __name__ == '__main__':
	browser = webdriver.Chrome(executable_path='/mnt/c/workspace/pydev/chromedriver.exe')#Selenium Chromedriverにパスを通す
	browser.get("https://www.google.co.jp/")
	print("[INFO]Googleにアクセスしました")
	query = ""
	argvs = sys.argv  # コマンドライン引数を格納したリストの取得
	if len(argvs) > 1:
		for argv in argvs[1:]: # 検索語句が複数の場合は、それを全部渡す
			query +=  argv + " "
	else:
		query = argvs[0]
	print("[INFO]「{}」で検索しています....".format(query))
	element = browser.find_element_by_id("lst-ib")
	element.send_keys(query) #クエリを入力
	element.send_keys(Keys.ENTER) #Enterキーを押下する
	print("[INFO]検索に成功しました")
	f = open("{}.csv".format(query), 'w') #共起語レポートの作成

	urlsList = [] #ここに変数を格納しないと覚えておいてくれない

	urls = browser.find_elements_by_css_selector("h3.r a")
	print(len(urls))
	for url in urls:
		urlsList.append(url.get_attribute("href"))

	print("[INFO]{}件の検索結果が見つかりました。".format(len(urlsList)))
	count = 1
	for url in urlsList:
		try:

			browser.get(url)
			print("-----------------------------------------------------------------------")
			print("[INFO]{}ページ目にアクセスしました".format(count))
			title = "[INFO]タイトル:{} :{}位".format(browser.title,count)
			f.write(title) # 引数の文字列をファイルに書き込む

			text = browser.find_element_by_css_selector("body").text
			print("[INFO]HTMLを取得しました。")
			print("---------------------------------------")
			filterdText = filterText(text)

			print(filterdText)
			print("---------------------------------------")
			token_filters = [POSKeepFilter(['名詞','動詞']), TokenCountFilter(att='base_form')]
			a = Analyzer(token_filters=token_filters)
			top_words = list(a.analyze(filterdText))[:20]
			print("[INFO]共起語を取得しています。")
			print("-----------------------------------------------------------------------")
			for name, count in top_words:
				output = "{} | {}".format(name,count)
				print(output)
				f.write(output)
			print("-----------------------------------------------------------------------")
		except Exception as e:
			"[ERROR] 共起語を見つけられませんでした。"
		count += 1
	f.close() # ファイルを閉じる	

ブログも見てね

【Python】SEO対策向けの共起語取得ツールを作ってみた Selenium + Janome
https://review-of-my-life.blogspot.jp/2017/11/pythonseo-selenium-janome.html

15
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?