simhash 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'rake'
2
2
  require 'rake/testtask'
3
3
  require 'rake/rdoctask'
4
- require 'rake/extensiontask'
5
4
 
6
5
  $LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
7
6
  require 'simhash'
@@ -9,11 +8,9 @@ require 'simhash'
9
8
  desc 'Default: run unit tests.'
10
9
  task :default => [:test]
11
10
 
12
- Rake::ExtensionTask.new('string_hashing')
13
-
14
11
  desc 'Test the simhash gem'
15
12
  Rake::TestTask.new(:test) do |t|
16
- t.libs << 'lib'
13
+ t.libs << '.'
17
14
  t.pattern = 'test/**/*_test.rb'
18
15
  t.verbose = true
19
16
  end
@@ -37,7 +37,7 @@ if RUBY_PLATFORM.include?( 'darwin' )
37
37
  end
38
38
  end
39
39
 
40
- if find_header("gmp.h")
40
+ if (find_header("gmp.h") rescue false)
41
41
  $stderr.puts "Configuring extensions"
42
42
  dir_config(extension_name)
43
43
  create_makefile(extension_name)
@@ -19,14 +19,14 @@ VALUE method_hash_vl(VALUE self, VALUE bitlength) {
19
19
  unsigned char one_char;
20
20
  char* result;
21
21
  result = malloc(bl*sizeof(char));
22
- unsigned long long len = RSTRING(self)->len;
23
- char *string = RSTRING(self)->ptr;
22
+ unsigned long long len = RSTRING_LEN(self);
23
+ char *string = RSTRING_PTR(self);
24
24
 
25
- if(len == 0){ return 0; }
25
+ if(len == 0){ return 0; }
26
26
 
27
- mpz_t x, mask, long_len;
27
+ mpz_t x, mask, long_len;
28
28
  mpz_init_set_ui (long_len, len);
29
- one_char = RSTRING(self)->ptr[0];
29
+ one_char = RSTRING_PTR(self)[0];
30
30
  mpz_init_set_ui (x, one_char << 7);
31
31
  int m = 1000003;
32
32
 
@@ -47,8 +47,9 @@ VALUE method_hash_vl(VALUE self, VALUE bitlength) {
47
47
  mpz_xor(computations, computations, byte);
48
48
  mpz_and (x, mask, computations);
49
49
  }
50
-
50
+
51
51
  mpz_xor(x, x, long_len);
52
+ //gmp_printf ("C xored x is %Zd\n", x);
52
53
  mpz_get_str (result, 10, x);
53
54
  VALUE res = rb_str_new2(result);
54
55
 
@@ -59,5 +60,5 @@ VALUE method_hash_vl(VALUE self, VALUE bitlength) {
59
60
  mpz_clear(long_len);
60
61
  free(result);
61
62
 
62
- return res;
63
+ return res;
63
64
  }
data/lib/simhash.rb CHANGED
@@ -1,4 +1,4 @@
1
- $KCODE = 'u'
1
+ # encoding: utf-8
2
2
 
3
3
  require 'active_support/core_ext/string/multibyte'
4
4
  require 'unicode'
@@ -12,9 +12,10 @@ begin
12
12
  rescue LoadError
13
13
  end
14
14
 
15
-
16
15
  module Simhash
17
16
  DEFAULT_STRING_HASH_METHOD = String.public_instance_methods.include?("hash_vl") ? :hash_vl : :hash_vl_rb
17
+ PUNCTUATION_REGEXP = /(\s|\d|\W|\302\240| *— *|[«»…\-–—]| )+/u
18
+
18
19
 
19
20
  def self.hash(tokens, options={})
20
21
  hashbits = options[:hashbits] || 64
@@ -43,7 +44,7 @@ module Simhash
43
44
  stop_sentenses = options[:stop_sentenses]
44
45
  tokens.each do |token|
45
46
  # cutting punctuation (\302\240 is unbreakable space)
46
- token = token.gsub(/(\s|\d|\W|\302\240| *— *|[«»\…\-\–\—]| )+/u,' ') if !options[:preserve_punctuation]
47
+ token = token.gsub(PUNCTUATION_REGEXP, ' ') if !options[:preserve_punctuation]
47
48
 
48
49
  token = Unicode::downcase(token.strip)
49
50
 
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  module Simhash
2
3
  module Stopwords
3
4
  RU = " а е и ж м о на не ни об но он мне мои мож она они оно мной много многочисленное многочисленная многочисленные многочисленный мною мой мог могут можно может можхо мор моя моё мочь над нее оба нам нем нами ними мимо немного одной одного менее однажды однако меня нему меньше ней наверху него ниже мало надо один одиннадцать одиннадцатый назад наиболее недавно миллионов недалеко между низко меля нельзя нибудь непрерывно наконец никогда никуда нас наш нет нею неё них мира наша наше наши ничего начала нередко несколько обычно опять около мы ну нх от отовсюду особенно нужно очень отсюда в во вон вниз внизу вокруг вот восемнадцать восемнадцатый восемь восьмой вверх вам вами важное важная важные важный вдали везде ведь вас ваш ваша ваше ваши впрочем весь вдруг вы все второй всем всеми времени время всему всего всегда всех всею всю вся всё всюду г год говорил говорит года году где да ее за из ли же им до по ими под иногда довольно именно долго позже более должно пожалуйста значит иметь больше пока ему имя пор пора потом потому после почему почти посреди ей два две двенадцать двенадцатый двадцать двадцатый двух его дел или без день занят занята занято заняты действительно давно девятнадцать девятнадцатый девять девятый даже алло жизнь далеко близко здесь дальше для лет зато даром первый перед затем зачем лишь десять десятый ею её их бы еще при был про процентов против просто бывает бывь если люди была были было будем будет будете будешь прекрасно буду будь будто будут ещё пятнадцать пятнадцатый друго другое другой другие другая других есть пять быть лучше пятый к ком конечно кому кого когда которой которого которая которые который которых кем каждое каждая каждые каждый кажется как какой какая кто кроме куда кругом с т у я та те уж со то том снова тому совсем того тогда тоже собой тобой собою тобою сначала только уметь тот тою хорошо хотеть хочешь хоть хотя свое свои твой своей своего своих свою твоя твоё раз уже сам там тем чем сама сами теми само рано самом самому самой самого семнадцать семнадцатый самим самими самих саму семь чему раньше сейчас чего сегодня себе тебе сеаой человек разве теперь себя тебя седьмой спасибо слишком так такое такой такие также такая сих тех чаще четвертый через часто шестой шестнадцать шестнадцатый шесть четыре четырнадцать четырнадцатый сколько сказал сказала сказать ту ты три эта эти что это чтоб этом этому этой этого чтобы этот стал туда этим этими рядом тринадцать тринадцатый этих третий тут эту суть чуть тысяч "
data/lib/string.rb CHANGED
@@ -7,12 +7,12 @@ class String
7
7
  def hash_vl_rb(length)
8
8
  return 0 if self == ""
9
9
 
10
- x = self[0] << 7
10
+ x = self.bytes.first << 7
11
11
  m = 1000003
12
12
  mask = (1<<length) - 1
13
- self.each_byte{ |char| x = ((x * m) ^ char) & mask }
14
-
15
- x ^= self.size
13
+ self.each_byte{ |char| x = ((x * m) ^ char.to_i) & mask }
14
+
15
+ x ^= self.bytes.count
16
16
  x = -2 if x == -1
17
17
  x
18
18
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simhash
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
5
- prerelease: false
4
+ hash: 31
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alex Gusev
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-20 00:00:00 +03:00
18
+ date: 2011-04-06 00:00:00 +04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  requirements: []
99
99
 
100
100
  rubyforge_project: simhash
101
- rubygems_version: 1.3.7
101
+ rubygems_version: 1.6.2
102
102
  signing_key:
103
103
  specification_version: 3
104
104
  summary: "Gives you possbility to convert string into simhashes to futher use: finding near-duplicates, similar strings, etc."