Module: TWFilter::Checks::Wenyan

Defined in:
lib/twfilter/checks/wenyan.rb,
sig/twfilter.rbs

Constant Summary collapse

NAME =

Returns:

  • (::Symbol)
:wenyan

Class Method Summary collapse

Class Method Details

.call(subject) ⇒ ::Array[Finding]

Parameters:

Returns:



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/twfilter/checks/wenyan.rb', line 9

def call(subject)
  policy = subject.policy
  return [] if subject.han < policy.wenyan_min_han

  hits = markers.sum { |char| subject.text.count(char) }
  return [] if hits < policy.wenyan_min_hits

  density = density(subject)
  return [] if density <= policy.wenyan_max_density

  [Finding.new(check: NAME, code: :literary_density, detail: format("%.0f%%", density * 100))]
end

.density(subject) ⇒ ::Float

Parameters:

Returns:

  • (::Float)


22
23
24
25
26
# File 'lib/twfilter/checks/wenyan.rb', line 22

def density(subject)
  return 0.0 if subject.han.zero?

  markers.sum { |char| subject.text.count(char) }.fdiv(subject.han)
end

.markers::Array[::String]

Returns:

  • (::Array[::String])


28
# File 'lib/twfilter/checks/wenyan.rb', line 28

def markers = Tables.rows("wenyan.txt")