Sha256: 12693cecd9a96bb07c28a8212ab226156f25df2f22535c997ea209df76bfa811

Contents?: true

Size: 1.4 KB

Versions: 1

Compression:

Stored size: 1.4 KB

Contents

# coding: utf-8
# frozen_string_literal: true

module ChemScanner
  # Interpreter of extracted/scanned information
  module Interpreter
    using Extension

    module PostProcess
      def refine_text_as_molecule
        key_to_delete = []

        @text_map.each do |k, text|
          mol = @mol_map.values.detect { |m| m.text_ids.include?(k) }
          next if mol.nil?

          smi = ChemScanner.get_abbreviation(text.value)
          next if smi.empty?

          group_pos = {}
          @reactions.each do |reaction|
            rid = reaction.arrow_id
            arrow = @arrow_map[rid]
            group = detect_position(arrow, text.polygon)
            next if group.nil?

            group_pos[rid] = group
          end

          pos = group_pos.detect { |_, p| p == "reagents" }
          next unless pos.nil?

          pos = group_pos.detect { |_, p| %w[reactants products].include?(p) }
          next if pos.nil?

          puts "group: #{group_pos}"
          key_to_delete.push(k)
          mol.text_ids.delete(k)
          @mol_map[k] = Molecule.new_from_smiles(k, smi)

          pos = group_pos.first
          reaction = @reactions.detect { |r| r.arrow_id == pos[0] }
          group_ids = reaction.send("#{pos[1][0...-1]}_ids")
          group_ids.push(k)
        end

        # Don't need to keep it text_map anymore
        key_to_delete.each { |k| @text_map.delete(k) }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chem_scanner-0.1.3 lib/chem_scanner/interpreter/post_process/text_as_molecule.rb