Method: Cass::Analysis.run_spec
- Defined in:
- lib/cass/analysis.rb
.run_spec(spec_file = 'default.spec') ⇒ Object
Read and parse the specifications for an analysis, then run the analysis. Only does basic error checking for now…
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/cass/analysis.rb', line 13 def self.run_spec(spec_file='default.spec') # Basic error checking abort("Error: can't find spec file (#{spec_file}).") if !File.exist?(spec_file) load spec_file abort("Error: can't find contrast file (#{CONTRAST_FILE}).") if !File.exist?(CONTRAST_FILE) # Create options hash opts = {} # Ruby 1.9 returns constants as symbols, 1.8.6 uses strings, so standardize consts = Module.constants.map { |c| c.to_s } %w[PARSE_TEXT N_PERM N_BOOT MAX_LINES RECODE CONTEXT_SIZE MIN_PROP STOP_FILE NORMALIZE_WEIGHTS VERBOSE].each { |c| opts[c.downcase] = Module.const_get(c) if consts.include?(c) } if (defined?(VERBOSE) and VERBOSE) puts "\nRunning CASS with the following options:" opts.each { |k,v| puts "\t#{k}: #{v}" } end contrasts = parse_contrasts(CONTRAST_FILE) # Create contrasts puts "\nFound #{contrasts.size} contrasts." if (defined?(VERBOSE) and VERBOSE) # Set targets targets = contrasts.inject([]) { |t, c| t += c.words.flatten }.uniq puts "\nFound #{targets.size} target words." if (defined?(VERBOSE) and VERBOSE) # Read in files and create documents docs = [] FILES.each { |f| abort("Error: can't find input file #{f}.") if !File.exist?(f) puts "\nReading in file #{f}..." text = File.new(f).read docs << Document.new(f.split(/\//)[-1], targets, text, opts) } docs # Load contrasts contrasts = parse_contrasts(CONTRAST_FILE) # Make sure N_PERM is zero if we don't want stats n_perm = STATS ? N_PERM : 0 # One or two-sample test? case TEST_TYPE when 1 docs.each { |d| base = File.basename(d.name, '.txt') puts "\nRunning one-sample analysis on document '#{d.name}'." puts "Generating #{n_perm} bootstraps..." if (defined?(VERBOSE) and VERBOSE) and STATS bootstrap_test(d, contrasts, "#{OUTPUT_ROOT}_#{base}_results.txt", n_perm, opts) p_values("#{OUTPUT_ROOT}_#{base}_results.txt", 'boot', true) if STATS } when 2 abort("Error: in order to run a permutation test, you need to pass exactly two files as input.") if FILES.size != 2 or docs.size != 2 puts "Running two-sample comparison between '#{File.basename(FILES[0])}' and '#{File.basename(FILES[1])}'." if (defined?(VERBOSE) and VERBOSE) puts "Generating #{n_perm} permutations..." if (defined?(VERBOSE) and VERBOSE) and STATS permutation_test(docs[0], docs[1], contrasts, "#{OUTPUT_ROOT}_results.txt", n_perm, opts) p_values("#{OUTPUT_ROOT}_results.txt", 'perm', true) # No other test types implemented for now. else end puts "Done!" end |