トップ «前の日記(2013-05-31) 最新 次の日記(2013-06-02)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2013-06-01 :-)

_ 読書メーター

2013年5月の読書メーター 読んだ本の数:7冊 読んだページ数:1962ページ ナイス数:13ナイス ゲームクリエイターが知るべき97のことゲームクリエイターが知るべき97のこと 読了日:5月24日 著者:
アラン・ケイ (Ascii books)アラン・ケイ (Ascii books) 読了日:5月15日 著者:アラン・C. ケイ
考具 ―考えるための道具、持っていますか?考具 ―考えるための道具、持っていますか?感想 アイデアを出すための手段いろいろ。あえて制限をつけることでアイデアをひねり出す 読了日:5月12日 著者:加藤 昌治
魔法少女育成計画 restart (後) (このライトノベルがすごい! 文庫)魔法少女育成計画 restart (後) (このライトノベルがすごい! 文庫)感想 決着。著者の好みは年増云々、と言ったのは取り消します。ラズリーヌはお気に入りだったのにいーーー 読了日:5月5日 著者:遠藤 浅蜊
魔法少女育成計画 restart (前) (このライトノベルがすごい! 文庫)魔法少女育成計画 restart (前) (このライトノベルがすごい! 文庫)感想 デスゲームと推理。途中で魔法少女と魔法効果を整理してたけど、あれは読者への挑戦であろうとは思うんだけど、犯人がさっぱり分からぬ / マジカルデイジーはさすがに生き残ると思ってたんだけど、前の巻といい、もしかしてこの著者は年増が嫌いなんだろうか 読了日:5月4日 著者:遠藤 浅蜊
魔法少女育成計画 (このライトノベルがすごい! 文庫)魔法少女育成計画 (このライトノベルがすごい! 文庫)感想 まどか☆マギカを知る前に読みたかった。ファヴが合理的に使命をもって行動しているんであればよかったんだけど快楽のために行動してるのが残念 読了日:5月4日 著者:遠藤 浅蜊
はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)はじめてのOSコードリーディング ~UNIX V6で学ぶカーネルのしくみ (Software Design plus)感想 UNIX V6のコードを読みながらオペレーティングシステムの仕組みを読み解く。当然ながらコードがたくさん出てくるが、それにより説明が具体化されるので、抽象化された文章よりもむしろ理解しやすい。これはもはやオペレーティングシステムの教科書と言ってよかろう。プロセス、割り込み、ファイルシステム、起動など幅広いが、スケジューラのところが熱い。スワッパの説明など感動すら覚える 読了日:5月3日 著者:青柳 隆宏
読書メーター

_ 午前

0930 起床 && 部屋掃除

1030 おひる。蕎麦

1100 アニメ消化

_ 午後

1400 買い物

あじさいが咲いておる

IMG_1863

_

1800 マルコフ連鎖

2130 飯。陳さんちのホイコーロー しかし牛肉を使用。

2200 おやつ。エール・エル のお菓子。昨日プロパーの方から頂いた。ワッフルワッフル

IMG_1872

IMG_1874

_ [ruby][Yahoo][係り受け解析][自然言語処理][NLP]Yahoo デベロッパーネットワークの日本語係り受け解析APIを使ってみる

テキスト解析:日本語係り受け解析API - Yahoo!デベロッパーネットワーク

こんな

# coding: utf-8

# Yahoo デベロッパーネットワーク の 日本語係り受け解析API を使う
# http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html

#
# ref.
# [を] ヤフーの日本語係り受け解析APIとサンプルプログラム「なんちゃって文章要約」
# http://chalow.net/2008-08-21-1.html
#

require 'uri'
require 'open-uri'
require 'rexml/document'
require 'pp'

def syntactic_parse(xml)
  syntactic ||= []
  
  doc = REXML::Document.new(xml)
  doc.elements.each('ResultSet/Result/ChunkList/Chunk') do |chunk|
    chunks = ""
    chunk.elements.each('MorphemList') do |ml|
      ml.elements.each("Morphem/Surface") do |mo|
        chunks << mo.text
      end
    end
    syntactic << chunks
  end
  
  return syntactic
end

def syntactic_analysis(text)
  apiuri = "http://jlp.yahooapis.jp/DAService/V1/parse"
  appid = "?appid=" + ここにあなたのAPI IDを入れる
  sentence = "&sentence=" + URI.encode(text)
  uri = apiuri + appid + sentence
  
  response = open(uri).read()
  syntactic = syntactic_parse(response)
  return syntactic
end

def main(argv)
  text = argv[0]
  syntactic = syntactic_analysis(text)
  puts syntactic
end

main(ARGV)
% ruby parse1.rb 隣の客はよく柿食う客だ
隣の
客は
よく
柿食う
客だ

_ [ruby][Yahoo][係り受け解析][自然言語処理][NLP][マルコフ連鎖]Yahoo デベロッパーネットワークの日本語係り受け解析APIを使ってマルコフ連鎖してみる

かぜきょうの部屋の隅のあたり。 Botに感情値をつける

あと、単純にYahooの形態素解析APIを使わないのは、言葉と言葉のつながりが学習できないと判断したからです。
例えば、「うちの庭には二羽鶏がいます。」をYahooの形態素解析APIと日本語係り受け解析APIでやってみると、
→形態素解析:うち/の/庭/に/は/二羽/鶏/が/い/ます/。
→日本語係り受け解析:うちの/庭には/二羽鶏が/います。
となるんですが、日本語係り受け解析ではランダムに並び替えられても意味は分かりそうですよね。対して形態素解析では、ランダムになると正しく意味を把握するのがかなり難しくなります。
今回の入力の形式上、言葉の順番という概念は存在しないので、ランダムに並べた時に意味が分かるというのは非常に重要な要素だと考えたわけです。


ということで形態素解析するよりも係り受け解析のほうがマルコフ連鎖作成時に単語の繋がりをあまり意識しなくていいので楽ちん。

マルコフ連鎖の考え方はこちらと同じ → マルコフ連鎖してみた - hitode909の日記

# coding: utf-8

require 'uri'
require 'open-uri'
require 'rexml/document'
require 'pp'

# XML を解析して係り受けごとにまとめる
def syntactic_parse(xml)
  syntactic ||= []
  
  doc = REXML::Document.new(xml)
  doc.elements.each('ResultSet/Result/ChunkList/Chunk') do |chunk|
    chunks = ""
    chunk.elements.each('MorphemList') do |ml|
      ml.elements.each("Morphem/Surface") do |mo|
        chunks << mo.text
      end
    end
    syntactic << chunks
  end
  
  return syntactic
end

# 係り受け解析
def syntactic_analysis(text)
  apiuri = "http://jlp.yahooapis.jp/DAService/V1/parse"
  appid = "?appid=" + ここにあなたのAPI IDを入れる
  sentence = "&sentence=" + URI.encode(text)
  uri = apiuri + appid + sentence
  
  response = open(uri).read()
  syntactic = syntactic_parse(response)
  return syntactic
end

# マルコフ連鎖 学習
def learn(syntacticed)
  statetab ||= {}

  size = syntacticed.size
  0.upto(size - 2) {|index|
    w1 = syntacticed[index]
    w2 = syntacticed[index + 1]
    
    statetab[w1] ||= []
    statetab[w1] << w2
  }
  
  return statetab
end


N_MAX = 5

# マルコフ連鎖 生成
def generate(input, statetab)
  
  output = ""
  
  term = statetab.keys.sample
  output << term
  
  0.upto(N_MAX) {|n|
    if statetab.key?(term)
      term = statetab[term].sample
    else
      term = statetab.keys.sample
    end
    output << term
  }
  
  return output
end

# テキスト読むだけ
#   テキストの途中に \n があると chomp だと削除できないようなので gsub しとく
def read(text)
  File.open(text).read.gsub("\n", "")
end


def main(argv)
  file = argv[0]
  input = read(file)
  syntactic = syntactic_analysis(input)
  statetab = learn(syntactic)
  output = generate(input, statetab)
  
  puts output
end

main(ARGV)

こんなテキストファイルを用意する。Yahoo の係り受け解析APIに渡せるのは 4KB までなので注意。

ほむらちゃん、ごめんね。私、魔法少女になる。
私、やっとわかったの。叶えたい願いごと見つけたの。だからそのために、この命を使うね。
ごめん。ホントにごめん。これまでずっと、ずっとずっと、ほむらちゃんに守られて、望まれてきたから、今の私があるんだと思う。
絶対に、今日までのほむらちゃんを無駄にしたりしないから。
全ての魔女を、生まれる前に消し去りたい。全ての宇宙、過去と未来の全ての魔女を、この手で。
今日まで魔女と戦ってきたみんなを、希望を信じた魔法少女を、私は泣かせたくない。最後まで笑顔でいてほしい。
それを邪魔するルールなんて、壊してみせる、変えてみせる。
これが私の祈り、私の願い。
さあ!叶えてよ、インキュベーター!!

実行する。

% ruby markov1.rb text0.txt
ほむらちゃん、ごめんね。私、やっとわかったの。叶えたい願いごと見つけたの。だから

ううむ

たんにカタコトな文章になっている。なので