niku-yma4r 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2008-11-05
2
+
3
+ * initial release
4
+
data/README ADDED
@@ -0,0 +1,29 @@
1
+
2
+ = yma4r
3
+
4
+
5
+ == Description
6
+
7
+
8
+ == Installation
9
+
10
+ === Archive Installation
11
+
12
+ rake install
13
+
14
+ === Gem Installation
15
+
16
+ gem install yma4r
17
+
18
+
19
+ == Features/Problems
20
+
21
+
22
+ == Synopsis
23
+
24
+
25
+ == Copyright
26
+
27
+ Author:: niku <niku@>
28
+ Copyright:: Copyright (c) 2008 niku
29
+ License::
data/Rakefile ADDED
@@ -0,0 +1,144 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'fileutils'
11
+ require 'lib/yma4r'
12
+ include FileUtils
13
+
14
+ NAME = "yma4r"
15
+ AUTHOR = "niku"
16
+ EMAIL = "niku@niku.name"
17
+ DESCRIPTION = "yma4r is Yahoo Morphological Analyzer wrapper For Ruby"
18
+ RUBYFORGE_PROJECT = "yma4r"
19
+ HOMEPATH = "http://github.com/#{AUTHOR}/#{RUBYFORGE_PROJECT}"
20
+ BIN_FILES = %w( )
21
+
22
+ VERS = Yma4r::VERSION
23
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
24
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
25
+ RDOC_OPTS = [
26
+ '--title', "#{NAME} documentation",
27
+ "--charset", "utf-8",
28
+ "--opname", "index.html",
29
+ "--line-numbers",
30
+ "--main", "README",
31
+ "--inline-source",
32
+ ]
33
+
34
+ task :default => [:test]
35
+ task :package => [:clean]
36
+
37
+ Rake::TestTask.new("test") do |t|
38
+ t.libs << "test"
39
+ t.pattern = "test/**/*_test.rb"
40
+ t.verbose = true
41
+ end
42
+
43
+ spec = Gem::Specification.new do |s|
44
+ s.name = NAME
45
+ s.version = VERS
46
+ s.platform = Gem::Platform::RUBY
47
+ s.has_rdoc = true
48
+ s.extra_rdoc_files = ["README", "ChangeLog"]
49
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
50
+ s.summary = DESCRIPTION
51
+ s.description = DESCRIPTION
52
+ s.author = AUTHOR
53
+ s.email = EMAIL
54
+ s.homepage = HOMEPATH
55
+ s.executables = BIN_FILES
56
+ s.rubyforge_project = RUBYFORGE_PROJECT
57
+ s.bindir = "bin"
58
+ s.require_path = "lib"
59
+ #s.autorequire = ""
60
+ s.test_files = Dir["test/*_test.rb"]
61
+
62
+ s.add_dependency('classx', '>=0.0.5')
63
+ #s.required_ruby_version = '>= 1.8.2'
64
+
65
+ s.files = %w(README ChangeLog Rakefile) +
66
+ Dir.glob("{bin,doc,test,lib,templates,generator,extras,website,script}/**/*") +
67
+ Dir.glob("ext/**/*.{h,c,rb}") +
68
+ Dir.glob("examples/**/*.rb") +
69
+ Dir.glob("tools/*.rb") +
70
+ Dir.glob("rails/*.rb")
71
+
72
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
73
+ end
74
+
75
+ Rake::GemPackageTask.new(spec) do |p|
76
+ p.need_tar = true
77
+ p.gem_spec = spec
78
+ end
79
+
80
+ task :install do
81
+ name = "#{NAME}-#{VERS}.gem"
82
+ sh %{rake package}
83
+ sh %{sudo gem install pkg/#{name}}
84
+ end
85
+
86
+ task :uninstall => [:clean] do
87
+ sh %{sudo gem uninstall #{NAME}}
88
+ end
89
+
90
+
91
+ Rake::RDocTask.new do |rdoc|
92
+ rdoc.rdoc_dir = 'html'
93
+ rdoc.options += RDOC_OPTS
94
+ rdoc.template = "resh"
95
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
96
+ if ENV['DOC_FILES']
97
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
98
+ else
99
+ rdoc.rdoc_files.include('README', 'ChangeLog')
100
+ rdoc.rdoc_files.include('lib/**/*.rb')
101
+ rdoc.rdoc_files.include('ext/**/*.c')
102
+ end
103
+ end
104
+
105
+ desc "Publish to RubyForge"
106
+ task :rubyforge => [:rdoc, :package] do
107
+ require 'rubyforge'
108
+ Rake::RubyForgePublisher.new(RUBYFORGE_PROJECT, 'niku').upload
109
+ end
110
+
111
+ desc 'Package and upload the release to rubyforge.'
112
+ task :release => [:clean, :package] do |t|
113
+ v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z"
114
+ abort "Versions don't match #{v} vs #{VERS}" unless v == VERS
115
+ pkg = "pkg/#{NAME}-#{VERS}"
116
+
117
+ require 'rubyforge'
118
+ rf = RubyForge.new.configure
119
+ puts "Logging in"
120
+ rf.login
121
+
122
+ c = rf.userconfig
123
+ # c["release_notes"] = description if description
124
+ # c["release_changes"] = changes if changes
125
+ c["preformatted"] = true
126
+
127
+ files = [
128
+ "#{pkg}.tgz",
129
+ "#{pkg}.gem"
130
+ ].compact
131
+
132
+ puts "Releasing #{NAME} v. #{VERS}"
133
+ rf.add_release RUBYFORGE_PROJECT, NAME, VERS, *files
134
+ end
135
+
136
+ desc 'Show information about the gem.'
137
+ task :debug_gem do
138
+ puts spec.to_ruby
139
+ end
140
+
141
+ desc 'Update gem spec'
142
+ task :gemspec do
143
+ open("#{NAME}.gemspec", 'w').write spec.to_ruby
144
+ end
data/lib/yma4r.rb ADDED
@@ -0,0 +1,82 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'rubygems'
3
+ require 'classx'
4
+ class Yma4r
5
+ include ClassX
6
+ extend ClassX::Commandable
7
+ require 'net/http'
8
+
9
+ has :appid,
10
+ :desc => 'アプリケーションID。'
11
+
12
+ has :sentence,
13
+ :desc => '解析対象のテキストです。',
14
+ :writable => true,
15
+ :optional => true
16
+
17
+ has :results,
18
+ :desc => '解析結果の種類をコンマで区切って指定します。',
19
+ :default => proc { 'ma' },
20
+ :validate => proc { |val| val.is_a? 'ma' || 'uniq' },
21
+ :writable => true,
22
+ :optional => true
23
+
24
+ has :response,
25
+ :desc => 'ma_response, uniq_response のデフォルト設定です。word に返される形態素情報をコンマで区切って指定します。無指定の場合は "surface,reading,pos" になります。',
26
+ :default => proc { 'surface,reading,pos' },
27
+ :validate => proc { |val| val.is_a? 'surface' || 'reading' || 'pos' || 'baseform' || 'feature' },
28
+ :optional => true
29
+
30
+ has :filter,
31
+ :desc => 'ma_filter, uniq_filter のデフォルト設定です。解析結果として出力する品詞番号を "|" で区切って指定します。',
32
+ :default => proc { '1|2|3|4|5|6|7|8|9|10|11|12|13' },
33
+ :optional => true
34
+
35
+ has :ma_response,
36
+ :desc => 'ma_result 内の word に返される形態素情報をコンマで区切って指定します。無指定の場合 response の指定が用いられます。',
37
+ :default => nil,
38
+ :optional => true
39
+
40
+ has :ma_filter,
41
+ :desc => 'ma_result 内に解析結果として出力する品詞番号を "|" で区切って指定します。無指定の場合 filter の指定が用いられます。',
42
+ :default => nil,
43
+ :optional => true
44
+
45
+ has :uniq_response,
46
+ :desc => 'uniq_result 内の word に返される形態素情報をコンマで区切って指定します。無指定の場合 response の指定が用いられます。',
47
+ :default => nil,
48
+ :optional => true
49
+
50
+ has :uniq_filter,
51
+ :desc => 'uniq_result 内に解析結果として出力する品詞番号を "|" で区切って指定します。無指定の場合 filter の指定が用いられます。',
52
+ :default => nil,
53
+ :optional => true
54
+
55
+ has :uniq_by_baseform,
56
+ :desc => 'このパラメータが true ならば、基本形の同一性により、uniq_result の結果を求めます。',
57
+ :default => proc { false },
58
+ :optional => true
59
+
60
+ def analyse
61
+ YmaParser.new(request)
62
+ end
63
+
64
+ def request
65
+ host = 'jlp.yahooapis.jp'
66
+ path = '/MAService/V1/parse'
67
+ Net::HTTP.start(host){ |http| http.post(path, query_string) }.body
68
+ end
69
+
70
+ def query_hash
71
+ keys = ['appid', 'sentence', 'results', 'response', 'filter', 'ma_response', 'ma_filter', 'uniq_response', 'uniq_filter', 'uniq_by_baseform']
72
+ vals = [appid, sentence, results , response, filter, ma_response, ma_filter, uniq_response, uniq_filter, uniq_by_baseform]
73
+ alist = keys.zip(vals)
74
+ Hash[*alist.flatten]
75
+ end
76
+
77
+ def query_string
78
+ query_hash.map{ |key,val| "#{URI.encode(key)}=#{URI.encode(val)}" if val }.compact.join('&')
79
+ end
80
+
81
+ private :request, :query_hash, :query_string
82
+ end
data/lib/yma_parser.rb ADDED
@@ -0,0 +1,39 @@
1
+ class YmaParser
2
+ require 'rexml/document'
3
+
4
+ attr_reader :xml
5
+
6
+ class YmaResult
7
+ def initialize(set)
8
+ @set = set
9
+ end
10
+
11
+ def surface
12
+ @set.elements['surface'].text
13
+ end
14
+
15
+ def reading
16
+ @set.elements['reading'].text
17
+ end
18
+
19
+ def pos
20
+ @set.elements['pos'].text
21
+ end
22
+ end
23
+
24
+ def initialize(xml)
25
+ @xml = REXML::Document.new(xml)
26
+ end
27
+
28
+ def total_count
29
+ @xml.elements['//total_count'].text.to_i
30
+ end
31
+
32
+ def filtered_count
33
+ @xml.elements['//filtered_count'].text.to_i
34
+ end
35
+
36
+ def word_list
37
+ @xml.elements['//word_list'].map { |set| YmaResult.new(set) }
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/yma4r'
3
+
@@ -0,0 +1,5 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ require "test/unit"
4
+ class Yma4rTest < Test::Unit::TestCase
5
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: niku-yma4r
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - niku
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-11-13 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: classx
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.0.5
23
+ version:
24
+ description: yma4r is Yahoo Morphological Analyzer wrapper For Ruby
25
+ email: niku@niku.name
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - ChangeLog
33
+ files:
34
+ - README
35
+ - ChangeLog
36
+ - Rakefile
37
+ - test/test_helper.rb
38
+ - test/yma4r_test.rb
39
+ - lib/yma4r.rb
40
+ - lib/yma_parser.rb
41
+ has_rdoc: true
42
+ homepage: http://github.com/niku/yma4r
43
+ post_install_message:
44
+ rdoc_options:
45
+ - --title
46
+ - yma4r documentation
47
+ - --charset
48
+ - utf-8
49
+ - --opname
50
+ - index.html
51
+ - --line-numbers
52
+ - --main
53
+ - README
54
+ - --inline-source
55
+ - --exclude
56
+ - ^(examples|extras)/
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ requirements: []
72
+
73
+ rubyforge_project: yma4r
74
+ rubygems_version: 1.2.0
75
+ signing_key:
76
+ specification_version: 2
77
+ summary: yma4r is Yahoo Morphological Analyzer wrapper For Ruby
78
+ test_files:
79
+ - test/yma4r_test.rb