tfidf_ja 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -1,16 +1,89 @@
1
1
  = tfidf_ja
2
2
 
3
- Description goes here.
4
-
5
- == Contributing to tfidf_ja
6
-
7
- * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
- * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
- * Fork the project
10
- * Start a feature/bugfix branch
11
- * Commit and push until you are happy with your contribution
12
- * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
- * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
3
+ tfidf_jaは与えられた単語の配列の {TF-IDF}[http://ja.wikipedia.org/wiki/Tf-idf] を算出し、単語をキー、TF-IDF値をバリューとするハッシュテーブルを返却するライブラリです。
4
+
5
+ == 特徴
6
+
7
+ tfidf_jaには以下の特徴があります。
8
+
9
+ * IDF辞書
10
+ * IPADIC辞書に収録されている日本語の形態素(約32万語)を使用し、TF値をYahoo!のインデックス数としてあらかじめ算出。
11
+ * 算出したTF値からIDF値を算出し、IDF辞書としてライブラリに包含し、ライブラリ使用時の算出コストを減らしています。
12
+ * 形態素解析
13
+ * {igo-ruby}[https://rubygems.org/gems/igo-ruby]を使用した形態素解析を行なった上で、TF-IDFを算出することも可能です。
14
+
15
+ == インストール方法
16
+
17
+ コマンドプロンプトより以下を実行してください。
18
+ $ gem install tfidf_ja
19
+
20
+ == サンプル
21
+ === 単語の配列からTF-IDFを取得
22
+
23
+ require 'rubygems'
24
+ require 'tfidf_ja'
25
+
26
+ ti = TfIdf::Ja.new
27
+ p ti.tfidf(['この', '文章', 'から', 'TFIDF', '値', 'を', '取得', 'する'])
28
+
29
+ === 形態素解析を行なったあと、TF-IDFを取得
30
+
31
+ require 'rubygems'
32
+ require 'tfidf_ja'
33
+ require 'tfidf_ja/igo_extension'
34
+
35
+ dir = './ipadic' # igo-rubyに渡す辞書ファイルのディレクトリ
36
+ tie = TfIdf::IgoExtension.new(dir)
37
+ p tie.tfidf('この文章を形態素解析し、TFIDF値を取得する')
38
+
39
+ === インスタンスを使い回し
40
+
41
+ インスタンスを使い回すことにより、TF-IDF値は加算されていきます。
42
+ 複数のテキストから連続して算出する場合に便利です。
43
+
44
+ tie = TfIdf::IgoExtension.new(dir)
45
+ tie.tfidf('この文章を形態素解析し、TFIDF値を取得する').each_pair { |k, v|
46
+ puts "#{k}=>#{v}"
47
+ }
48
+ # =>
49
+ 解析=>7.33823815006559
50
+ 値=>7.61579107203583
51
+ TFIDF=>13.3689578610795
52
+ 形態素=>13.0477195694085
53
+ 文章=>7.2152399787301
54
+ 取得=>7.24992553671799
55
+
56
+ # インスタンスを使い回し
57
+ tie.tfidf('インスタンスを使い回し、再度TFIDF値を取得する').each_pair { |k, v|
58
+ puts "#{k}=>#{v}"
59
+ }
60
+ # =>
61
+ 解析=>7.33823815006559
62
+ 値=>15.2315821440717 # 両方のテキストに出現する形態素のTFIDFは大きくなる
63
+ TFIDF=>26.737915722159 # 両方のテキストに出現する形態素のTFIDFは大きくなる
64
+ 形態素=>13.0477195694085
65
+ 文章=>7.2152399787301
66
+ インスタンス=>11.7873551106461 # 両方のテキストに出現する形態素のTFIDFは大きくなる
67
+ 取得=>14.499851073436 # 両方のテキストに出現する形態素のTFIDFは大きくなる
68
+
69
+ リセットする場合はresetメソッドを使用します。
70
+
71
+ # resetメソッドでリセット
72
+ tie.reset
73
+ tie.tfidf('インスタンスを使い回し、再度TFIDF値を取得する').each_pair { |k, v|
74
+ puts "#{k}=>#{v}"
75
+ }
76
+ # =>
77
+ 値=>7.61579107203583
78
+ TFIDF=>13.3689578610795
79
+ インスタンス=>11.7873551106461
80
+ 取得=>7.24992553671799
81
+
82
+ == 付録
83
+ === 公開場所
84
+
85
+ * {RubyGems}[https://rubygems.org/gems/tfidf_ja]
86
+ * {ソースコード}[https://github.com/kyow/tfidf_ja]
14
87
 
15
88
  == Copyright
16
89
 
data/Rakefile CHANGED
@@ -62,4 +62,6 @@ Rake::RDocTask.new do |rdoc|
62
62
  rdoc.title = "tfidf_ja #{version}"
63
63
  rdoc.rdoc_files.include('README*')
64
64
  rdoc.rdoc_files.include('lib/**/*.rb')
65
+
66
+ rdoc.options << '-c UTF-8' << '-S' << '-U'
65
67
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/lib/dictionary.rb CHANGED
@@ -1,39 +1,60 @@
1
1
  # coding: utf-8
2
2
  #
3
- #Copyright:: Copyright (c) kyow, 2010
4
- #Authors:: K.Nishi
3
+ # Copyright:: Copyright (c) kyow, 2010
4
+ # Authors:: K.Nishi
5
5
 
6
- #
7
- #
8
- #
9
6
  module TfIdf
7
+ #
8
+ # 辞書基底クラス
9
+ #
10
10
  class Dictionary
11
+ # コンストラクタ
11
12
  def initialize
12
13
  @map = {}
13
14
  end
14
-
15
+
16
+ # 辞書にkeyとvalueを設定する
17
+ # k:: key
18
+ # v:: value
15
19
  def set(k, v)
16
20
  @map[k] = v
17
21
  end
18
-
22
+
23
+ # keyからvalueを取得する
24
+ # k:: key
25
+ # return:: value
19
26
  def get(k)
20
27
  return @map[k]
21
28
  end
22
29
 
30
+ # 辞書全体を返却する
31
+ # value:: ハッシュテーブル
23
32
  def all
24
33
  return @map
25
34
  end
26
-
35
+
36
+ # keyが存在するか検査する
37
+ # k:: 検査するkey
38
+ # return:: true=存在する faluse=存在しない
27
39
  def exists?(k)
28
40
  return @map.key?(k)
29
41
  end
30
42
  end
31
43
 
44
+ #
45
+ # DF辞書クラス
46
+ #
32
47
  class DFs < Dictionary
33
48
  end
34
-
49
+
50
+ #
51
+ # IDF辞書クラス
52
+ #
35
53
  class IDFs < Dictionary
54
+ # 収録形態素数
36
55
  attr_accessor :size
56
+
57
+ # 平均IDF値
37
58
  attr_accessor :average
38
59
  end
39
60
  end
@@ -1,34 +1,32 @@
1
1
  # coding: utf-8
2
2
  #
3
- #Copyright:: Copyright (c) kyow, 2011
4
- #Authors:: K.Nishi
3
+ # Copyright:: Copyright (c) kyow, 2011
4
+ # Authors:: K.Nishi
5
5
 
6
6
  $:.unshift(File.dirname(__FILE__))
7
7
 
8
8
  require 'rubygems'
9
9
  require 'igo-ruby'
10
10
 
11
- #
12
- #
13
- #
14
11
  module TfIdf
15
12
  #
16
- #
13
+ # 形態素解析に{igo-ruby}[https://rubygems.org/gems/igo-ruby]を使用するための拡張クラス
17
14
  #
18
15
  class IgoExtension
19
16
  # コンストラクタ
20
17
  def initialize(dir)
21
- # dir = File::expand_path(dir)
22
18
  @tagger = Igo::Tagger.new(dir)
23
19
  @tfidf = TfIdf::Ja.new
24
20
  end
25
21
 
22
+ # インスタンスのリセット
26
23
  def reset
27
24
  @tfidf.reset
28
25
  end
29
26
 
30
27
  # igo-rubyを利用して形態素解析を行ない、その結果のTF-IDFを返却する
31
- #text:: テキスト
28
+ # text:: 形態素解析を行なうテキスト
29
+ # return:: key=形態素、value=TF-IDFのハッシュテーブル
32
30
  def tfidf(text)
33
31
  t = @tagger.parse(text)
34
32
  words = []
data/lib/tfidf_ja.rb CHANGED
@@ -1,18 +1,15 @@
1
1
  # coding: utf-8
2
2
  #
3
- #Copyright:: Copyright (c) kyow, 2011
4
- #Authors:: K.Nishi
3
+ # Copyright:: Copyright (c) kyow, 2011
4
+ # Authors:: K.Nishi
5
5
 
6
6
  $:.unshift(File.dirname(__FILE__))
7
7
 
8
8
  require 'dictionary'
9
9
 
10
- #
11
- #
12
- #
13
10
  module TfIdf
14
11
  #
15
- #
12
+ # 日本語辞書を使用してTFIDFを算出するクラス
16
13
  #
17
14
  class Ja
18
15
  # コンストラクタ
@@ -21,13 +18,14 @@ module TfIdf
21
18
  reset
22
19
  end
23
20
 
21
+ # インスタンスのリセット
24
22
  def reset
25
23
  @tfs = {}
26
24
  end
27
25
 
28
- #
29
- #words:: 形態素配列
30
- #::
26
+ # TF-IDFを算出する
27
+ # words:: 形態素配列
28
+ # return:: key = 形態素、value = TF-IDF値のハッシュテーブル
31
29
  def tfidf(words)
32
30
  tfidfs = {}
33
31
  set_tf_map(words)
@@ -37,6 +35,9 @@ module TfIdf
37
35
  return tfidfs
38
36
  end
39
37
 
38
+ # IDFを取得する
39
+ # word:: 形態素
40
+ # return:: IDF
40
41
  def idf(word)
41
42
  idf = @idfs.get(word)
42
43
  if(idf.nil?)
data/lib/utility.rb CHANGED
@@ -1,20 +1,19 @@
1
1
  # coding: utf-8
2
2
  #
3
- #Copyright:: Copyright (c) kyow, 2011
4
- #Authors:: K.Nishi
3
+ # Copyright:: Copyright (c) kyow, 2011
4
+ # Authors:: K.Nishi
5
5
 
6
6
  $:.unshift(File.dirname(__FILE__))
7
7
  require 'dictionary'
8
8
 
9
- #
10
- #
11
- #
12
9
  module TfIdf
13
10
  #
14
- # ユーティリティ
11
+ # ユーティリティクラス
15
12
  #
16
13
  class Utility
17
- N = 20000000000
14
+ # (仮の)インデックス数
15
+ N = 20000000000
16
+
18
17
  # df.dicからidf.dicを生成する
19
18
  def self.create_dic
20
19
  dfs = self.df_load()
@@ -24,12 +23,17 @@ module TfIdf
24
23
  puts "size=#{idfs.size} average=#{idfs.average}"
25
24
  end
26
25
 
26
+ # DF値からiDF値を取得する
27
+ # IDF = log(N / DF)
28
+ # df_value:: DF値
27
29
  def self.get_inverse(df_value)
28
30
  return df_value > 0 ? Math::log(N / df_value) : 0
29
31
  end
30
32
 
31
33
  private
32
34
 
35
+ # DFsオブジェクトからIDFsオブジェクトを生成する
36
+ # dfs:: DFsオブジェクト
33
37
  def self.create_idf(dfs)
34
38
  idfs = IDFs.new
35
39
  total = 0
@@ -43,6 +47,7 @@ module TfIdf
43
47
  return idfs
44
48
  end
45
49
 
50
+ # df.dicを読み込む
46
51
  def self.df_load()
47
52
  df_dic = File.dirname(__FILE__) + '/../dic/df.dic'
48
53
  unless File::exists?(df_dic)
@@ -53,6 +58,7 @@ module TfIdf
53
58
  }
54
59
  end
55
60
 
61
+ # idf.dicを保存する
56
62
  def self.idf_save(idfs)
57
63
  idf_dic = File.dirname(__FILE__) + '/../dic/idf.dic'
58
64
  File::open(idf_dic, 'wb') { |f|
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tfidf_ja
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - K.Nishi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-08 00:00:00 +09:00
18
+ date: 2011-01-11 00:00:00 +09:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency