sm-transcript 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/README.txt +138 -118
  2. data/Rakefile +21 -10
  3. data/bin/sm-transcript +0 -0
  4. data/lib/sm_transcript/metadata.rb +25 -0
  5. data/lib/sm_transcript/options.rb +9 -3
  6. data/lib/sm_transcript/runner.rb +6 -0
  7. data/lib/sm_transcript/seg_reader.rb +1 -1
  8. data/lib/sm_transcript/transcript.rb +86 -39
  9. data/lib/sm_transcript/ttml_reader.rb +116 -0
  10. data/lib/sm_transcript/word.rb +6 -4
  11. data/lib/sm_transcript/wrd_reader.rb +5 -4
  12. data/test/results/18.03-2004-L01.align2.wrd +6441 -0
  13. data/test/results/8.01-1999-L01.wrd +5182 -0
  14. data/test/results/801-1stLecture.ttml.xml +757 -0
  15. data/test/results/801-lect01-4730.xml +757 -0
  16. data/test/results/801-lect02-4731.xml +886 -0
  17. data/test/results/801-lect03-4732.xml +818 -0
  18. data/test/results/801-lect04-4733.xml +831 -0
  19. data/test/results/801-lect05-4734.xml +879 -0
  20. data/test/results/801-lect06-4735.xml +822 -0
  21. data/test/results/801-lect07-4736.xml +893 -0
  22. data/test/results/801-lect08-4737.xml +809 -0
  23. data/test/results/801-lect09-4738.xml +807 -0
  24. data/test/results/Audio-Open-The_New_Deal_for_Education.xml +4301 -0
  25. data/test/test_metadatareader.rb +8 -3
  26. data/test/test_options.rb +8 -1
  27. data/test/test_runner.rb +34 -1
  28. data/test/test_transcript.rb +109 -12
  29. data/test/test_ttmlreader.rb +104 -0
  30. data/test/test_wrdreader.rb +24 -9
  31. metadata +47 -148
  32. data/lib/sm_transcript/optparseExample.rb +0 -113
  33. data/lib/sm_transcript/process_csv_files_to_html.rb +0 -58
  34. data/lib/sm_transcript/process_seg_files.rb +0 -21
  35. data/lib/sm_transcript/process_seg_files_to_csv.rb +0 -24
  36. data/lib/sm_transcript/process_seg_files_to_html.rb +0 -31
  37. data/lib/sm_transcript/require_relative.rb +0 -14
  38. data/test/transcripts/GardnerRileyInterview.t1.html +0 -247
  39. data/test/transcripts/IIHS_Diane_Davis_Nov2009-t1.html +0 -148
  40. data/test/transcripts/NERCOMP-SpokenMedia4.t1.html +0 -2178
  41. data/test/transcripts/data.js +0 -24
  42. data/test/transcripts/vijay_kumar-1.-t1.html +0 -557
  43. data/test/transcripts/vijay_kumar-1.t1.html +0 -558
  44. data/test/transcripts/vijay_kumar-t1.html +0 -558
  45. data/test/transcripts/vijay_kumar-t1.ttml +0 -570
  46. data/test/transcripts/vijay_kumar.data.js +0 -2
  47. data/test/transcripts/vijay_kumar.t1.html +0 -557
  48. data/test/transcripts/wirehair-beetle.data.js +0 -24
@@ -1,113 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'optparse'
5
- require 'optparse/time'
6
- require 'ostruct'
7
- require 'pp'
8
-
9
- class OptparseExample
10
-
11
- CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
12
- CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
13
-
14
- #
15
- # Return a structure describing the options.
16
- #
17
- def self.parse(args)
18
- # The options specified on the command line will be collected in *options*.
19
- # We set default values here.
20
- options = OpenStruct.new
21
- options.library = []
22
- options.inplace = false
23
- options.encoding = "utf8"
24
- options.transfer_type = :auto
25
- options.verbose = false
26
-
27
- opts = OptionParser.new do |opts|
28
- opts.banner = "Usage: example.rb [options]"
29
-
30
- opts.separator ""
31
- opts.separator "Specific options:"
32
-
33
- # Mandatory argument.
34
- opts.on("-r", "--require LIBRARY",
35
- "Require the LIBRARY before executing your script") do |lib|
36
- options.library << lib
37
- end
38
-
39
- # Optional argument; multi-line description.
40
- opts.on("-i", "--inplace [EXTENSION]",
41
- "Edit ARGV files in place",
42
- " (make backup if EXTENSION supplied)") do |ext|
43
- options.inplace = true
44
- options.extension = ext || ''
45
- options.extension.sub!(/\A\.?(?=.)/, ".") # Ensure extension begins with dot.
46
- end
47
-
48
- # Cast 'delay' argument to a Float.
49
- opts.on("--delay N", Float, "Delay N seconds before executing") do |n|
50
- options.delay = n
51
- end
52
-
53
- # Cast 'time' argument to a Time object.
54
- opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
55
- options.time = time
56
- end
57
-
58
- # Cast to octal integer.
59
- opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,
60
- "Specify record separator (default \\0)") do |rs|
61
- options.record_separator = rs
62
- end
63
-
64
- # List of arguments.
65
- opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
66
- options.list = list
67
- end
68
-
69
- # Keyword completion. We are specifying a specific set of arguments (CODES
70
- # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
71
- # the shortest unambiguous text.
72
- code_list = (CODE_ALIASES.keys + CODES).join(',')
73
- opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
74
- " (#{code_list})") do |encoding|
75
- options.encoding = encoding
76
- end
77
-
78
- # Optional argument with keyword completion.
79
- opts.on("--type [TYPE]", [:text, :binary, :auto],
80
- "Select transfer type (text, binary, auto)") do |t|
81
- options.transfer_type = t
82
- end
83
-
84
- # Boolean switch.
85
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
86
- options.verbose = v
87
- end
88
-
89
- opts.separator ""
90
- opts.separator "Common options:"
91
-
92
- # No argument, shows at tail. This will print an options summary.
93
- # Try it and see!
94
- opts.on_tail("-h", "--help", "Show this message") do
95
- puts opts
96
- exit
97
- end
98
-
99
- # Another typical switch to print the version.
100
- opts.on_tail("--version", "Show version") do
101
- puts OptionParser::Version.join('.')
102
- exit
103
- end
104
- end
105
-
106
- opts.parse!(args)
107
- options
108
- end # parse()
109
-
110
- end # class OptparseExample
111
-
112
- options = OptparseExample.parse(ARGV)
113
- pp options
@@ -1,58 +0,0 @@
1
- #!/usr/bin/env ruby -wKU
2
- $KCODE = "UTF8"
3
- # p "Résumé"
4
-
5
- # require "rexml/document"
6
- require "rubygems"
7
- require "htmlentities"
8
-
9
- if __FILE__ == $0
10
-
11
- # Dir.glob("/Users/pwilkins/work/Spoken\ Lecture/IIHS/*transcript\ ????09.csv") { |x|
12
- Dir.glob("/Users/pwilkins/Downloads/*transcript\ ????09.csv") { |x|
13
- # reg = Regexp.new('[\w\-_]*\.seg$')
14
- coder = HTMLEntities.new
15
- span_element = ""
16
- prev_start_time = 0
17
- f = File.new(x)
18
- puts f.path
19
- f.each("\n") { |line|
20
- arr = line.split(",")
21
- # p arr[8]
22
- start_time = arr[2].to_i/1000
23
- if start_time == prev_start_time # append word
24
- # span_element << " #{coder.encode(arr[8].strip, :basic)}"
25
- span_element << " #{arr[8].strip}"
26
- else # create a new span_element
27
- puts span_element << "</span> "
28
- # span_element = "<span id='T#{start_time}'>#{coder.encode(arr[8].strip, :basic)}"
29
- span_element = "<span id='T#{start_time}'>#{arr[8].strip}"
30
- prev_start_time = start_time
31
- end
32
- # puts line.dump
33
- # puts "<span id='T#{start_time}'>#{arr[6]}</span>"
34
-
35
- }
36
-
37
- # puts f
38
- # root.elements.each("/document/lecture/segment") do |s|
39
- # span_element = ""
40
- # prev_start_time = 0
41
- # s.text.scan(/^\d* \d* [\w']*$/) { |t|
42
- ## get the start time and reduce its granularity so that multiple words fall
43
- ## within a <span> element.
44
- # start_time = t.scan(/^\d*/)[0].to_i/1000
45
- # if start_time == prev_start_time # append word
46
- # span_element << " #{t.scan(/[\w']*$/)}"
47
- # else # create a new span_element
48
- # puts span_element << "</span> "
49
- # span_element = "<span id='T#{start_time}'>#{t.scan(/[\w']*$/)}"
50
- # prev_start_time = start_time
51
- # end
52
- ## puts "<span id='T#{t.scan(/^\d*/)[0].to_i/1000}'>#{t.scan(/[\w']*$/)}</span> "
53
- # }
54
- # end
55
- puts
56
- }
57
- end
58
-
@@ -1,21 +0,0 @@
1
- require "rexml/document"
2
- require "optparse"
3
-
4
- if __FILE__ == $0
5
-
6
- Dir.glob("/Users/pwilkins/work/Spoken\ Lecture/IIHS/*.seg") { |x|
7
- reg = Regexp.new('[\w\-_]*\.seg$')
8
- doc = REXML::Document.new File.open(x)
9
- root = doc.root
10
- f = reg.match( root.attributes.get_attribute("fileName").value )
11
- root.elements.each("/document/lecture/segment") do |s|
12
- s.text.scan(/^\d* \d* [\w']*$/) { |t|
13
- puts f[0] + "," + s.attributes.get_attribute("id").value + "," + t.gsub(/ /, ',')
14
- }
15
- end
16
- puts
17
- }
18
- end
19
-
20
-
21
-
@@ -1,24 +0,0 @@
1
- require "rexml/document"
2
-
3
- if __FILE__ == $0
4
-
5
- Dir.glob("/Users/pwilkins/work/Spoken\ Lecture/IIHS/*.seg") { |x|
6
- reg = Regexp.new('[\w\-_]*\.seg$')
7
- doc = REXML::Document.new File.open(x)
8
- root = doc.root
9
- f = reg.match( root.attributes.get_attribute("fileName").value )
10
- root.elements.each("/document/lecture/segment") do |s|
11
- print "Filename (do not edit),Segment (do not edit),Start Time (do not edit),End Time (do not edit),Unedited Word (do not edit),Edited English Word,Hindi Word(s)"
12
- puts
13
- s.text.scan(/^\d* \d* [\w']*$/) { |t|
14
- puts f[0] + "," + s.attributes.get_attribute("id").value + "," + t.gsub(/ /, ',')
15
- }
16
- end
17
- puts
18
- }
19
- end
20
-
21
- # Header for csv file:
22
- # Filename (do not edit),Segment (do not edit),Start Time (do not edit),End Time (do not edit),Unedited Word (do not edit),Edited English Word,Hindi Word(s)
23
-
24
-
@@ -1,31 +0,0 @@
1
- require "rexml/document"
2
-
3
- if __FILE__ == $0
4
-
5
- Dir.glob("/Users/pwilkins/work/Spoken\ Lecture/IIHS/*.seg") { |x|
6
- reg = Regexp.new('[\w\-_]*\.seg$')
7
- doc = REXML::Document.new File.open(x)
8
- root = doc.root
9
- f = reg.match( root.attributes.get_attribute("fileName").value )
10
- puts f
11
- root.elements.each("/document/lecture/segment") do |s|
12
- span_element = ""
13
- prev_start_time = 0
14
- s.text.scan(/^\d* \d* [\w']*$/) { |t|
15
- # get the start time and reduce its granularity so that multiple words fall
16
- # within a <span> element.
17
- start_time = t.scan(/^\d*/)[0].to_i/1000
18
- if start_time == prev_start_time # append word
19
- span_element << " #{t.scan(/[\w']*$/)}"
20
- else # create a new span_element
21
- puts span_element << "</span> "
22
- span_element = "<span id='T#{start_time}'>#{t.scan(/[\w']*$/)}"
23
- prev_start_time = start_time
24
- end
25
- # puts "<span id='T#{t.scan(/^\d*/)[0].to_i/1000}'>#{t.scan(/[\w']*$/)}</span> "
26
- }
27
- end
28
- puts
29
- }
30
- end
31
-
@@ -1,14 +0,0 @@
1
- # This file implements the Ruby 1.9 feature 'require_relative'. It is needed
2
- # only when running Ruby 1.8, so that code doesn't break. It is taken from
3
- # the Pickaxe book for 1.9.
4
-
5
- def require_relative(relative_feature)
6
- c = caller.first
7
- fail "Can't parse #{c}" unless c.rindex(/:\d+(:in '.*')?$/)
8
- file = $`
9
- if /\A\((.*)\)/ =~ file # eval, etc.
10
- raise LoadError, "require_relative is called in #{$1}"
11
- end
12
- absolute = File.expand_path(relative_feature, File.dirname(file))
13
- require absolute
14
- end
@@ -1,247 +0,0 @@
1
- <span id='T1'>this is kathie</span>
2
- <span id='T3'>lee</span>
3
- <span id='T5'>it's just such</span>
4
- <span id='T7'>today I'm going to</span>
5
- <span id='T8'>be</span>
6
- <span id='T9'>some of you</span>
7
- <span id='T10'>already know which</span>
8
- <span id='T11'>teaches</span>
9
- <span id='T15'>child</span>
10
- <span id='T18'>my research focuses</span>
11
- <span id='T19'>on</span>
12
- <span id='T20'>most nineteen</span>
13
- <span id='T21'>forty</span>
14
- <span id='T22'>cheer</span>
15
- <span id='T23'>larry theory</span>
16
- <span id='T24'>particularly</span>
17
- <span id='T28'>systems feminist</span>
18
- <span id='T29'>theory to</span>
19
- <span id='T30'>analyze</span>
20
- <span id='T31'>how contemporary</span>
21
- <span id='T32'>parisian two</span>
22
- <span id='T33'>issues right</span>
23
- <span id='T35'>okay</span>
24
- <span id='T36'>and it's fairly clear</span>
25
- <span id='T37'>to me why</span>
26
- <span id='T38'>research is</span>
27
- <span id='T40'>engineering</span>
28
- <span id='T42'>I think</span>
29
- <span id='T43'>it's fair to</span>
30
- <span id='T44'>this for a couple of</span>
31
- <span id='T45'>reasons one it's my</span>
32
- <span id='T46'>approach</span>
33
- <span id='T47'>to just</span>
34
- <span id='T48'>trying</span>
35
- <span id='T49'>to theoretical</span>
36
- <span id='T50'>perspectives</span>
37
- <span id='T51'>engineering disciplines</span>
38
- <span id='T52'>that</span>
39
- <span id='T53'>really</span>
40
- <span id='T54'>elaborate leases together</span>
41
- <span id='T55'>so</span>
42
- <span id='T56'>for my analysis</span>
43
- <span id='T58'>also I think</span>
44
- <span id='T60'>it's</span>
45
- <span id='T61'>very</span>
46
- <span id='T62'>ways</span>
47
- <span id='T63'>just from where start</span>
48
- <span id='T64'>my research</span>
49
- <span id='T65'>questions to the absolute</span>
50
- <span id='T66'>large exactly</span>
51
- <span id='T67'>no kidding</span>
52
- <span id='T68'>example I just</span>
53
- <span id='T69'>recently</span>
54
- <span id='T70'>conversely an</span>
55
- <span id='T71'>article</span>
56
- <span id='T72'>professor season</span>
57
- <span id='T73'>volt is also</span>
58
- <span id='T74'>interested</span>
59
- <span id='T75'>in hearing master</span>
60
- <span id='T76'>as</span>
61
- <span id='T77'>opposed to circumvent</span>
62
- <span id='T78'>weren't use</span>
63
- <span id='T79'>a visiting</span>
64
- <span id='T80'>professor of</span>
65
- <span id='T81'>us who studies</span>
66
- <span id='T82'>did in our</span>
67
- <span id='T83'>group together</span>
68
- <span id='T85'>vision of social</span>
69
- <span id='T86'>justice</span>
70
- <span id='T87'>integrate picture</span>
71
- <span id='T88'>so we came</span>
72
- <span id='T89'>together in a way</span>
73
- <span id='T90'>the system that</span>
74
- <span id='T91'>has that kind of justice</span>
75
- <span id='T92'>background</span>
76
- <span id='T93'>and issues the justice</span>
77
- <span id='T94'>studies</span>
78
- <span id='T95'>kathleen brothers</span>
79
- <span id='T96'>rhetoric can</span>
80
- <span id='T97'>help language works</span>
81
- <span id='T98'>we conceptualize</span>
82
- <span id='T99'>justice to</span>
83
- <span id='T100'>language</span>
84
- <span id='T101'>I wrote feminist theory</span>
85
- <span id='T102'>and talked</span>
86
- <span id='T103'>about how we can start</span>
87
- <span id='T104'>thinking of social justice</span>
88
- <span id='T105'>to</span>
89
- <span id='T106'>balance principles</span>
90
- <span id='T107'>suggests</span>
91
- <span id='T108'>equality</span>
92
- <span id='T109'>generous</span>
93
- <span id='T110'>thinking about the</span>
94
- <span id='T111'>justice</span>
95
- <span id='T112'>is less individualized</span>
96
- <span id='T113'>rationals</span>
97
- <span id='T114'>thirty or about</span>
98
- <span id='T116'>care</span>
99
- <span id='T117'>we mentioned</span>
100
- <span id='T118'>the ways</span>
101
- <span id='T119'>in which we entrance</span>
102
- <span id='T121'>social justice</span>
103
- <span id='T122'>we did</span>
104
- <span id='T123'>so by looking at</span>
105
- <span id='T124'>work I actually</span>
106
- <span id='T125'>person in</span>
107
- <span id='T126'>charge</span>
108
- <span id='T127'>and markings sort</span>
109
- <span id='T128'>talk about what the</span>
110
- <span id='T129'>messages to me see</span>
111
- <span id='T130'>in this text</span>
112
- <span id='T131'>about ways</span>
113
- <span id='T132'>in which changes</span>
114
- <span id='T134'>yeah that's</span>
115
- <span id='T135'>interesting I</span>
116
- <span id='T136'>hope everybody</span>
117
- <span id='T137'>think there's no</span>
118
- <span id='T138'>chance</span>
119
- <span id='T140'>around</span>
120
- <span id='T141'>the sort</span>
121
- <span id='T142'>of sorry</span>
122
- <span id='T144'>the patience</span>
123
- <span id='T146'>to</span>
124
- <span id='T147'>mainstream</span>
125
- <span id='T148'>education</span>
126
- <span id='T158'>is english</span>
127
- <span id='T159'>so I necessarily</span>
128
- <span id='T160'>star cluster</span>
129
- <span id='T161'>making</span>
130
- <span id='T162'>any do</span>
131
- <span id='T163'>switcher</span>
132
- <span id='T164'>necessarily to start</span>
133
- <span id='T166'>reading</span>
134
- <span id='T167'>and</span>
135
- <span id='T168'>then he was a very</span>
136
- <span id='T170'>various feminist</span>
137
- <span id='T171'>theory that might</span>
138
- <span id='T172'>help me</span>
139
- <span id='T173'>developed fourier</span>
140
- <span id='T174'>analysis of intense</span>
141
- <span id='T175'>exactly</span>
142
- <span id='T178'>and you know article</span>
143
- <span id='T179'>in</span>
144
- <span id='T180'>the summer</span>
145
- <span id='T181'>they've looked at</span>
146
- <span id='T182'>nature writing environmental</span>
147
- <span id='T183'>times their</span>
148
- <span id='T184'>readers it's a very</span>
149
- <span id='T185'>all over the</span>
150
- <span id='T186'>famous for</span>
151
- <span id='T187'>terrigenous</span>
152
- <span id='T188'>millions of</span>
153
- <span id='T189'>fiction writers</span>
154
- <span id='T191'>the united</span>
155
- <span id='T192'>states</span>
156
- <span id='T193'>and let's look</span>
157
- <span id='T194'>at the particularly</span>
158
- <span id='T195'>think about</span>
159
- <span id='T197'>what's happening in</span>
160
- <span id='T198'>nature reading</span>
161
- <span id='T199'>because</span>
162
- <span id='T200'>people to react</span>
163
- <span id='T201'>to the genes</span>
164
- <span id='T202'>gauguin</span>
165
- <span id='T203'>are</span>
166
- <span id='T204'>willing to was running</span>
167
- <span id='T205'>you know it's</span>
168
- <span id='T206'>very to</span>
169
- <span id='T207'>talk about how these</span>
170
- <span id='T208'>writers are actually modeling</span>
171
- <span id='T209'>first principles</span>
172
- <span id='T210'>of collaboration</span>
173
- <span id='T212'>principles that</span>
174
- <span id='T213'>diffusing</span>
175
- <span id='T215'>our relationships</span>
176
- <span id='T216'>in</span>
177
- <span id='T217'>our world</span>
178
- <span id='T218'>into just had a breakdown</span>
179
- <span id='T219'>those boundaries</span>
180
- <span id='T220'>actually</span>
181
- <span id='T221'>came from</span>
182
- <span id='T222'>so that</span>
183
- <span id='T223'>focus on interdependence</span>
184
- <span id='T224'>collaboration</span>
185
- <span id='T226'>no longer have a higher</span>
186
- <span id='T228'>relationships</span>
187
- <span id='T229'>as a teenager</span>
188
- <span id='T230'>culture</span>
189
- <span id='T231'>is so</span>
190
- <span id='T232'>it's going</span>
191
- <span id='T234'>argue is one of these</span>
192
- <span id='T235'>contemporary parisian</span>
193
- <span id='T236'>julius create</span>
194
- <span id='T237'>a dipole kick</span>
195
- <span id='T238'>up there</span>
196
- <span id='T239'>a new way of</span>
197
- <span id='T240'>thinking about</span>
198
- <span id='T241'>nature</span>
199
- <span id='T242'>was there was definitely</span>
200
- <span id='T243'>for</span>
201
- <span id='T244'>us</span>
202
- <span id='T245'>here</span>
203
- <span id='T246'>okay yeah</span>
204
- <span id='T247'>it's</span>
205
- <span id='T248'>it's very clear</span>
206
- <span id='T249'>I mean how how james</span>
207
- <span id='T251'>it's</span>
208
- <span id='T252'>way</span>
209
- <span id='T261'>oh jeez</span>
210
- <span id='T263'>I</span>
211
- <span id='T264'>think humanities</span>
212
- <span id='T266'>perspective</span>
213
- <span id='T268'>he anteks</span>
214
- <span id='T269'>paralyzing</span>
215
- <span id='T270'>where it says</span>
216
- <span id='T271'>experiences</span>
217
- <span id='T272'>to look at</span>
218
- <span id='T273'>the issues of sexuality</span>
219
- <span id='T275'>and difference</span>
220
- <span id='T276'>of ways in</span>
221
- <span id='T277'>which we think about identity</span>
222
- <span id='T278'>in the</span>
223
- <span id='T279'>united states</span>
224
- <span id='T280'>how to</span>
225
- <span id='T281'>change</span>
226
- <span id='T282'>and its relationship</span>
227
- <span id='T283'>to be our</span>
228
- <span id='T284'>relationship</span>
229
- <span id='T285'>to each other</span>
230
- <span id='T286'>require</span>
231
- <span id='T287'>individual or person</span>
232
- <span id='T288'>rapes</span>
233
- <span id='T289'>ethnicity</span>
234
- <span id='T290'>sex</span>
235
- <span id='T291'>nationality</span>
236
- <span id='T292'>resonance</span>
237
- <span id='T293'>challenge how</span>
238
- <span id='T294'>we operate world</span>
239
- <span id='T296'>as individuals and</span>
240
- <span id='T297'>also we operate</span>
241
- <span id='T302'>and later</span>
242
- <span id='T303'>the semester</span>
243
- <span id='T312'>it wasn't</span>
244
- <span id='T314'>to see commonality</span>
245
- <span id='T315'>between</span>
246
- <span id='T316'>questions</span>
247
- <span id='T321'>thank you</span>