Skip to content

Commit bffce75

Browse files
authored
Scrub text before indexing (#2832) (#2833)
refs notch8/hykuup_knapsack#553
1 parent 97bdaed commit bffce75

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

app/indexers/concerns/hyku_indexing.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
##
44
# A mixin for all additional Hyku applicable indexing; both Valkyrie and ActiveFedora friendly.
55
module HykuIndexing
6+
include ScrubText
67
# TODO: Once we've fully moved to Valkyrie, remove the generate_solr_document and move `#to_solr`
78
# to a more conventional method def (e.g. `def to_solr`). However, we need to tap into two
89
# different inheritance paths based on ActiveFedora or Valkyrie
@@ -54,7 +55,7 @@ def extract_text_from_plain_text_files(object)
5455
return [] if members.blank?
5556

5657
text_file_sets = members.select { |fs| fs.file_set? && fs.original_file&.mime_type == 'text/plain' }
57-
text_file_sets.map { |fs| fs.original_file&.content }
58+
text_file_sets.map { |fs| scrub_text(fs.original_file&.content) }
5859
end
5960

6061
def extract_text_from_child_works(object)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# frozen_string_literal: true
2+
3+
## remove non-UTF-8 characters from a text string
4+
module ScrubText
5+
def scrub_text(text)
6+
text.tr("\n", ' ')
7+
.squeeze(' ')
8+
.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
9+
end
10+
end

app/indexers/hyku/indexers/file_set_indexer.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Hyku
44
module Indexers
55
class FileSetIndexer < Hyrax::Indexers::FileSetIndexer
66
include Hyrax::Indexer(:bulkrax_metadata) unless Hyrax.config.flexible?
7+
include ScrubText
78

89
def to_solr
910
return super unless Flipflop.default_pdf_viewer?
@@ -27,9 +28,7 @@ def pdf_text
2728
pdftotext.read
2829
end
2930

30-
text.tr("\n", ' ')
31-
.squeeze(' ')
32-
.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '') # remove non-UTF-8 characters
31+
scrub_text(text)
3332
rescue Errno::ENOENT => e
3433
raise e unless e.message.include?("No such file or directory - pdftotext")
3534
Rails.logger.warn("`pdfinfo' is not installed; unable to extract text from the PDF's content")

0 commit comments

Comments
 (0)