はじめに 形態素解析とマルコフ連鎖で面白いことできそうと聞き、調べてみると既に色んな人がやっていました。 Rubyで何か書きたいと思っていたので、参考にしながら試してみました。 [参考リンク] マルコフ連鎖でTwitter BOTを作る - FLYING [プログラミング作法]マルコフ連鎖アルゴリズムをrubyで実装してみた - Qiita やろうとしたこと 過去ツイートにある単語を適当に繋ぎあわせて新たに文章を作る 環境 Rubyのバージョンはたぶん2.1。MecabをRubyから使うのにNatto gem、TwitterAPIを叩くのにTwitter gemを突っ込みました。 流れ TwitterAPIを叩き自分の過去ツイートを最近から数千個読み込んでくる。それぞれのツイートをMecabで形態素解析して単語に分解し、辞書っぽいものをつくる。作成した辞書からマルコフ連鎖で適当に単語をつな
文章の中からあるパターンにマッチする部分があるかどうかを調べる事は比較的多く使われます。完全に一致した部分があるかどうかを調べるだけではなく、より複雑なパターンを作成するために用意されたのが正規表現です。正規表現で用意されている構文や特殊な文字を組み合わせる事で、複雑な条件を持つ検索パターンを簡潔に定義することができます。ここでは Ruby における正規表現の使い方について解説します。 ※ 正規表現については「正規表現入門」もあわせてご参照頂くと分かりやすいかと思います。
Ruby クロージャ - ソースコード備忘録を読んで、自分のRubyにおけるブロックと変数の理解が怪しいことがわかった。で、ちょっと普通とは違うアプローチからの整理を試みて、理解できた気がするので書いてみます。誤りを教えてくれればうれしいです。 ローカル変数 プログラムコードはプログラマの意思をインタプリタに伝えるものだ。Rubyではオブジェクトに処理を依頼する形でプログラムを組成するけど、そのとき変数はプログラマが対象のオブジェクトを指し示すためのラベルとして用いられる。すなわち変数はオブジェクト参照ラベルだ。 複数の手続きブロックで構造化される現代のプログラミングにおいては、1つの変数の適用範囲はそれが定義されている手続きブロックに限定されるのが普通だ。 Rubyにおいてメソッド定義はこの手続きブロックを新たに作る。だから以下の例でcounterメソッド内の変数nは未定義となる n =
以下のRubyのコードが,意図した動作をしないのはなぜですか。(制限時間1分) やりたい事: 1から3までの各数値の2乗を計算する。 プログラム終了時点での,変数の状態を表示する。 # 「p」で日本語を出力するための設定 $KCODE = "sjis" # 1から3までの範囲で実行 1.upto(3) do |i| # 2乗した値をnに代入 n = i * i # その値を出力 p "#{ i }の2乗は,#{ n }です。" end p "プログラム終了時点でのnの値は,#{ n }です。" 発生する問題 >ruby hoge.rb "1の2乗は,1です。" "2の2乗は,4です。" "3の2乗は,9です。" hoge.rb:12: undefined local variable or method `n' for main:Object (NameError) 最後の部分で,n の値
スコープとは「ある変数がプログラムの中で参照可能な範囲」のことで、変数によってその範囲は異なります。 ローカル変数 ●ブロックの外で宣言されたものは、ブロックの中でも有効 a = 1 1.times do puts a end #=> 1 ●メソッドの外で宣言されたものは、メソッド内では無効 a = 1 def foo puts a end foo #=> エラー(NameError) ●メソッドの中で宣言されたものは、メソッド内、ブロック内で有効。メソッドの外では無効 def foo a = 1 1.times do puts a end puts a end foo #=> 1 #=> 1 puts a #=> エラー(NameError) ●ブロックパラメータとして宣言されたものは、そのブロックが終わるまで有効 1.times do |a| end puts a #=> エラー(Na
group_by -> Enumerator[permalink][rdoc][edit] group_by {|obj| ... } -> Hash ブロックを評価した結果をキー、対応する要素の配列を値とするハッシュを返します。 例 (1..6).group_by {|i| i%3} #=> {0=>[3, 6], 1=>[1, 4], 2=>[2, 5]} ブロックを省略した場合は Enumerator を返します。
インスタンスの中で使用されるのがインスタンス変数です。インスタンス変数はクラス内のすべてのメソッドから使用することができます。ここでは Ruby でインスタンス変数を作成する方法と使い方について解説します。 インスタンス変数とは インスタンス変数はクラスの中で定義します。インスタンス変数は、クラス内のすべてのメソッドで共通して使用することができます。最初にどこかのメソッドでインスタンス変数を使用するとインスタンス変数は作成されます。一度作成されたインスタンス変数は他のメソッド内で値を取り出したり別の値を格納したりすることができます。 またインスタンス変数はクラスから作成されるインスタンス毎に固有のものとなります。例えば生成されたインスタンスの中でインスタンス変数に格納された値と、別のインスタンスの中でインスタンス変数に格納された値は別のものとなります。 インスタンス変数を作成する インスタ
(2015/10/13追記) 今なら、他言語には無名関数やcallback関数というものがありますねとか、イベント駆動の世界を覗いてから戻ってくるとより腑に落ちるかもしれませんとか、もう少し全体観の中で説明する気がしますが、当時は本記事の様な理解が役に立ったことは事実なので、引き続き公開を続けます。 (2013/11/29追記) block_given? について Twitter上で「Kernel.#block_given?についての解説があってもよさそう」と 指摘を頂きましたので、本文下部に追記しました。 概要 Ruby on Rails Tutorialのエッセンスを自分なりに整理してみる4 Railsを触る際知っていると便利なRubyの基礎 [ブロックとかシンボルとか] http://qiita.com/kidachi_/items/46a6e49b6306655ccd64 の続き。
Rubyのオブジェクト指向は一貫性があってわかりやすいという評判だけれども、オブジェクトを意識しない便利な手続き的な書き方もできるからそれがRubyの本来の姿を分かり難くしているという面もあってその辺でRubyを始めたけど今ひとつ本質的なものが見えてこない人たちもいるんじゃないかと思う今日此の頃ですが皆さんいかがお過ごしですか? それで随分と前に僕がRubyを始めてそんなに時間が経っていないときに書いたブログの記事があってそのことを思い出して、読み返してみるとRubyのオブジェクトを中心にしたちょっとユニークな説明になっていてまあ書き足りない部分もあるけれどもあの頃の知識でよく書けてるじゃないのなどと自画自賛しつつ、これは先の「Rubyを始めたけど今ひとつ本質的なものが見えてこない人たち」の役にも立つのではないかという発想が生まれて、結果ここにその記事群の文体を変えたり間違いを直したり挿絵
画像URLを指定するとその画像データをローカルに保存するコードです。 保存先のディレクトリは/var/tmp/hoge/に指定して保存します。 開発環境 ruby 1.9.3 ソースコード 与えられたURLの画像を保存する関数は以下のように書けます。 require "open-uri" require "FileUtils" def save_image(url) # ready filepath fileName = File.basename(url) dirName = "/var/tmp/hoge/" filePath = dirName + fileName # create folder if not exist FileUtils.mkdir_p(dirName) unless FileTest.exist?(dirName) # write image adata ope
push(*obj) -> self[permalink][rdoc][edit] append(*obj) -> self 指定された obj を順番に配列の末尾に追加します。引数を指定しなければ何もしません。 [PARAM] obj: 自身に追加したいオブジェクトを指定します。 例 array = [1, 2, 3] array.push 4 array.push [5, 6] array.push 7, 8 p array # => [1, 2, 3, 4, [5, 6], 7, 8] [SEE_ALSO] Array#pop, Array#shift, Array#unshift, Array#<<
(募集はダミーデータです) (参考: ドキュメント登録の流れについては Elasticsearch 入門 を参照すると良いです。) Analyzer 上記のデータを実際に入れる前に、index の作成と analyzer の設定をします。 以下のコマンドを実行することで analyzer の設定ができます。 下記で説明して行きます。 curl -XPUT 'http://localhost:9200/wantedly-demo' -d \ '{ "settings": { "analysis": { "filter": { "pos_filter": { "type": "kuromoji_part_of_speech", "stoptags": [ "助詞-格助詞-一般", "助詞-終助詞" ] }, "greek_lowercase_filter": { "type": "lowerc
エンジニア(プログラマー)をやっていると基本的には徐々にレベルアップしていきます。 しかしある点で閾値を越えて、レベルが一気に上がると感じる瞬間があります。 皆さんどうでしょうか? 自分の場合は クラスメソッドとインスタンスメソッドの違いをはっきり理解したことがそのきっかけでした。 これまでぼんやりとモデルにメソッドを追加していたものがかなり自信を持ってメソッドを追加出来るようになりました。 今回はクラスメソッドとインスタンスメソッドの違いを簡単に紹介して、他にも初級者から中級者に上がるようなパターンを考えてみたいと思います。 クラスメソッドとインスタンスメソッドの違い 本当にその名の通りなんですが、 クラス全体で使えるのがクラスメソッド あるクラスのインスタンスで使えるのがインスタンスメソッド 具体例を書くと、rubyでは class Dog #クラスメソッド def self.chog
Rubyといったオブジェクト指向言語を学ぶと、メソッドの定義方法としてインスタンスメソッドとクラスメソッドという2通りの定義方法があることを学ぶと思います。しかし、言語自体のガイドブックには「定義方法にインスタンスメソッドとクラスメソッドがある」と書いてあるだけで、大抵その使い分けについては書かれていません。 そういう訳で、このエントリではその使い分けについて少し考えてみたいと思います。理論的に厳密な使い分けを目指すというよりは、そもそも使い分けの検討が全くつかない!という方に向けて、その指針の一助となることを目指します。 インスタンスメソッドとクラスメソッドとはそもそものところ、Rubyといった「オブジェクト指向の考え方」を実装した言語の機能です。その機能がなぜあるのか?というそもそものところは、オブジェクト指向の考え方にさかのぼることになります。 そこで、インスタンスメソッドとクラスメ
scan(pattern) -> [String] | [[String]][permalink][rdoc][edit] self に対して pattern を繰り返しマッチし、マッチした部分文字列の配列を返します。 pattern が正規表現で括弧を含む場合は、括弧で括られたパターンにマッチした部分文字列の配列の配列を返します。 [PARAM] pattern: 探索する部分文字列または正規表現 例 p "foobar".scan(/../) # => ["fo", "ob", "ar"] p "foobar".scan("o") # => ["o", "o"] p "foobarbazfoobarbaz".scan(/ba./) # => ["bar", "baz", "bar", "baz"] p "foobar".scan(/(.)/) # => [["f"], ["o"], [
Railsではバリデーション(Validation)という仕組みがあります。 フォームなどでユーザーからの入力値をDBに保存する前にその値が正しいものかモデル層で(システムとして許可している値か)を検証する仕組みです。 バリデーションの基本的な流れ、バリデーションの定義とバリデーションのテスト方法、バリデーションのスキップなどのバリデーションの基本についてまとめました。 動作確認 Rails 4.1 ActiveRecord 4.1 shoulda-matchers 2.6.3 目次 1. Railsでのバリデーションの流れ 2. バリデーションを定義する 2.1. 存在チェック(presence) 2.2. 一意性(ユニーク制約)のチェック(uniqueness) 2.3. 長さのチェック(length) 2.4. フォーマットのチェック(format) 2.5. 数値の値チェック(nu
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く