スキップしてメイン コンテンツに移動

投稿

6月, 2018の投稿を表示しています

gooラボ 時刻情報正規化API を試した

gooラボ 時刻情報正規化API を試したはじめにgoo ラボが提供している[時刻情報正規化API]を試してみました。
“今日”, “明日”, "○日後"などの表現を、
"yyyy-mm-dd"形式の日付表現に正規化してくれます。公式ドキュメント試す今日が “2018-06-28” とした場合の出力結果です。↓入力文字昨日は曇りでした。 今日は晴天です。 明日は雨です。 明後日も雨です。 10日後は嵐です。 2ヶ月後はおそらく雨です。 半年後は分かりません。 1年後もわかりません。 100年後は地球があるか分かりません。 ↓実行結果["昨日","2018-06-27"] ["今日","2018-06-28"] ["明日","2018-06-29"] ["明後日","2018-06-30"] ["10日後","2018-07-10"] ["2ヶ月後","2018-09-10"] ["1年後","2019"] ["100年後","2118"] 半年後は認識しないみたいです。。。
○年後を入力すると、実行結果は "yyyy"の年だけになります。キーワード抽出APIなどと組み合わせれば、
自動でカレンダーの予定とかが作成できそうですね。サンプルコード (ruby)以下のサンプルの chrono 関数に、解析対象の文字列を渡すと、
結果を配列で返却します。require'net/https'require'json'# ご自身のapikeyに書き換えてくださいCLIENT_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"### 時刻情報正規化APIの実行# @param sentence 解析対象のテキスト# - chrono : 時刻情報正規化API# - entity : 固有表現抽出API# @result 正規化前後の…

A3RT Text Summarization API を Ruby から呼び出す

文書要約APIA3RT Text Summarization API を Ruby から呼び出すはじめにリクルートテクノロジーズが提供している、
文章要約を行うAPIを Ruby on Rails から呼び出すサンプルコードです。使い方は、以下のサンプルコードをコピーし、
exec() 関数に、要約を行う文書を渡して呼び出すと、
要約結果を文字列の配列で取得できます。サンプルコードrequire'net/http'require'uri'require'json'# ご自身のAPIキーを書き換えてくださいCLIENT_ID="xxxxxxxxxxxxxxxxxxxxxx"### 文書要約 API の実行# @param sentence 解析対象のテキスト# @result 文書の要約結果 (ex: ["センテンス"]) defexec(sentence)# APIのURL url =URI.parse("https://api.a3rt.recruit-tech.co.jp/text_summarization/v1") separation ="。"# 文章数を取得 line_count =get_line_count(sentence, separation)if line_count <=1# 文章数が1以下の場合、APIでエラーとなるため、# 指定された sentence をそのまま要約結果としますreturn[sentence]end# リクエストパラメータを設定 post_data ={'apikey'=>CLIENT_ID,#APIキー'sentences'=> sentence,#要約する文章'linenumber'=>1,#抽出文章数'separation'=> separation #文章の切れ目の文字}# postリクエスト送信 res =post_request(url, post_data,true);# エラーの場合、nilを返却returnnilif res.…

Ruby on Rails で Yahoo のテキスト解析 APIを使う

Ruby on Rails で Yahoo のテキスト解析 APIを使うRubyで Yahooのテキスト解析APIを呼び出すサンプルコードを作ってみました。
引数にチェックを行う文書を渡すと、指摘結果を JSONデータで返すサンプルです。公式ドキュメントはこちら。日本語形態素解析### 日本語形態素解析の実行# @param sentence 解析対象のテキスト# @return 形態素解析の結果# [# {# Surface: "庭" //形態素の表記# reading: "にわ" //形態素の読みがな# pos: "名詞" //形態素の品詞# }# , # ...# ]defexec(sentence)# URLおよびクエリパラメタ設定 url =URI.parse("https://jlp.yahooapis.jp/MAService/V1/parse") url.query =["appid="+URI.encode(CLIENT_ID),"results=ma","sentence="+URI.encode(sentence)].join("&")# getリクエスト送信 res =get_request(url,true);# エラーの場合、nilを返却returnnilif res.code !="200"# xml解析する words =[] doc =REXML::Document.new(res.body)# - word要素分繰り返し doc.elements.each("//ma_result/word_list/word")do|el|# - wordタグ内の各要素を読み取って、hashに格納 words <<["surface","reading","pos"].inject({})do|h, nm| child_el =…

React Rails を導入し、Ruby on Rails + React + ES6 の環境を作る

React Rails の導入 Ruby on Rails + React + ES6 の構成で環境を作ります。
ES6 で書いた React のコードは、
サーバ上でトランスパイル (ES6 -> ES5) されるため、
古いブラウザでも動作します。
gem の追加 gemfile に以下を追加します。
gem 'react-rails' 以下のコマンドでreact-railsをインストールします。
$ bundle install react-rails の初期化 react-rails には react を使えるようによしなにしてくれる generator が用意されています。
インストール後、以下のコマンドを実行します。
$ rails g react:install # コマンドを実行すると、react を実行する為に必要なフォルダ・ファイルが自動作成されます。 Running via Spring preloader in process 1438 create app/assets/javascripts/components create app/assets/javascripts/components/.gitkeep insert app/assets/javascripts/application.js create app/assets/javascripts/components.js create app/assets/javascripts/server_rendering.js create config/initializers/react_server_rendering.rb``` React コンポーネントの作成 react-rails には、React Component 定義を生成してくれる generator があるため、
それを使用して Component を作成します。
$ rails g react:component MyCompName --es6 # コマンドを実行すると、 app/assets/javascripts/components フォルダに、 # jsx ファイルが作成されます。 Ru…

Ruby CSVファイルの読み取り

Ruby 日付関連処理Ruby CSVファイルの読み取りCSVファイルの内容を読み取るサンプルCSV.foreach メソッドサンプルコードrequire'csv'# CSVファイルのパスを指定して、CSVの行数分ブロックの評価を行うCSV.foreach("path/to/filename.csv")do|row|# 1列目の値を取り出す p row[0]end構文CSV.foreach(path, options =Hash.new){|row|...}->niloptions で指定可能な内容key内容:col_sepフィールドの区切り文字列を指定します。:quote_charフィールドをクオートする文字を指定します。長さ 1 の文字列でなければなりません。正しいダブルクオートではなく間違ったシングルクオートを使用しているアプリケーション で便利です。:headerstrue を指定すると、CSV ファイルの一行目をヘッダとして扱います。 配列を指定するとそれをヘッダとして扱います。:skip_blanks真を指定すると、空行を読み飛ばします。:skip_lines指定した正規表現にマッチしたそれぞれの行をコメントとして読み飛ばします。エンコーディングの問題foreach メソッドの場合、UTF-8のファイルしか処理出来ません。
UTF-8、Shift-JIS両方に対応したい場合は、
open関数でエンコーディング指定でファイルを開いた後、
CSV.new で CSVファイルの内容を読み込みます。open("path/to/filename.csv","rb:Shift_JIS:UTF-8",undef::replace)do|f|CSV.new(f).eachdo|row|# 1列目の値を取り出す p row[0]endendCSV.new コンストラクタ構文CSV.new(f, options =Hash.new){|row|...}->nil引数 f には、String か IO のインスタンスを指定します。
String を指定する場合は、 “111, 2222, 333” などの CSV データを指定します。options で指定可能な内容CSV.for…

Ruby 日付関連処理

Ruby 日付関連処理Ruby 日付関連処理日付の作成# 年月日を指定し、日付を作成 d2 =Date.new(2017,4,30);# 本日日付を取得 d3 =Date.today 月末日を求める day =Date.new(2020,2,-1)# => #<Date: 2020-02-29 ((2458909j,0s,0n),+0s,2299161j)>point: newの第3引数に負の値をわたすと末日から数える。-1が末日になる。文字列 から 日付へ変換Date.strptime( str, format)サンプルコードrequire'date'beginDate.strptime('2017-09-03','%Y-%m-%d')rescueArgumentError p "不正な日付文字列"end[引数]str:変換対象の日付文字列
format:日付フォーマット[例外]ArgumentError:正しくない日付になる組み合わせである場合に発生します。日付 から 文字列へ変換val.strftime( format)サンプルコードrequire'date' val =DateTime.now val.strftime('%Y-%m-%d')[引数]format:日付フォーマット日付フォーマット (format)フォーマット出力形式%A曜日の名称(Sunday, Monday … )%a曜日の省略名(Sun, Mon … )%B月の名称(January, February … )%b月の省略名(Jan, Feb … )%c日付と時刻%d日(01-31)%H24時間制の時(00-23)%I12時間制の時(01-12)%j年中の通算日(001-366)%M分(00-59)%m月を表す数字(01-12)%p午前または午後(AM,PM)%S秒(00-60) (60はうるう秒)%U週を表す数。最初の日曜日が第1週の始まり(00-53)%W週を表す数。最初の月曜日が第1週の始まり(00-53)%w曜日を表す数。日曜日が0(0-6)%X時刻%x日付%Y西暦を表す数%y西暦の下2桁(00-99)%Zタイムゾーン%%%自身日付の加減算日の加減…

Ruby 配列関連のいろいろ

Ruby 配列関連のいろいろ Ruby 配列関連のいろいろ 配列(Array)の宣言# 4つの数値をもつ配列を作成 ary =[1,2,3,4]# Array.new で3つの要素持つ配列を作成# 各要素は nil で初期化される ary =Array.new(3)#=> [nil, nil, nil] 配列要素へのアクセス 配列インデックスは0〜始まります。
ary =[1,2,4,6]# 3番目の要素にアクセス p ary[2]#=> 4# 存在しない要素にアクセスした場合は、nilが返ります p ary[10]#=> nil# 2番目の要素の値を変更します ary[1]=100 p ary[1]#=> 100 first 配列の先頭要素を取得します。
空の配列の場合、nil が返ります。
ary =[1,2,4,6] p ary.first #=> 1 first(n) 先頭の n 要素を配列で返します。n は 0 以上でなければなりません。
ary =[1,2,4,6]# 先頭の2要素を配列で取得 p ary.first(2)#=> [1, 2] last 配列の最終要素を取得します。
空の配列の場合、nil が返りるのは first と同じ
last(n) 末尾の n 要素を配列で返します。n は 0 以上でなければなりません。
使用方法は first(n) と同じです。
繰り返し処理 each / each_index / each_with_index 配列要素数分、指定したブロックを実行します。
呼び出す関数よって、ブロックに渡される引数が以下の通り変わります。
ary =[2,4,6,8]# [each関数] ブロックの引数には、各要素の値が入る ary.each{|v| p v }#=> 2 4 6 8# [each_index関数] ブロックの引数には、配列インデックスの値が入る ary.each_index {|i| p i }#=> 0 1 2 3# [each_with_index関数] ブロックの引数には、配列の値と、インデックスの2つが入る ary.each_with_index {|v,i| p "index=#{i} value=#{v}&quo…

Ruby 文字列・数値変換

Ruby 文字列・数値変換 Ruby 文字列・数値変換 文字列 から 数字#文字列を Integer型の数値に p "41".to_i #=> 41 p "0x41".to_i #=> 0, 数字ではないところまでを変換する デフォルトは10進数文字列として変換するが、変換する時の基数を引数で指定する事ができます。
"11111111".to_i(2)#=> 255 浮動小数点数へ変換する場合
p "99.9%".to_f #=> 99.9 数値 から 文字列 Integerの値を文字列に変換
str =12.to_s #=> "12" こちらも、デフォルトは10進数文字列として変換するが、変換する時の基数を引数で指定する事ができます。
# 2進数 str =12.to_s(2)#=> "1100"# 16進数 str =12.to_s(16)#=> "c"

型の判定

型の判定Ruby 型の判定classオブジェクトのクラスの型を取得します。["a","b"].class#=> Arraykind_of?オブジェクトは特定のクラス又はそのサブクラスのインスタンスかどうかを調べられます。
モジュールに関しても、調べられます。classClassAendclassClassB<ClassAend instance =ClassB.newinstance.kind_of?(ClassA)#=> trueinstance_of?オブジェクトは特定のクラスのインスタンスかどうかを調べられます。
kind_of? とは違い、サブクラスまでは調べられません。classClassAendclassClassB<ClassAend instance =ClassB.newinstance.instance_of?(ClassA)#=> false instance.instance_of?(ClassB)#=> true