Skip to content

Instantly share code, notes, and snippets.

@ultraist
Created November 23, 2010 06:26
Show Gist options
  • Save ultraist/711361 to your computer and use it in GitHub Desktop.
Save ultraist/711361 to your computer and use it in GitHub Desktop.
require 'CaboCha'
module CaboCha
class Token
def base
if (feature_list_size > 6 && feature_list(6) != "*")
feature_list(6)
else
self.to_s
end
end
def features
f = []
(0 ... feature_list_size).each do |i|
f << feature_list(i)
end
f
end
def verb?
feature_list(0) == '動詞'
end
def noun?
feature_list(0) == '名詞'
end
end
end
class Chunk
attr_accessor :features, :tokens
def initialize(tree, chunk)
@chunk = chunk
@tree = tree
@features = get_features
@tokens = get_tokens
end
def to_s
@tokens.map do |token|
token.surface
end.join
end
def noun?
@tokens[0].noun?
end
def verb?
@tokens[0].verb?
end
def linked?
@chunk.link >= 0
end
def link_index
@chunk.link
end
def link
unless (linked?)
raise "No link found."
end
self.class.new(@tree, @tree.chunk(link_index))
end
def verb_base
@tokens.each do |token|
if (token.verb?)
return token.base
end
end
nil
end
private
def get_features
f = []
(0 ... @chunk.feature_list_size).each do |i|
f << @chunk.feature_list(i)
end
f
end
def get_tokens
tokens = []
(0 ... @chunk.token_size).each do |i|
tokens << @tree.token(@chunk.token_pos + i)
end
tokens
end
end
#sentence = $stdin.gets
#sentence = "太郎はこの本を二郎を見た女性に渡した。"
sentence = <<_SENTENCE
ルイズ!ルイズ!ルイズ!ルイズぅぅうううわぁああああああああああああああああああああああん!!!
あぁああああ…ああ…あっあっー!あぁああああああ!!!ルイズルイズルイズぅううぁわぁああああ!!!
あぁクンカクンカ!クンカクンカ!スーハースーハー!スーハースーハー!いい匂いだなぁ…くんくん
んはぁっ!ルイズ・フランソワーズたんの桃色ブロンドの髪をクンカクンカしたいお!クンカクンカ!あぁあ!!
間違えた!モフモフしたいお!モフモフ!モフモフ!髪髪モフモフ!カリカリモフモフ…きゅんきゅんきゅい!!
小説11巻のルイズたんかわいかったよぅ!!あぁぁああ…あああ…あっあぁああああ!!ふぁぁあああんんっ!!
アニメ2期決まって良かったねルイズたん!あぁあああああ!かわいい!ルイズたん!かわいい!あっああぁああ!
コミック2巻も発売されて嬉し…いやぁああああああ!!!にゃああああああああん!!ぎゃああああああああ!!
ぐあああああああああああ!!!コミックなんて現実じゃない!!!!あ…小説もアニメもよく考えたら…
ル イ ズ ち ゃ ん は 現実 じ ゃ な い?にゃあああああああああああああん!!うぁああああああああああ!!
そんなぁああああああ!!いやぁぁぁあああああああああ!!はぁああああああん!!ハルケギニアぁああああ!!
この!ちきしょー!やめてやる!!現実なんかやめ…て…え!?見…てる?表紙絵のルイズちゃんが僕を見てる?
表紙絵のルイズちゃんが僕を見てるぞ!ルイズちゃんが僕を見てるぞ!挿絵のルイズちゃんが僕を見てるぞ!!
アニメのルイズちゃんが僕に話しかけてるぞ!!!よかった…世の中まだまだ捨てたモンじゃないんだねっ!
いやっほぉおおおおおおお!!!僕にはルイズちゃんがいる!!やったよケティ!!ひとりでできるもん!!!
あ、コミックのルイズちゃああああああああああああああん!!いやぁあああああああああああああああ!!!!
あっあんああっああんあアン様ぁあ!!セ、セイバー!!シャナぁああああああ!!!ヴィルヘルミナぁあああ!!
ううっうぅうう!!俺の想いよルイズへ届け!!ハルケギニアのルイズへ届け!
_SENTENCE
puts sentence, "\n"
c = CaboCha::Parser.new("");
tree = c.parse(sentence)
(0 ... tree.chunk_size).each do |i|
sub = Chunk.new(tree, tree.chunk(i))
if (sub.linked?)
pred = sub.link
if (sub.noun? && pred.verb?)
pred_base = pred.verb_base
puts "* #{sub}#{pred_base}"
#puts sub.tokens.map{|token| token.features.join(",")}.join("/")
#puts pred.tokens.map{|token| token.features.join(",")}.join("/"),"\n"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment