どうも、こんにちは。
Pythonでキーワード検索する時にAND検索をしたかったので自分で作ってみました。
本当は他に便利なライブラリとかがあるのかもしれませんが、ざっと検索したみた感じではよく分かりませんでした。
そこで、独学プログラマーらしく基本の応用で自分なりに考えてみます。
やりたいことはこんな感じです。
例えば、「落第忍者乱太郎 公式忍器編」というワード1があったとします。
このワード1の中に「乱太郎」というキーワードと「公式忍器」という二つのキーワードの2つが含まれているか確認したい、というのがやりたいことです。
キーワードが文字列に含まれているかを確認するin
まず、初めにキーワードが文字列に含まれているかを確認するのに便利なin演算子というのがあります。
例えば、「落第忍者乱太郎 公式忍器編」というキーワードの中に「乱太郎」というキーワードが含まれているかどうか確認したい場合に使います。
含まれている時はTrueを、含まれていない時はFalseを返します。
keyword = '落第忍者乱太郎 公式忍器編'
word = '乱太郎'
if word in keyword:
以下処理
このように簡単に書けます。
ここまでは検索すると色々なブログで書かれています
また、このinの後のkeywordの変数部分は配列やタプルなどイテラブルオブジェクトでも大丈夫です。
※イテラブルオブジェクトとは、繰り返しが可能なオブジェクトのことです。
しかし、逆にこのwordの部分が複数語の場合には検索してもあまり出てきませんでした。
ここから自分でコードを考えます。
複数のワードがキーワードに入っているかを確認するには?
「’落第忍者乱太郎 公式忍器編」というキーワードの中に「乱太郎,公認忍器」という二つのキーワードが含まれているかを考えます。
まず、私は、「乱太郎」と「公認忍器」という言葉がカンマで繋がっているのを分解して配列にしました。
ここは場合によっては、「乱太郎 公認忍器」というように空白の場合など様々なケースが考えられると思いますが、その都度合わせて配列にすれば良いと考えています。
このカンマ続きの文字列を配列にするにはsplitが使えます。
word = '乱太郎,公認忍器'
word_list = split.word(',')
これで、’乱太郎’と’公認忍器’の二つに分割した配列ができました。
*今回は例としてこの2語を用いていますが、実際は変数に入っていて何が入っているかは分からないので、splitをすると3つの配列になっていることもあります。
そして、この配列の要素一つ一つがkeywordの「’落第忍者乱太郎 公式忍器編」に入っているかをforで判断します。
for文で複数キーワードの要素が含まれるか確認する
さて、一つ一つ確認するのですが、inは含まれる場合に使います。
今回は、「乱太郎」と「公認忍具」という2語が必ず入っているかを確認します。
なので、もしも入っていなかったらその時点でアウトとなります。
そこで、inにはnot inという入っていない場合を判定するのもあるのでこれを使います。
一つ一つ「入っていない」ことを確認して入っていなかったらfor文から抜け出すbreakにします。
一つ一つ「入っていない」わけではないことが確認できて最後までfor文が回ったらelseで終わります。
コードを確認してみましょう。
keyword = '落第忍者乱太郎 公式忍器編'
word = '乱太郎,公認忍器'
word_list = split.word(',')
for key in word_list:
if key not in keyword:
break
else:
'全て含まれます'
このような形で複数のキーワードが含まれているかを確認しました。
応用編
今回は説明するために具体的なキーワードを設定しました。
しかし、実際の運用では、上記のkeywordはスクレイピングした結果のキーワードが配列になって入っています。
それをforで一つ一つ取り出します。
自分で含まれているか検索したいwordもカンマで繋がったものが複数あって配列になっています。
そして、keywordの配列から一つ一つ取り出します。その一つ一つに対して、wordの方の配列も一つ一つ取り出して上記の処理をします。
こうすると、スクレイピングして得た文字列群から自分の欲しいキーワードが入ったものがないかをAND検索することができます。
コメント