sm-transcript 0.0.3

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 (45) hide show
  1. data/LICENSE.txt +23 -0
  2. data/README.txt +140 -0
  3. data/Rakefile +31 -0
  4. data/bin/results/PLACEHOLDER.txt +8 -0
  5. data/bin/sm-transcript +12 -0
  6. data/bin/transcripts/PLACEHOLDER.txt +8 -0
  7. data/lib/sm_transcript/LICENSE.txt +23 -0
  8. data/lib/sm_transcript/metadata.rb +69 -0
  9. data/lib/sm_transcript/metadata_reader.rb +56 -0
  10. data/lib/sm_transcript/options.rb +89 -0
  11. data/lib/sm_transcript/optparseExample.rb +113 -0
  12. data/lib/sm_transcript/process_csv_files_to_html.rb +58 -0
  13. data/lib/sm_transcript/process_seg_files.rb +21 -0
  14. data/lib/sm_transcript/process_seg_files_to_csv.rb +24 -0
  15. data/lib/sm_transcript/process_seg_files_to_html.rb +31 -0
  16. data/lib/sm_transcript/require_relative.rb +14 -0
  17. data/lib/sm_transcript/runner.rb +70 -0
  18. data/lib/sm_transcript/seg_reader.rb +42 -0
  19. data/lib/sm_transcript/transcript.rb +130 -0
  20. data/lib/sm_transcript/word.rb +31 -0
  21. data/lib/sm_transcript/wrd_reader.rb +42 -0
  22. data/test/Rakefile +14 -0
  23. data/test/results/IIHS_Diane_Davis_Nov2009.seg +425 -0
  24. data/test/results/NERCOMP-SpokenMedia4.wrd +6791 -0
  25. data/test/results/PLACEHOLDER.txt +8 -0
  26. data/test/results/PLACEHOLDER.txt.ignore +8 -0
  27. data/test/results/vijay_kumar.wrd +1675 -0
  28. data/test/results/wirehair-beetle.txt +6 -0
  29. data/test/test_metadata.rb +39 -0
  30. data/test/test_metadatareader.rb +30 -0
  31. data/test/test_options.rb +47 -0
  32. data/test/test_runner.rb +52 -0
  33. data/test/test_segreader.rb +39 -0
  34. data/test/test_transcript.rb +62 -0
  35. data/test/test_wrdreader.rb +43 -0
  36. data/test/transcripts/IIHS_Diane_Davis_Nov2009-t1.html +148 -0
  37. data/test/transcripts/PLACEHOLDER.txt +8 -0
  38. data/test/transcripts/data.js +24 -0
  39. data/test/transcripts/vijay_kumar-1.-t1.html +557 -0
  40. data/test/transcripts/vijay_kumar-1.t1.html +557 -0
  41. data/test/transcripts/vijay_kumar-t1.html +557 -0
  42. data/test/transcripts/vijay_kumar-t1.ttml +569 -0
  43. data/test/transcripts/vijay_kumar.data.js +2 -0
  44. data/test/transcripts/wirehair-beetle.data.js +3 -0
  45. metadata +234 -0
@@ -0,0 +1,6 @@
1
+ Nimrod Olson
2
+ nimrod@olson.org
3
+ The Chapel of Perpetual Sorrow
4
+ The Song of the Wirehair Beetle
5
+ The Right Reverend Castro Mayhem
6
+ aboriginal_hairstyling.mov
@@ -0,0 +1,39 @@
1
+ # $Id: test_metadata.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require "json/ext"
7
+ require 'extensions/kernel'
8
+ require 'test/unit'
9
+ require 'pp'
10
+ require 'shoulda'
11
+ require_relative '../lib/sm_transcript/metadata'
12
+ require_relative '../lib/sm_transcript/metadata_reader'
13
+
14
+ class TestMetadata < Test::Unit::TestCase
15
+
16
+ context "Call metadata_reader and write metadata file to default dest dir" do
17
+ should "create data.js file in ./transcripts" do
18
+ mdfile = SmTranscript::MetadataReader.from_file("results/wirehair-beetle.txt")
19
+ md = SmTranscript::Metadata.new(mdfile.metadata)
20
+ md.write_datajs("transcripts/data.js")
21
+
22
+ # for now just check for the existence of a file
23
+ assert(File.exists?("transcripts/data.js"))
24
+ end
25
+
26
+ should "add timestamp to id" do
27
+ mdfile = SmTranscript::MetadataReader.from_file("results/wirehair-beetle.txt")
28
+ md = SmTranscript::Metadata.new(mdfile.metadata)
29
+ md.write_datajs("transcripts/data.js")
30
+
31
+ json = File.new("transcripts/data.js")
32
+ doc = JSON.parse(File.read("transcripts/data.js"))
33
+ # for now, just test that the id ends with a hyphen and ten digits
34
+ reg = Regexp.new('.*-\d{10}$')
35
+ assert(reg.match(doc["videos"][0]["id"]))
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,30 @@
1
+ # $Id: test_metadatareader.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require_relative '../lib/sm_transcript/metadata_reader'
10
+
11
+ class TestMetadataReader < Test::Unit::TestCase
12
+
13
+ context "Specifying a metadata file the .to_file method" do
14
+ should "return an object (you call that a test?)" do
15
+ obj = SmTranscript::MetadataReader.from_file("results/wirehair-beetle.txt")
16
+ assert_not_nil(obj)
17
+ end
18
+
19
+ should "read the content and place it in fields " do
20
+ md = SmTranscript::MetadataReader.from_file("results/wirehair-beetle.txt")
21
+ # p md
22
+ assert_equal 'Nimrod Olson', md.metadata['name'].nil? ? 'empty' : md.metadata['name'].chomp
23
+ assert_equal 'nimrod@olson.org', md.metadata['email'].nil? ? 'empty' : md.metadata['email'].chomp
24
+ assert_equal "The Chapel of Perpetual Sorrow", md.metadata['org'].nil? ? 'empty' : md.metadata['org'].chomp
25
+ assert_equal "The Song of the Wirehair Beetle", md.metadata['title'].nil? ? 'empty' : md.metadata['title'].chomp
26
+ assert_equal "The Right Reverend Castro Mayhem", md.metadata['speaker'].nil? ? 'empty' : md.metadata['speaker'].chomp
27
+ assert_equal "aboriginal_hairstyling.mov", md.metadata['video'].nil? ? 'empty' : md.metadata['video'].chomp
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,47 @@
1
+ # $Id: test_options.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require 'ppcommand'
10
+
11
+ require_relative '../lib/sm_transcript/options'
12
+
13
+ class TestOptions < Test::Unit::TestCase
14
+
15
+ context "Supplying command line arguments" do
16
+ should "use defaults when no arguments are provided" do
17
+ opts = SmTranscript::Options.new([""])
18
+ assert_equal SmTranscript::Options::DEFAULT_SRC_DIR, opts.srcdir
19
+ assert_equal SmTranscript::Options::DEFAULT_DEST_DIR, opts.destdir
20
+ assert_equal SmTranscript::Options::DEFAULT_SRC_TYPE, opts.srctype
21
+ end
22
+
23
+ should "read scrdir:foo/bar, destdir:barney/rubble, srctype:foo" do
24
+ opts = SmTranscript::Options.new([
25
+ '--srcdir', 'foo/bar',
26
+ '--destdir', 'barney/rubble', '--srctype', 'foo'])
27
+ assert_equal 'foo/bar', opts.srcdir
28
+ assert_equal 'barney/rubble', opts.destdir
29
+ assert_equal 'foo', opts.srctype
30
+ end
31
+
32
+ should "read srctype:wrd, desttype:ttml" do
33
+ opts = SmTranscript::Options.new([
34
+ '--desttype', 'ttml', '--srctype', 'wrd'])
35
+ assert_equal 'ttml', opts.desttype
36
+ assert_equal 'wrd', opts.srctype
37
+ end
38
+
39
+ should "read srctype:wrd, desttype:datajs" do
40
+ opts = SmTranscript::Options.new([
41
+ '--desttype', 'datajs', '--srctype', 'wrd'])
42
+ assert_equal 'datajs', opts.desttype
43
+ assert_equal 'wrd', opts.srctype
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,52 @@
1
+ # $Id: test_runner.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require_relative '../lib/sm_transcript/runner'
10
+
11
+ class TestRunner < Test::Unit::TestCase
12
+
13
+ context "Running the application" do
14
+
15
+ should "return specified source directory, and default values" do
16
+ runner = SmTranscript::Runner.new(["--srcdir", '../bin/results'])
17
+ opts = runner.options
18
+ assert_equal '../bin/results', opts.srcdir
19
+ assert_equal './transcripts', opts.destdir
20
+ assert_equal 'wrd', opts.srctype
21
+ assert_equal 'html', opts.desttype
22
+ runner.run
23
+ end
24
+
25
+ should "return specified dest directory, and default values" do
26
+ runner = SmTranscript::Runner.new(["--destdir", '../bin/transcripts'])
27
+ opts = runner.options
28
+ assert_equal '../bin/transcripts', opts.destdir
29
+ assert_equal './results', opts.srcdir
30
+ assert_equal 'wrd', opts.srctype
31
+ assert_equal 'html', opts.desttype
32
+ runner.run
33
+ end
34
+
35
+ should "return specified datajs dest type, and default values" do
36
+ runner = SmTranscript::Runner.new(["--srctype", 'txt', '--desttype', 'datajs'])
37
+ opts = runner.options
38
+ assert_equal './transcripts', opts.destdir
39
+ assert_equal './results', opts.srcdir
40
+ assert_equal 'txt', opts.srctype
41
+ assert_equal 'datajs', opts.desttype
42
+ runner.run
43
+ end
44
+
45
+ # I don't know how to test for the "invalid option" error that this test causes.
46
+ # should "return display usage information and optionally an error msg" do
47
+ # SmTranscript::Runner.new(["--niblick-mashie"])
48
+ # assert_equal SmTranscript::Options::DEFAULT_SRC_DIR, opts.srcdir
49
+ # end
50
+
51
+ end
52
+ end
@@ -0,0 +1,39 @@
1
+ # $Id: test_segreader.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require_relative '../lib/sm_transcript/seg_reader'
10
+
11
+ class TestSegReader < Test::Unit::TestCase
12
+
13
+ context "app can find the seg file" do
14
+ should "verify that instance is not nil" do
15
+ segfile = SmTranscript::SegReader.from_file("results/IIHS_Diane_Davis_Nov2009.seg")
16
+ assert_not_nil(segfile)
17
+ end
18
+ end
19
+
20
+ context "read a metadata item from seg file" do
21
+ should "return seg file name" do
22
+ segfile = SmTranscript::SegReader.from_file("results/IIHS_Diane_Davis_Nov2009.seg")
23
+
24
+ assert_equal "IIHS_Diane_Davis_Nov2009.seg",
25
+ segfile.metadata["orig_seg_path"].to_s
26
+ end
27
+ end
28
+
29
+ context "read a time-coded word from seg file" do
30
+ should "return first time-coded word in transcript" do
31
+ segfile = SmTranscript::SegReader.from_file("results/IIHS_Diane_Davis_Nov2009.seg")
32
+
33
+ assert_equal "11406", segfile.words[0].start_time
34
+ assert_equal "11500", segfile.words[0].end_time
35
+ assert_equal "oh", segfile.words[0].word
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,62 @@
1
+ # $Id: test_transcript.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require_relative '../lib/sm_transcript/transcript'
10
+ require_relative '../lib/sm_transcript/seg_reader'
11
+ require_relative '../lib/sm_transcript/wrd_reader'
12
+ require_relative '../lib/sm_transcript/word'
13
+
14
+ class TestTranscript < Test::Unit::TestCase
15
+ # words = []
16
+
17
+ # context "write transcript to HTML in default dest dir" do
18
+ # should "create transcript file in ./transcripts" do
19
+ # words = [ SmTranscript::Word.new(11000, 120, "nougat") ]
20
+ # words << SmTranscript::Word.new(120, 130, "caramel")
21
+ # t = SmTranscript::Transcript.new(words)
22
+ # t.write_html("transcripts/IIHS_Diane_Davis_Nov2009-t1.html")
23
+ #
24
+ # # for now just check for the existence of a file
25
+ # assert(File.exists?("transcripts/IIHS_Diane_Davis_Nov2009-t1.html"))
26
+ # end
27
+ # end
28
+
29
+ context "write transcript to HTML in default dest dir and call SegReader" do
30
+ should "create transcript file in ./transcripts" do
31
+ segfile = SmTranscript::SegReader.from_file("results/IIHS_Diane_Davis_Nov2009.seg")
32
+ t = SmTranscript::Transcript.new(segfile.words)
33
+ t.write_html("transcripts/IIHS_Diane_Davis_Nov2009-t1.html")
34
+
35
+ # for now just check for the existence of a file
36
+ assert(File.exists?("transcripts/IIHS_Diane_Davis_Nov2009-t1.html"))
37
+ end
38
+ end
39
+
40
+ context "Calling WrdReader, writing transcript to HTML in default dest dir" do
41
+ should "create transcript file in ./transcripts" do
42
+ wrdfile = SmTranscript::WrdReader.from_file("results/vijay_kumar.wrd")
43
+ t = SmTranscript::Transcript.new(wrdfile.words)
44
+ t.write_html("transcripts/vijay_kumar-t1.html")
45
+
46
+ # for now just check for the existence of a file
47
+ assert(File.exists?("transcripts/vijay_kumar-t1.html"))
48
+ end
49
+ end
50
+
51
+ context "Calling WrdReader, writing transcript to timedText in default dest dir" do
52
+ should "create tt transcript file in ./transcripts" do
53
+ wrdfile = SmTranscript::WrdReader.from_file("results/vijay_kumar.wrd")
54
+ t = SmTranscript::Transcript.new(wrdfile.words)
55
+ t.write_ttml("transcripts/vijay_kumar-t1.ttml")
56
+
57
+ # for now just check for the existence of a file
58
+ assert(File.exists?("transcripts/vijay_kumar-t1.ttml"))
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,43 @@
1
+ # $Id: test_wrdreader.rb 192 2010-03-27 01:24:26Z pwilkins $
2
+ # Copyright (c) 2010 Massachusetts Institute of Technology
3
+ # see LICENSE.txt for license text
4
+
5
+ require 'rubygems'
6
+ require 'extensions/kernel'
7
+ require 'test/unit'
8
+ require 'shoulda'
9
+ require_relative '../lib/sm_transcript/wrd_reader'
10
+
11
+ class TestWrdReader < Test::Unit::TestCase
12
+
13
+ context "Specifying a WRD source file" do
14
+ should "verify that the file can be opened" do
15
+ wrdfile = SmTranscript::WrdReader.from_file("results/vijay_kumar.wrd")
16
+ assert_not_nil(wrdfile)
17
+ end
18
+ # should "report if the file can't be found" do
19
+ # wrdfile = SmTranscript::WrdReader.from_file("results/this_file_doesnt_exist")
20
+ # assert_not_nil(wrdfile)
21
+ # end
22
+ end
23
+
24
+ # context "read a metadata item from seg file" do
25
+ # should "return seg file name" do
26
+ # wrdfile = SmTranscript::WrdReader.from_file("results/IIHS_Diane_Davis_Nov2009.seg")
27
+ #
28
+ # assert_equal "IIHS_Diane_Davis_Nov2009.seg",
29
+ # wrdfile.metadata["orig_seg_path"].to_s
30
+ # end
31
+ # end
32
+
33
+ context "processing a WRD source file" do
34
+ should "create an Array of Word objects " do
35
+ wrdfile = SmTranscript::WrdReader.from_file("results/vijay_kumar.wrd")
36
+
37
+ assert_equal "5660", wrdfile.words[0].start_time
38
+ assert_equal "6627", wrdfile.words[0].end_time
39
+ assert_equal "okay", wrdfile.words[0].word
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,148 @@
1
+ <span id='T11'>oh I think there're</span>
2
+ <span id='T12'>several critical questions</span>
3
+ <span id='T13'>of ones that I</span>
4
+ <span id='T14'>found in steady</span>
5
+ <span id='T15'>most myself</span>
6
+ <span id='T17'>are questions of insecurity</span>
7
+ <span id='T18'>into violence</span>
8
+ <span id='T19'>I</span>
9
+ <span id='T20'>see those and</span>
10
+ <span id='T21'>some</span>
11
+ <span id='T22'>pervasive the class</span>
12
+ <span id='T23'>much of a global</span>
13
+ <span id='T24'>found</span>
14
+ <span id='T25'>and I think</span>
15
+ <span id='T27'>have a lot to do</span>
16
+ <span id='T28'>with her and devil transition</span>
17
+ <span id='T29'>that in</span>
18
+ <span id='T30'>the developing world is</span>
19
+ <span id='T31'>facebook pull the</span>
20
+ <span id='T32'>climb economic globalization</span>
21
+ <span id='T34'>never flat</span>
22
+ <span id='T35'>it's a fairly standard</span>
23
+ <span id='T36'>way of understanding</span>
24
+ <span id='T37'>the crime and</span>
25
+ <span id='T38'>violence so</span>
26
+ <span id='T40'>I think it's</span>
27
+ <span id='T41'>import and because it means</span>
28
+ <span id='T42'>is that problem</span>
29
+ <span id='T43'>of r times</span>
30
+ <span id='T44'>and then</span>
31
+ <span id='T45'>many developing</span>
32
+ <span id='T46'>countries in</span>
33
+ <span id='T47'>different regions of the world</span>
34
+ <span id='T48'>are facing</span>
35
+ <span id='T49'>insecurity</span>
36
+ <span id='T50'>and violence</span>
37
+ <span id='T51'>that</span>
38
+ <span id='T53'>and a lot to do</span>
39
+ <span id='T54'>with the changing nature</span>
40
+ <span id='T55'>of an urban</span>
41
+ <span id='T56'>economies and</span>
42
+ <span id='T57'>how they linked</span>
43
+ <span id='T58'>to the global</span>
44
+ <span id='T59'>economy so</span>
45
+ <span id='T60'>and that's</span>
46
+ <span id='T61'>I think come</span>
47
+ <span id='T63'>pervasive challenge</span>
48
+ <span id='T67'>is that</span>
49
+ <span id='T68'>is one and two</span>
50
+ <span id='T69'>are three specializations</span>
51
+ <span id='T70'>that when means</span>
52
+ <span id='T71'>in and interconnected</span>
53
+ <span id='T72'>the</span>
54
+ <span id='T73'>global world aware</span>
55
+ <span id='T74'>technology</span>
56
+ <span id='T75'>and treat</span>
57
+ <span id='T76'>endowment</span>
58
+ <span id='T78'>of communication</span>
59
+ <span id='T79'>and</span>
60
+ <span id='T80'>this</span>
61
+ <span id='T81'>I d l</span>
62
+ <span id='T82'>ideology</span>
63
+ <span id='T83'>of those are all important</span>
64
+ <span id='T84'>to aspects</span>
65
+ <span id='T85'>of that I'm the</span>
66
+ <span id='T86'>planning to kept</span>
67
+ <span id='T88'>but I would say</span>
68
+ <span id='T89'>definitely need</span>
69
+ <span id='T90'>to people</span>
70
+ <span id='T91'>who are</span>
71
+ <span id='T92'>I had</span>
72
+ <span id='T93'>the think about them</span>
73
+ <span id='T94'>meaning regulator</span>
74
+ <span id='T95'>people and now but organizations</span>
75
+ <span id='T96'>howell</span>
76
+ <span id='T97'>organizations function</span>
77
+ <span id='T98'>because organizations</span>
78
+ <span id='T100'>there it's a whole</span>
79
+ <span id='T101'>literature in</span>
80
+ <span id='T102'>a field of organizational</span>
81
+ <span id='T103'>fury there</span>
82
+ <span id='T104'>would be important understand</span>
83
+ <span id='T105'>amiga small</span>
84
+ <span id='T106'>is that is our local</span>
85
+ <span id='T107'>government our rap</span>
86
+ <span id='T108'>community</span>
87
+ <span id='T109'>Iranian g l</span>
88
+ <span id='T110'>and something</span>
89
+ <span id='T111'>as large as</span>
90
+ <span id='T112'>steak ever</span>
91
+ <span id='T113'>meant and national</span>
92
+ <span id='T114'>government maybe</span>
93
+ <span id='T115'>at</span>
94
+ <span id='T116'>the u n r a</span>
95
+ <span id='T117'>global agency</span>
96
+ <span id='T118'>news activities</span>
97
+ <span id='T119'>influence</span>
98
+ <span id='T121'>and the</span>
99
+ <span id='T122'>small scale so I think</span>
100
+ <span id='T123'>organization</span>
101
+ <span id='T124'>analysis</span>
102
+ <span id='T125'>is a very important</span>
103
+ <span id='T126'>okay</span>
104
+ <span id='T129'>line</span>
105
+ <span id='T130'>is lambda t v</span>
106
+ <span id='T131'>for television the</span>
107
+ <span id='T132'>only about it I</span>
108
+ <span id='T133'>think and there's</span>
109
+ <span id='T134'>a lot of x segment</span>
110
+ <span id='T135'>about that and I didn't</span>
111
+ <span id='T136'>think that that eminently</span>
112
+ <span id='T137'>to the challenges the</span>
113
+ <span id='T138'>town and it's hard</span>
114
+ <span id='T139'>are how</span>
115
+ <span id='T140'>to get there</span>
116
+ <span id='T141'>yeah so in what</span>
117
+ <span id='T142'>are the strategic</span>
118
+ <span id='T143'>aims least okay many</span>
119
+ <span id='T144'>here and this meeting whatever</span>
120
+ <span id='T145'>to dick steps</span>
121
+ <span id='T146'>any to be take</span>
122
+ <span id='T147'>ten where</span>
123
+ <span id='T148'>you can accomplish</span>
124
+ <span id='T149'>something in the short term</span>
125
+ <span id='T150'>right away</span>
126
+ <span id='T151'>but also</span>
127
+ <span id='T152'>you know the the</span>
128
+ <span id='T153'>you're not going to accomplish</span>
129
+ <span id='T154'>everything that you're leading</span>
130
+ <span id='T155'>out in year vision and</span>
131
+ <span id='T156'>so</span>
132
+ <span id='T157'>you want to make</span>
133
+ <span id='T158'>progress</span>
134
+ <span id='T159'>continually</span>
135
+ <span id='T160'>every</span>
136
+ <span id='T161'>states has a has</span>
137
+ <span id='T162'>some of the small success</span>
138
+ <span id='T163'>but</span>
139
+ <span id='T164'>for a need for its allies</span>
140
+ <span id='T165'>success because</span>
141
+ <span id='T166'>you can't put</span>
142
+ <span id='T167'>an institution</span>
143
+ <span id='T168'>it's</span>
144
+ <span id='T169'>and develop an institution</span>
145
+ <span id='T170'>like to emulate</span>
146
+ <span id='T171'>your have</span>
147
+ <span id='T172'>in mind</span>
148
+ <span id='T173'>of the night</span>