dejunk 0.5.0 → 0.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1ab7cd51156a993d232efbc68bfeb4ea1657f0e112878a4d03ae8963122d359
4
- data.tar.gz: 456178beb94060ea3589c5917ee978aa9e96f6534eeb2db97d97fab05175e823
3
+ metadata.gz: 06c7eece281db7bb6218b0f3a56da9541a5830f8b7d0e739daf08b6d9f6b004d
4
+ data.tar.gz: b2dc0dd0f457164085eb19e418f75db4bca6d7cb0a315fa1e5bc0f9fad2ac3aa
5
5
  SHA512:
6
- metadata.gz: 122869629a43aa3885a942a63b76536eac52fbe0c83a311921feee498987b99e591d9c42c496c2129ec718c37e0c2b753eff562a4a707375ea49375c5038ec73
7
- data.tar.gz: cfd3126d2d94102ca27c28f36d5543c39c0629a7717b2c13a35d4588e487bb8103471661b6dbf418839ed8c19392a235aa259f2dd3a382d72c603d08aa6ce384
6
+ metadata.gz: 367bf74302776bf03dbef89b2f5aad58c5f446511b30ae2cfc765372b86a9600ef9e2faf7d4b639629938ebfc59dd9c7d2a1720564dcfd94aeedd05235b023cb
7
+ data.tar.gz: a47f13d1b05d25641329ac4ed963288096e84a30186a16789facef75ecb5709137987d65b7cf727b935c71a16f01481b39b50e46bae8154cdd5ea28843ac1b3c
@@ -0,0 +1,15 @@
1
+ name: build
2
+
3
+ on:
4
+ push:
5
+
6
+ jobs:
7
+ build:
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v7
11
+ - uses: ruby/setup-ruby@v1
12
+ with:
13
+ ruby-version: .tool-versions
14
+ bundler-cache: true
15
+ - run: bundle exec rspec
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 4.0.5
data/dejunk.gemspec CHANGED
@@ -6,7 +6,7 @@ require 'dejunk/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "dejunk"
8
8
  spec.version = Dejunk::VERSION
9
- spec.required_ruby_version = '>= 2.3'
9
+ spec.required_ruby_version = '>= 3.3'
10
10
  spec.authors = ["David Judd"]
11
11
  spec.email = ["david@academia.edu"]
12
12
 
@@ -20,7 +20,6 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'activesupport'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 2.0"
24
- spec.add_development_dependency "rake", "~> 12.3.3"
23
+ spec.add_development_dependency "rake"
25
24
  spec.add_development_dependency "rspec"
26
25
  end
@@ -1,3 +1,3 @@
1
1
  module Dejunk
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.1"
3
3
  end
data/lib/dejunk.rb CHANGED
@@ -1,6 +1,8 @@
1
- require "dejunk/version"
2
- require "yaml"
1
+ require "active_support/core_ext/object/blank"
3
2
  require "active_support/core_ext/string"
3
+ require "yaml"
4
+
5
+ require "dejunk/version"
4
6
 
5
7
  module Dejunk
6
8
  extend self
@@ -113,7 +115,7 @@ module Dejunk
113
115
  string.
114
116
  chars.
115
117
  zip(string.chars[1..-1]).
116
- map { |c1,c2| "#{c1.mb_chars.downcase}#{c2.mb_chars.downcase}" if c1 && c2 }.
118
+ map { |c1,c2| "#{c1.downcase}#{c2.downcase}" if c1 && c2 }.
117
119
  compact.
118
120
  map { |bigram| bigram.gsub(/[0-9]/, '0'.freeze) }.
119
121
  map { |bigram| bigram.gsub(/[[:space:]]/, ' '.freeze) }
@@ -130,22 +132,25 @@ module Dejunk
130
132
 
131
133
  return 0 unless bigrams.present?
132
134
 
133
- prob_bigrams_given_mashing = bigrams.
134
- map { |bigram| BigDecimal(mashing_probability(bigram).to_s) }.
135
- inject(&:*)
136
-
137
- prob_bigrams_given_corpus = bigrams.
138
- map { |bigram| BigDecimal(corpus_probability(bigram).to_s) }.
139
- inject(&:*)
135
+ # Work in log space because the raw products of per-bigram probabilities
136
+ # underflow Float.
137
+ log_prob_given_mashing = bigrams.sum { |bigram| Math.log(mashing_probability(bigram)) }
138
+ log_prob_given_corpus = bigrams.sum { |bigram| Math.log(corpus_probability(bigram)) }
140
139
 
141
- numerator = prob_bigrams_given_mashing * apriori_probability_of_mashing
140
+ # Equivalent to mashing / (mashing + corpus), with the priors applied.
141
+ log_odds_ratio = log_prob_given_corpus + Math.log(1 - apriori_probability_of_mashing) -
142
+ log_prob_given_mashing - Math.log(apriori_probability_of_mashing)
142
143
 
143
- numerator / (numerator + prob_bigrams_given_corpus * (1 - apriori_probability_of_mashing))
144
+ 1.0 / (1.0 + Math.exp(log_odds_ratio))
144
145
  end
145
146
 
146
147
  def normalize_for_comparison(string)
148
+ # This mirrors what mb_chars did, assuming that non-UTF-8 encoded strings
149
+ # are actually UTF-8 in disguise. It's unclear whether this is necessary,
150
+ # but we left it in to avoid having to figure this out.
151
+ string = string.dup.force_encoding(Encoding::UTF_8) if string.encoding != Encoding::UTF_8
152
+
147
153
  string.
148
- mb_chars.
149
154
  unicode_normalize(:nfkd).
150
155
  gsub(/\p{Mn}+/, ''.freeze).
151
156
  gsub(/[^[:alnum:]]+/, ''.freeze).
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dejunk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Judd
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2022-06-01 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -24,34 +23,20 @@ dependencies:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '2.0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '2.0'
41
26
  - !ruby/object:Gem::Dependency
42
27
  name: rake
43
28
  requirement: !ruby/object:Gem::Requirement
44
29
  requirements:
45
- - - "~>"
30
+ - - ">="
46
31
  - !ruby/object:Gem::Version
47
- version: 12.3.3
32
+ version: '0'
48
33
  type: :development
49
34
  prerelease: false
50
35
  version_requirements: !ruby/object:Gem::Requirement
51
36
  requirements:
52
- - - "~>"
37
+ - - ">="
53
38
  - !ruby/object:Gem::Version
54
- version: 12.3.3
39
+ version: '0'
55
40
  - !ruby/object:Gem::Dependency
56
41
  name: rspec
57
42
  requirement: !ruby/object:Gem::Requirement
@@ -66,16 +51,16 @@ dependencies:
66
51
  - - ">="
67
52
  - !ruby/object:Gem::Version
68
53
  version: '0'
69
- description:
70
54
  email:
71
55
  - david@academia.edu
72
56
  executables: []
73
57
  extensions: []
74
58
  extra_rdoc_files: []
75
59
  files:
76
- - ".circleci/config.yml"
60
+ - ".github/workflows/build.yml"
77
61
  - ".gitignore"
78
62
  - ".rspec"
63
+ - ".tool-versions"
79
64
  - ".travis.yml"
80
65
  - Gemfile
81
66
  - LICENSE
@@ -90,7 +75,6 @@ files:
90
75
  homepage: https://github.com/academia-edu/dejunk
91
76
  licenses: []
92
77
  metadata: {}
93
- post_install_message:
94
78
  rdoc_options: []
95
79
  require_paths:
96
80
  - lib
@@ -98,15 +82,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
82
  requirements:
99
83
  - - ">="
100
84
  - !ruby/object:Gem::Version
101
- version: '2.3'
85
+ version: '3.3'
102
86
  required_rubygems_version: !ruby/object:Gem::Requirement
103
87
  requirements:
104
88
  - - ">="
105
89
  - !ruby/object:Gem::Version
106
90
  version: '0'
107
91
  requirements: []
108
- rubygems_version: 3.2.33
109
- signing_key:
92
+ rubygems_version: 4.0.10
110
93
  specification_version: 4
111
94
  summary: Detect keyboard mashing and other junk in your data.
112
95
  test_files: []
data/.circleci/config.yml DELETED
@@ -1,19 +0,0 @@
1
- version: 2.1
2
-
3
- orbs:
4
- ruby: circleci/ruby@1.4.0
5
-
6
- jobs:
7
- build:
8
- docker:
9
- - image: cimg/ruby:3.0.1
10
- steps:
11
- - checkout
12
- - ruby/install-deps
13
- - ruby/rspec-test
14
-
15
- workflows:
16
- version: 2
17
- build_and_test:
18
- jobs:
19
- - build