patinfo2csv 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ === 1.0.0 / 22.03.2012
2
+
3
+ * Initial commit for patinfo2csv
data/Manifest.txt ADDED
@@ -0,0 +1,9 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/patinfo2csv
6
+ lib/patinfo2csv.rb
7
+ lib/patinfo2csv/cli.rb
8
+ lib/patinfo2csv/converter.rb
9
+ lib/version.rb
data/README.txt ADDED
@@ -0,0 +1,32 @@
1
+ = Patinfo2csv
2
+
3
+ * http://scm.ywesee.com/?p=patinfo2csv/.git;a=summary
4
+
5
+ == Description
6
+
7
+ Patinfo2csv extracts and converts patinfo.yaml to patinfo.csv;
8
+ only 4 chapters(de, text) in patinfo.yaml are extracted.
9
+
10
+ * effects
11
+ * contra_indications
12
+ * pregnancy
13
+ * usage
14
+ * composition
15
+
16
+ You can specify the pharmacode, see `patinfo2csv --help`
17
+
18
+ == Usage
19
+
20
+ $ patinfo2csv --help
21
+ Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input pharmacode.txt>
22
+ -v, --version Show version
23
+ -h, --help Print this help message
24
+
25
+ == Requirements
26
+
27
+ * slop gem
28
+
29
+ == Install
30
+
31
+ * sudo gem install slop
32
+ * sudo gem install patinfo2csv
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+
6
+ Hoe.spec 'patinfo2csv' do
7
+ developer('Yasuhiro Asaka, Zeno R.R. Davatz', 'yasaka@ywesee.com, zdavatz@ywesee.com')
8
+ end
data/bin/patinfo2csv ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'slop'
5
+ require 'pathname'
6
+
7
+ LANGUAGE = [
8
+ 'de',
9
+ 'fr'
10
+ ]
11
+
12
+ argv = ARGV.dup
13
+ opts = Slop.parse! argv, :help => true do
14
+ banner "Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input pharmacode.txt> [-l (de|fr)]"
15
+ on :v, :version, 'Show version'
16
+ on :l, :lang, 'Language option (de|fr) default de', :argument => true
17
+ end
18
+
19
+ if opts[:lang]
20
+ lang = opts.options[:lang].argument_value.downcase
21
+ argv.delete(lang)
22
+ else
23
+ lang = "de"
24
+ end
25
+
26
+ if argv.empty? \
27
+ or !argv.length.eql? 3 \
28
+ or !File.exist?(argv[0]) \
29
+ or !File.exist?(argv[2]) \
30
+ or !LANGUAGE.include?(lang)
31
+ puts opts.banner
32
+ exit
33
+ end
34
+
35
+ root = Pathname.new(__FILE__).realpath.parent.parent
36
+ $:.unshift root.join('lib') if $0 == __FILE__
37
+
38
+ if opts.version? then
39
+ require 'patinfo2csv/version'
40
+ puts "patinfo2csv " + Patinfo2csv::VERSION + "\n"
41
+ exit
42
+ end
43
+
44
+ require 'patinfo2csv'
45
+ Patinfo2csv::CLI.run(argv[0], argv[2], argv[1], lang)
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'yaml'
5
+ require 'patinfo2csv'
6
+
7
+ module Patinfo2csv
8
+ class CLI
9
+ class << self
10
+ # Param:: patinfo.yaml
11
+ # Param:: pharmacode.txt
12
+ # Param:: patinfo.csv
13
+ def run(patinfo, pharmacode, output, lang)
14
+ cv = Patinfo2csv::Converter.new()
15
+ cv.lang = lang
16
+ cv.patinfo = self.load_yaml(patinfo)
17
+ cv.pharmacode = self.parse_txt(pharmacode)
18
+ rows = cv.to_csv
19
+ self.output_rows(rows, output)
20
+ report(rows, cv.pharmacode, lang)
21
+ end
22
+ def load_yaml(patinfo)
23
+ # before yaml loading, replace escaped chars
24
+ file = ''
25
+ File.open(patinfo, "r:ascii:utf-8") { |f|
26
+ while line = f.gets
27
+ ESCAPED_STR_CODE_MAP.each do |code, char|
28
+ line.gsub!(code, char)
29
+ end
30
+ file << line
31
+ end
32
+ }
33
+ fh = StringIO.new file
34
+ YAML.load_documents(fh) # utf-8
35
+ end
36
+ def parse_txt(pharmacode)
37
+ codes = []
38
+ File.open(pharmacode, "r:utf-8") do |input|
39
+ while line=input.gets
40
+ codes << line.gsub(/[^\d]/, '').chomp
41
+ end
42
+ end
43
+ codes
44
+ end
45
+ def output_rows(rows, output)
46
+ return unless rows
47
+ open(output, "w:utf-8") do |out|
48
+ rows.each do |row|
49
+ out.print row, "\n"
50
+ end
51
+ end
52
+ end
53
+ def report(rows, nomatches, lang)
54
+ puts "patinfo[#{lang}] converted: #{(rows.length - 1 ).to_s} rows"
55
+ unless nomatches.empty?
56
+ puts "-----"
57
+ puts "There is no chapters of Patinfo of the following " \
58
+ "#{nomatches.length.to_s} codes"
59
+ puts "[#{nomatches.join(',')}]"
60
+ puts
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ module Patinfo2csv
5
+ class Converter
6
+ attr_accessor :patinfo, :pharmacode, :lang
7
+ attr_reader :rows
8
+ CHAPTERS = [
9
+ :effects,
10
+ :contra_indications,
11
+ :pregnancy,
12
+ :usage,
13
+ :composition
14
+ ]
15
+ DELIMITER = ';'
16
+ def initialize
17
+ @lang = "de"
18
+ @patinfo = []
19
+ @pharmacode = []
20
+ @rows = []
21
+ end
22
+ def to_csv
23
+ data = []
24
+ @patinfo.each_with_index do |row, index|
25
+ target = []
26
+ next if row['article_codes'].nil?
27
+ row['article_codes'].each do |code|
28
+ if @pharmacode.include?(code[:article_pcode])
29
+ target << code[:article_pcode]
30
+ @pharmacode.delete(code[:article_pcode])
31
+ end
32
+ end
33
+ next if target.empty?
34
+ chapters = extract_chapters(row)
35
+ next if chapters.empty?
36
+ target.each do |pcode|
37
+ @rows << [%Q!"#{pcode}"!, chapters].flatten.join(DELIMITER)
38
+ end
39
+ end
40
+ unless @rows.empty? #header
41
+ @rows.unshift([
42
+ "Pharmacode",
43
+ "Effects",
44
+ "Contra Indication",
45
+ "Pregnancy",
46
+ "Usage",
47
+ "Composition"
48
+ ].join(DELIMITER))
49
+ end
50
+ return @rows
51
+ end
52
+ def extract_chapters(row)
53
+ return nil if row['descriptions'][@lang].empty?
54
+ desc = row['descriptions'][@lang]
55
+ chapters = []
56
+ CHAPTERS.each do |chapter|
57
+ if (desc.has_key?(chapter.to_s) and !desc[chapter.to_s].nil?) and
58
+ !desc[chapter.to_s]['sections'].nil?
59
+ text = ''
60
+ desc[chapter.to_s]['sections'].each do |section|
61
+ text << section['subheading']
62
+ if section.has_key?('paragraphs')
63
+ section['paragraphs'].each do |paragraph|
64
+ unless paragraph['text'].empty?
65
+ text << paragraph['text'].gsub(/\r\n|\r/, "\n") + "\n"
66
+ end
67
+ end
68
+ end
69
+ text << "\n"
70
+ end
71
+ else
72
+ text = "" #empty
73
+ end
74
+ chapters << %Q!"#{text.chomp}"!
75
+ end
76
+ chapters.join(DELIMITER)
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ require 'patinfo2csv/version'
5
+ require 'patinfo2csv/cli'
6
+ require 'patinfo2csv/converter'
7
+
8
+ module Patinfo2csv
9
+ # FIXME
10
+ # escaped backslash and utf-8 code map
11
+ # for patinfo.yaml(ASII)
12
+ ESCAPED_STR_CODE_MAP = {
13
+ "\\x24" => "$",
14
+ "\\x25" => "%",
15
+ "\\x26" => "&",
16
+ "\\x2D" => "-",
17
+ "\\x5F" => "_",
18
+ "\\xC2\\xA0" => " ",
19
+ "\\xC2\\xAB" => "«",
20
+ "\\xC2\\xBB" => "»",
21
+ "\\xC2\\xAE" => "®",
22
+ "\\xC2\\xA9" => "©",
23
+ "\\xC2\\xB5" => "µ",
24
+ "\\xC2\\xBD" => "½",
25
+ "\\xC2\\xBC" => "¼",
26
+ "\\xC2\\xBE" => "¾",
27
+ "\\xC3\\x82" => "Â",
28
+ "\\xC3\\x83" => "Ã",
29
+ "\\xC3\\x84" => "Ä",
30
+ "\\xC3\\x85" => "Å",
31
+ "\\xC3\\x86" => "Æ",
32
+ "\\xC3\\x87" => "Ç",
33
+ "\\xC3\\x88" => "È",
34
+ "\\xC3\\x89" => "É",
35
+ "\\xC3\\x8A" => "Ê",
36
+ "\\xC3\\x8B" => "Ë",
37
+ "\\xC3\\x8C" => "Ì",
38
+ "\\xC3\\x8D" => "Í",
39
+ "\\xC3\\x8E" => "Î",
40
+ "\\xC3\\x8F" => "Ï",
41
+ "\\xC3\\x90" => "Ð",
42
+ "\\xC3\\x91" => "Ñ",
43
+ "\\xC3\\x92" => "Ò",
44
+ "\\xC3\\x93" => "Ó",
45
+ "\\xC3\\x94" => "Ô",
46
+ "\\xC3\\x95" => "Õ",
47
+ "\\xC3\\x96" => "Ö",
48
+ "\\xC3\\x97" => "×",
49
+ "\\xC3\\x98" => "Ø",
50
+ "\\xC3\\x99" => "Ù",
51
+ "\\xC3\\x9A" => "Ú",
52
+ "\\xC3\\x9B" => "Û",
53
+ "\\xC3\\x9C" => "Ü",
54
+ "\\xC3\\x9D" => "Ý",
55
+ "\\xC3\\x9E" => "Þ",
56
+ "\\xC3\\x9F" => "ß",
57
+ "\\xC3\\xA0" => "à",
58
+ "\\xC3\\xA1" => "á",
59
+ "\\xC3\\xA2" => "â",
60
+ "\\xC3\\xA3" => "ã",
61
+ "\\xC3\\xA4" => "ä",
62
+ "\\xC3\\xA5" => "å",
63
+ "\\xC3\\xA6" => "æ",
64
+ "\\xC3\\xA7" => "ç",
65
+ "\\xC3\\xA8" => "è",
66
+ "\\xC3\\xA9" => "é",
67
+ "\\xC3\\xAA" => "ê",
68
+ "\\xC3\\xAB" => "ë",
69
+ "\\xC3\\xAC" => "ì",
70
+ "\\xC3\\xAD" => "í",
71
+ "\\xC3\\xAE" => "î",
72
+ "\\xC3\\xAF" => "ï",
73
+ "\\xC3\\xB0" => "ð",
74
+ "\\xC3\\xB1" => "ñ",
75
+ "\\xC3\\xB2" => "ò",
76
+ "\\xC3\\xB3" => "ó",
77
+ "\\xC3\\xB4" => "ô",
78
+ "\\xC3\\xB5" => "õ",
79
+ "\\xC3\\xB6" => "ö",
80
+ "\\xC3\\xB7" => "÷",
81
+ "\\xC3\\xB8" => "ø",
82
+ "\\xC3\\xB9" => "ù",
83
+ "\\xC3\\xBA" => "ú",
84
+ "\\xC3\\xBB" => "û",
85
+ "\\xC3\\xBC" => "ü",
86
+ "\\xC3\\xBD" => "ý",
87
+ "\\xC3\\xBE" => "þ",
88
+ "\\xC3\\xBF" => "ÿ",
89
+ "\\xE2\\x80\\x93" => "–",
90
+ }
91
+ end
data/lib/version.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Patinfo2csv
2
+ VERSION = "1.0.0"
3
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: patinfo2csv
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Yasuhiro Asaka, Zeno R.R. Davatz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-03-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rdoc
16
+ requirement: &25013040 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.10'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *25013040
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ requirement: &25012580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '2.13'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *25012580
36
+ description: ! 'Patinfo2csv extracts and converts patinfo.yaml to patinfo.csv;
37
+
38
+ only 4 chapters(de, text) in patinfo.yaml are extracted.
39
+
40
+
41
+ * effects
42
+
43
+ * contra_indications
44
+
45
+ * pregnancy
46
+
47
+ * usage
48
+
49
+ * composition
50
+
51
+
52
+ You can specify the pharmacode, see `patinfo2csv --help`'
53
+ email:
54
+ - yasaka@ywesee.com, zdavatz@ywesee.com
55
+ executables:
56
+ - patinfo2csv
57
+ extensions: []
58
+ extra_rdoc_files:
59
+ - History.txt
60
+ - Manifest.txt
61
+ - README.txt
62
+ files:
63
+ - History.txt
64
+ - Manifest.txt
65
+ - README.txt
66
+ - Rakefile
67
+ - bin/patinfo2csv
68
+ - lib/patinfo2csv.rb
69
+ - lib/patinfo2csv/cli.rb
70
+ - lib/patinfo2csv/converter.rb
71
+ - lib/version.rb
72
+ homepage: http://scm.ywesee.com/?p=patinfo2csv/.git;a=summary
73
+ licenses: []
74
+ post_install_message:
75
+ rdoc_options:
76
+ - --main
77
+ - README.txt
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project: patinfo2csv
94
+ rubygems_version: 1.8.15
95
+ signing_key:
96
+ specification_version: 3
97
+ summary: Patinfo2csv extracts and converts patinfo.yaml to patinfo.csv; only 4 chapters(de,
98
+ text) in patinfo.yaml are extracted
99
+ test_files: []