質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

2回答

1444閲覧

配列中のキーワードを持つ場合のみ、特定のタグ付けを行う方法

mannnakakunn

総合スコア24

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/02/04 22:36

###前提・実現したいこと

スクレイピングを活用した動画サイトを作っています。

キーワードの配列を作り、その配列に入ったキーワードを含むタイトルだった場合、その動画に対して特定のタグ付けを行うといった機能を実装したいと思っています。

###発生している問題・エラーメッセージ

配列に入ったキーワードを含むタイトルかどうか、という条件式の書き方がわかりません。

###ソースコード

Ruby

1# encoding: utf-8 2 3#タグ付けするためのキーワード配列を用意 4 5 kawaii[]="かわいい,カワイイ,可愛い,子犬,息子,赤ちゃん,仔犬,ゴールデンレトリバー,柴犬,少女,フレンチブルドッグ,ポメラニアン,秋田犬,かわいすぎる,孫,puppy" 6 omoshiro[]="歌う,バカ,いびき,爆笑,芸,面白い,面白,おもしろ,funny" 7 howto[]="しつけ,躾,躾け,トレーニング,無駄吠え,対処法,方法,手法,解説,how" 8 kando[]="涙,助け,救う,感動" 9 10 11#以下で配列に含まれるキーワードを含んだタイトルにタグ付けしたいです。イメージでは以下のように書かれるのかと想像していましたが、これではタグ付けされませんでした。 12 13 if dog.title.include?(kawaii) 14 dog.description="かわいい" 15 elsif dog.title.include?(omoshiro) 16 dog.description="おもしろ" 17 end 18 19 dog.save 20 else 21 end 22 end

###補足情報(言語/FW/ツール等のバージョンなど)

Ruby 2.2.2
Rais 4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんな感じですかね?

ruby

1@keys = { 2 感動: "涙,助け,救う,感動", 3 かわいい: "かわいい,カワイイ,可愛い,子犬,息子,赤ちゃん,仔犬,ゴールデンレトリバー,柴犬,少女,フレンチブルドッグ,ポメラニアン,秋田犬,かわいすぎる,孫,puppy", 4 おもしろ: "歌う,バカ,いびき,爆笑,芸,面白い,面白,おもしろ,funny", 5 HowTo: "しつけ,躾,躾け,トレーニング,無駄吠え,対処法,方法,手法,解説,how" 6} 7 8def searchTag(s) 9 @keys.each do |k, v| 10 words = v.split(",") 11 words.detect do |word| 12 return k if s.index(word) 13 end 14 end 15end 16 17puts searchTag "かわいすぎる面白いポメラニアン" # かわいい 18puts searchTag "少女に挑みかかる爆笑無駄吠え狼" # かわいい 19puts searchTag "涙が出るほど面白い赤ちゃん" # 感動

(見ての通りkeysの順番を考えないと変なタグが付きます。)

投稿2016/02/05 11:21

nobuhito

総合スコア146

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mannnakakunn

2016/02/06 06:11

ご指導ありがとうございます。 重複してキーワードが入ってるってことも想定しないといけないんですよね笑 keysの順番が大事なんですね。 @keysの部分(インスタンス変数?)をこのように記述できることさえ知りませんでした。 このような方法ならスマートにキーワードを変更することもできますね。 感動しました!ベストアンサーにさせていただきます。 以下、素人の戯言です。 このままsearchTagメソッドを使った時に、キーワードを持つタイトルの、それぞれのタグ付けには成功しました。 ですが、キーワードを持たない場合に何故かnilが出力されず、以下のような @keysの中身そのままが、出力されてしまいました。(たぶん私のコードの書き方が悪いでしょう) {:感動系動画?=>"心揺さぶる,涙,助け,救う,感動", :かわいい系動画?=>"かわいい,カワイイ,可愛い,子犬,息子,赤ちゃん,仔犬,ゴールデンレトリバー,柴犬,少女,フレンチブルドッグ,ポメラニアン,秋田犬,かわいすぎる,孫,puppy", :おもしろ系動画?=>"歌う,バカ,いびき,爆笑,芸,面白い,面白,おもしろ,funny", :HowTo系動画?=>"しつけ,躾,躾け,トレーニング,無駄吠え,対処法,方法,手法,解説,how"} そこで、 @keys = { 感動系動画?: "心揺さぶる,涙,助け,救う,感動", かわいい系動画?: "かわいい,カワイイ,可愛い,子犬,息子,赤ちゃん,仔犬,ゴールデンレトリバー,柴犬,少女,フレンチブルドッグ,ポメラニアン,秋田犬,かわいすぎる,孫,puppy", おもしろ系動画?: "歌う,バカ,いびき,爆笑,芸,面白い,面白,おもしろ,funny", HowTo系動画?: "しつけ,躾,躾け,トレーニング,無駄吠え,対処法,方法,手法,解説,how", 普通系動画?: " " } のような形(ちょっと強引な形?)で、普通系動画?:" "のように定義してあげると、なんでもないない動画に普通系動画というタグをつけることができました。 これでいいのかよくわかりませんが(苦笑) とても勉強になりました。ありがとうございます。
guest

0

下記のように指定すれば一番最初に見つかったものをかえします。

ruby

1kawaii = %w(かわいい カワイイ) 2dog.title = 'カワイイいぬ' 3kawaii.detect{ |str| dog.title.index(str)} => # カワイイ 4dog.title = '普通のいぬ' 5kawaii.detect{ |str| dog.title.index(str)} => # nil

投稿2016/02/05 00:24

suzUkai74

総合スコア135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mannnakakunn

2016/02/06 05:55

ご指導ありがとうございます。こちらを参考にして、コードを書きましたが、期待通りの動きをしてくれました。 中身としては。。。 1:%w(...)で、キーワードを配列に入れる。 2:配列中のキーワードをdetectメソッドで探す。探す方法は3へ。 3:ブロック引数strに、キーワードそれぞれを入れ、ブロック繰り返す。indexできた場合、そのキーワードが返ってくる。 というような解釈でいいのでしょうかね・・・。ともあれとても勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問