Created
November 23, 2010 06:26
-
-
Save ultraist/711361 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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