この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレス×ツイッターによる無料でできるオートブログ 第二十回目 アフィリエイト広告を自動で作成し稼ぐ方法 その2

今回は前回に引き続き、アフィリエイト広告を自動で作成するための下準備をします。
Googleがリファラーで検索キーワードを出さなくなりつつあるので、逆説的に自分のページに含まれるコンテンツからキーワードを作ってしまおう、というわけです。

日本語形態素解析とか構文字句解析APIの導入は面倒なので、PHPの正規表現を使って大雑把に分けてしまいます。
使うPHPの関数は「preg_match_all」という関数を使います。
「preg_match_all」「preg_match」と違い、第三引数にマッチする全てのパターンを二次元配列として格納してくれる便利な関数です。

preg_match_all関数は以下の3つの引数をとります。

preg_match_all( 正規表現文字列 , 検索する文字列 , 検索結果を格納する配列変数 );

検索する文字列はもちろんワードプレスの本文ですね。
難しいのが「正規表現文字列」です。
ワードプレスでは文字コードがUTF8を使用しているので、漢字の示す文字コードの範囲は「[一-龠々]」となります。
なんだかよく分からない文字列ですが、UTF8では画数の多さで並んでいるので漢数字の「一」が最初で、「龠」という読み方のわからない漢字が最後です。「々」は特殊な使われ方をするので個別に指定します。

正規表現の詳しい解説は避けますが、要するに文字コードの漢字の範囲を指定している、ということを理解して下さい。
次に漢字以外のひらがなやカタカナ、英数字ですが、同じようにこんな感じで指定します。

[ぁ-ん]
[ァ-ヴー]
[a-zA-Z0-9]
[a-zA-Z0-9]

ちょっと実験してみましょう。
PHPが動くサーバーに「test1.php」というファイル名で以下の内容をコピーして、ブラウザで表示してみましょう。
解析する文章は「教育基本法」です。保存時は必ず文字コードを「UFF8(Unicode)」で保存して下さい。

<?php

$text = "われらは、さきに、日本国憲法を確定し、民主的で文化的な国家を建設して、世界の平和と人類の福祉に貢献しようとする決意を示した。この理想の実現は、根本において教育の力にまつべきものである。われらは、個人の尊厳を重んじ、真理と平和を希求する人間の育成を期するとともに、普遍的にしてしかも個性豊かな文化の創造を目指す教育を普及徹底しなければならない。ここに、日本国憲法の精神に則り、教育の目的を明示して、新しい日本の教育の基本を確立するため、この法律を制定する。";

preg_match_all( '/[一-龠々]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u' , $text , $result );

print_r( $result );

?>

これをブラウザからアクセスして表示させると以下のようになります。
因みに「print_r」は変数を「print」「echo」よりも分かりやすく出力してくれるテスト用の関数です。

Array
(
[0] => Array
(
[0] => われらは
[1] => さきに
[2] => 日本国憲法
[3] => を
[4] => 確定
[5] => し
[6] => 民主的
[7] => で
[8] => 文化的
[9] => な
[10] => 国家
[11] => を
[12] => 建設
[13] => して
[14] => 世界
[15] => の
[16] => 平和
[17] => と
[18] => 人類
[19] => の
[20] => 福祉
[21] => に
[22] => 貢献
[23] => しようとする
[24] => 決意
[25] => を
[26] => 示
[27] => した
[28] => この
[29] => 理想
[30] => の
[31] => 実現
[32] => は
[33] => 根本
[34] => において
[35] => 
[36] => の
[37] => 力
[38] => にまつべきものである
[39] => われらは
[40] => 個人
[41] => の
[42] => 尊厳
[43] => を
[44] => 重
[45] => んじ
[46] => 真理
[47] => と
[48] => 平和
[49] => を
[50] => 希求
[51] => する
[52] => 人間
[53] => の
[54] => 育成
[55] => を
[56] => 期
[57] => するとともに
[58] => 普遍的
[59] => にしてしかも
[60] => 個性豊
[61] => かな
[62] => 文化
[63] => の
[64] => 創造
[65] => を
[66] => 目指
[67] => す
[68] => 
[69] => を
[70] => 普及徹底
[71] => しなければならない
[72] => ここに
[73] => 日本国憲法
[74] => の
[75] => 精神
[76] => に
[77] => 則
[78] => り
[79] => 
[80] => の
[81] => 目的
[82] => を
[83] => 明示
[84] => して
[85] => 新
[86] => しい
[87] => 日本
[88] => の
[89] => 
[90] => の
[91] => 基本
[92] => を
[93] => 確立
[94] => するため
[95] => この
[96] => 法律
[97] => を
[98] => 制定
[99] => する
)
)

見事に漢字とひらがなが分割されていますね。
カタカナや英数字は含まれていませんが、同じことができます。

次に、配列で重複する値をカウントします。例えば冒頭の「われらは」という単語は文中2回出てきます。「教育」という単語は4回繰り返し出てきます。これらの頻出回数を数えます。配列の数を数えるにはPHPに便利な「array_count_values」という関数があるのですが、多次元配列なのでそのままでは使えません。
なので、いったん一次元の連想配列に格納し、重複する値をひとつにまとめて、カウントをします。
最後に「arsort」関数で降順に値をソートします。

PHPが動くサーバーに「test2.php」というファイル名で以下の内容をコピーして、ブラウザで表示してみましょう。
保存時は必ず文字コードを「UFF8(Unicode)」で保存して下さい。

<?php

$text = "われらは、さきに、日本国憲法を確定し、民主的で文化的な国家を建設して、世界の平和と人類の福祉に貢献しようとする決意を示した。この理想の実現は、根本において教育の力にまつべきものである。われらは、個人の尊厳を重んじ、真理と平和を希求する人間の育成を期するとともに、普遍的にしてしかも個性豊かな文化の創造を目指す教育を普及徹底しなければならない。ここに、日本国憲法の精神に則り、教育の目的を明示して、新しい日本の教育の基本を確立するため、この法律を制定する。";

preg_match_all( '/[一-龠々]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u' , $text , $result );

//配列を作成
$counted_word = array();
//配列をループ
foreach( $result as $key => $value )
{
	//配列をループ
	foreach( $value as $key2 => $value2 )
	{
		//値があれば1足す
		if( $counted_word[ $value2 ] )
		{
			$counted_word[ $value2 ] += 1;
		}
		//なければ1
		else
		{
			$counted_word[ $value2 ] = 1;
		}
	}
}

//ハッシュの値で降順ソートする
arsort( $counted_word );

//配列を分かりやすく出力する
print_r( $counted_word );

?>

これをブラウザからアクセスして表示させると以下のようになります。

Array
(
[の] => 11
[を] => 11
[教育] => 4
[平和] => 2
[と] => 2
[この] => 2
[われらは] => 2
[して] => 2
[する] => 2
[に] => 2
[日本国憲法] => 2
[個性豊] => 1
[かな] => 1
[文化] => 1
[目指] => 1
[創造] => 1
[にしてしかも] => 1
[普遍的] => 1
[育成] => 1
[人間] => 1
[期] => 1
[するとともに] => 1
[制定] => 1
[法律] => 1
[す] => 1
[基本] => 1
[確立] => 1
[日本] => 1
[目的] => 1
[明示] => 1
[しい] => 1
[り] => 1
[則] => 1
[しなければならない] => 1
[普及徹底] => 1
[ここに] => 1
[精神] => 1
[するため] => 1
[新] => 1
[個人] => 1
[建設] => 1
[国家] => 1
[世界] => 1
[人類] => 1
[貢献] => 1
[福祉] => 1
[な] => 1
[文化的] => 1
[確定] => 1
[さきに] => 1
[し] => 1
[民主的] => 1
[で] => 1
[しようとする] => 1
[決意] => 1
[にまつべきものである] => 1
[力] => 1
[尊厳] => 1
[重] => 1
[真理] => 1
[んじ] => 1
[において] => 1
[根本] => 1
[した] => 1
[示] => 1
[理想] => 1
[実現] => 1
[は] => 1
[希求] => 1
)

結果をみると、接続詞の「の」「を」11回で最頻出単語となっています。
続いて「教育」4回「平和」2回と続きます。
単純に頻出ランキングだけでキーワードを作ると「の を 教育 平和」となるのですが、これで検索しても大して意味がありません。というのも「接続詞」は様々な単語にくっついて意味を成すものなので、キーワードに含めてもあまり意味がないのです。

そこで不要な接続詞やひらがなを抜いてみます。
すると候補として以下の4つの単語が浮かび上がってきます。

[教育] => 4
[平和] => 2
[われらは] => 2
[日本国憲法] => 2

キーワードとしてまとめる場合、多くの場合はひらがなは不要だったりします。
するとこうなります。

[教育] => 4
[平和] => 2
[日本国憲法] => 2

「教育 平和 日本国憲法」で検索すると、なんとなく意味のある検索ができそうです。
カタカナは英語の日本語表記として使われる場合があるので抜くわけにはいきません。

なので、抽出したいキーワードは、2回以上出現し、ひらがな以外とすると割とまっとうなキーワードが残りそうです。
改作してみます。変えるところは「[ぁ-ん]+|」のひらがなを抽出するためのパターンを削除するだけです。

<?php

$text = "われらは、さきに、日本国憲法を確定し、民主的で文化的な国家を建設して、世界の平和と人類の福祉に貢献しようとする決意を示した。この理想の実現は、根本において教育の力にまつべきものである。われらは、個人の尊厳を重んじ、真理と平和を希求する人間の育成を期するとともに、普遍的にしてしかも個性豊かな文化の創造を目指す教育を普及徹底しなければならない。ここに、日本国憲法の精神に則り、教育の目的を明示して、新しい日本の教育の基本を確立するため、この法律を制定する。";

preg_match_all( '/[一-龠々]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/u' , $text , $result );

//配列を作成
$counted_word = array();
//配列をループ
foreach( $result as $key => $value )
{
	//配列をループ
	foreach( $value as $key2 => $value2 )
	{
		//値があれば1足す
		if( $counted_word[ $value2 ] )
		{
			$counted_word[ $value2 ] += 1;
		}
		//なければ1
		else
		{
			$counted_word[ $value2 ] = 1;
		}
	}
}

//ハッシュの値で降順ソートする
arsort( $counted_word );

//配列を分かりやすく出力する
print_r( $counted_word );

?>

結果はこうなりました。この中から2回以上繰り返し出現する単語だけ使用すればいいわけです。

Array
(
[教育] => 4
[平和] => 2
[日本国憲法] => 2
[目指] => 1
[文化] => 1
[創造] => 1
[個性豊] => 1
[育成] => 1
[期] => 1
[普遍的] => 1
[普及徹底] => 1
[則] => 1
[基本] => 1
[確立] => 1
[法律] => 1
[制定] => 1
[日本] => 1
[新] => 1
[人間] => 1
[目的] => 1
[明示] => 1
[精神] => 1
[重] => 1
[世界] => 1
[人類] => 1
[福祉] => 1
[建設] => 1
[国家] => 1
[確定] => 1
[民主的] => 1
[文化的] => 1
[貢献] => 1
[決意] => 1
[個人] => 1
[尊厳] => 1
[真理] => 1
[力] => 1
[根本] => 1
[示] => 1
[理想] => 1
[実現] => 1
[希求] => 1)

以上でキーワードを分割し抽出する準備ができました。
次は上記のコードをワードプレスに移植します。

関連記事