From 64a48bc20864adebc20616b25899ebc21c4f48e3 Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 12:22:27 +0200 Subject: [PATCH 1/8] Bring some test files --- spec/fixtures/petrov_eleg01_cleaned.xml | 203 ++++++++++++++ .../petrov_eleg01_with_endless_loop.xml | 204 ++++++++++++++ .../petrov_eleg02_with_internal_error.xml | 255 ++++++++++++++++++ 3 files changed, 662 insertions(+) create mode 100644 spec/fixtures/petrov_eleg01_cleaned.xml create mode 100644 spec/fixtures/petrov_eleg01_with_endless_loop.xml create mode 100644 spec/fixtures/petrov_eleg02_with_internal_error.xml diff --git a/spec/fixtures/petrov_eleg01_cleaned.xml b/spec/fixtures/petrov_eleg01_cleaned.xml new file mode 100644 index 0000000..9c2f539 --- /dev/null +++ b/spec/fixtures/petrov_eleg01_cleaned.xml @@ -0,0 +1,203 @@ + + + + + +
+ + Conjugis ut carae patrio mens debita caelo + + Pars melior, miseram laeta reliquit humum: + + Postquam, illa rapta, simul omnis rapta voluptas + + Est mihi (jam ex illo tempore mensis abit) + + Non nisi perpetuos fundunt mea lumina fletus; + + Lux sequitur noctem tristis, et umbra diem. + + Pabula sunt lacrymae, lacrymae sunt pocula, sed quae + + Plus, Medea, tuo gramine fellis habent. + + Sic me qui pascit, simul enecat humor, et hospes + + Ipse mei cordis, cor mihi luctus edit. + + Ac veluti turtur, sociam cui barbarus auceps + + Exceptam structis perdidit insidiis, + + Si quam forte videt sine vite, et frondibus ulmum, + + Aequalem sorti, consimilemque suae, + + Flectit iter, ramoque sedens miserabilis ales + + Gutture subrauco nil nisi triste gemit. + + Non illum exhilarat facies pulcherrima Veris, + + Nulla sibi in notis pabula quaerit agris: + + Non sociae possunt volucres abducere ramo, + + Ad prope labentes non sitis urget aquas. + + Sic ego. Sic vitam sine te, dulcissima conjux, + + Si vitae haec nomen vita meretur, ago. + + Sola queri misero, sola est mihi flere voluptas, + + Sola loci facies maesta, silensque placet. + + Non aures cantus, non fila loquacia mulcent; + + Non oculos formae gratia, flosque rapit. + + Unam te in sylvis, unam in florentibus hortis, + + Per juga, per valles quaero, nec invenio. + + Nec magis Eurydice est Vati quaesita marito, + + Tartareum quamvis viderit ille canem: + + Nec magis est Cephalo Procris defleta, videnti + + Deceptae errorem, flagitiumque manus; + + Quam totas ego te noctes, mea vita, diesque + + Quaero, nec inventam maestus abesse queror. + + Et tamen ante oculos errat tua semper imago, + + (Quid non fingit amans?) et tua verba sonant. + + Si qua avis in densis, Siren innoxia, lucis + + Est audita mihi fundere dulce melos, + + Sisto gradum, et similis deceptus imagine vocis + + Est, inquam, est cantus conjugis ille meae. + + Si quando ad fontes, aut ad vernantia prata, + + Aut maris ad placidas me tulit error aquas, + + Hic locus est, dico, quem visere saepe solebat. + + Quae mora (jam sol est ortus) abesse facit? + + Sed jam jam veniet; latet illa forte sub umbra, + + Aut illi pietas est sua causa morae. + + Causa morae est certe pietas: nisi fallimur, haec est, + + Fundentem ad superos quae videt hora preces. + + Mox sat ut illusum me liquit amabilis error, + + Protinus ex oculis bina fluenta cadunt. + + Bina fluenta cadunt, quorum hinc dolor elicit unum, + + Inde aliud, tanti causa doloris, amor. + + Meque ipsum incuso, quod sim tam stultus, et amens, + + Et pascam aerumnas crudelitate meas: + + Rursus in errores tamen hos delabor, et hujus + + Erroris rursus paenitet esse reum. + + Sic pugnant mea vota meis contraria votis, + + Nec placet, heu! misero quod modo dulce fuit. + + Nec quod sim discors, angit modo; saevius angit + + Vivere me longos te sine posse dies. + + Ah! ubi sunt voces illae, et mea fortia verba? + + Ah! ubi, quae verbis debet inesse, fides? + + Me quoque rapturam subito, quae te hora tulisset, + + Et pariter praedam mortis utrumque fore? + + Ecce tamen vivo, nec post nova cornua Phoebes + + Vis me maeroris perdere longa potest. + + Heu! quae dura silex, quod inexsuperabile robur, + + Quod ferrum, et triplex aes mihi pectus obit? + + Vivo equidem, vivo, sed morte est tristior ipsa, + + Quae sine te, conjux, vita relicta mihi est. + + At tu nunc choreis Natorum immixta tuorum, + + Qui (prona) facili ad Superos te praeiere (via) gradu, + + Plena Deo frueris, nec, quae tibi parta, bonorum + + Amittendorum te timor ullus habet. + + Nam tua non tristes pietas te duxit in oras: + + Debetur sedes non nisi laeta piis. + + Te plaga (credo equidem) summi plaga lucida caeli, + + Te laeta aeterno vere vireta tenent. + + Ipsum ipsum Auctorem rerum, quem qui videt, ultra + + Nil habet optandum, jam sine nube vides. + + Usque et ubique vides, at non saturata videndo + + Illo oculos pascis; pressa sed usque fame es. + + Te vis implet opum, sed non (licet impleat) explet; + + Excipit unum aliud, subsequiturque bonum. + + Non te humiles curae, non te mortalia tangunt; + + Prae caelo, et stellis quam tibi sordet humus! + + Sordet humus certe. non sic tamen, ut tua nunquam + + Ad miserum flectas lumina blanda virum; + + Audire aut flentem fugias, et saucia flentis, + + Qua licet, admota corda fovere manu; + + Iactatumque diu ventisque undisque vocare + + Ad laeta Eridani littora stelliferi. + + Quam tua sors felix, quam nostra simillima morti est, + + Felle ego, tu Divum vesceris ambrosia. + + Non tamen invideo tua gaudia, sed miser opto, + + Laetitiae consors quam prius esse tuae. + +
+ +
+
diff --git a/spec/fixtures/petrov_eleg01_with_endless_loop.xml b/spec/fixtures/petrov_eleg01_with_endless_loop.xml new file mode 100644 index 0000000..cb1723e --- /dev/null +++ b/spec/fixtures/petrov_eleg01_with_endless_loop.xml @@ -0,0 +1,204 @@ + + + + + +
+ + Conjugis ut carae patrio mens debita caelo + + Pars melior, miseram laeta reliquit humum: + + Postquam, illa rapta, simul omnis rapta voluptas + + Est mihi (jam ex illo tempore mensis abit) + + Non nisi perpetuos fundunt mea lumina fletus; + + Lux sequitur noctem tristis, et umbra diem. + + Pabula sunt lacrymae, lacrymae sunt pocula, sed + quae + + Plus, Medea, tuo gramine fellis habent. + + Sic me qui pascit, simul enecat humor, et hospes + + Ipse mei cordis, cor mihi luctus edit. + + Ac veluti turtur, sociam cui barbarus auceps + + Exceptam structis perdidit insidiis, + + Si quam forte videt sine vite, et frondibus ulmum, + + Aequalem sorti, consimilemque suae, + + Flectit iter, ramoque sedens miserabilis ales + + Gutture subrauco nil nisi triste gemit. + + Non illum exhilarat facies pulcherrima Veris, + + Nulla sibi in notis pabula quaerit agris: + + Non sociae possunt volucres abducere ramo, + + Ad prope labentes non sitis urget aquas. + + Sic ego. Sic vitam sine te, dulcissima conjux, + + Si vitae haec nomen vita meretur, ago. + + Sola queri misero, sola est mihi flere voluptas, + + Sola loci facies maesta, silensque placet. + + Non aures cantus, non fila loquacia mulcent; + + Non oculos formae gratia, flosque rapit. + + Unam te in sylvis, unam in florentibus hortis, + + Per juga, per valles quaero, nec invenio. + + Nec magis Eurydice est Vati quaesita marito, + + Tartareum quamvis viderit ille canem: + + Nec magis est Cephalo Procris defleta, videnti + + Deceptae errorem, flagitiumque manus; + + Quam totas ego te noctes, mea vita, diesque + + Quaero, nec inventam maestus abesse queror. + + Et tamen ante oculos errat tua semper imago, + + (Quid non fingit amans?) et tua verba sonant. + + Si qua avis in densis, Siren innoxia, lucis + + Est audita mihi fundere dulce melos, + + Sisto gradum, et similis deceptus imagine vocis + + Est, inquam, est cantus conjugis ille meae. + + Si quando ad fontes, aut ad vernantia prata, + + Aut maris ad placidas me tulit error aquas, + + Hic locus est, dico, quem visere saepe solebat. + + Quae mora (jam sol est ortus) abesse facit? + + Sed jam jam veniet; latet illa forte sub umbra, + + Aut illi pietas est sua causa morae. + + Causa morae est certe pietas: nisi fallimur, haec est, + + Fundentem ad superos quae videt hora preces. + + Mox sat ut illusum me liquit amabilis error, + + Protinus ex oculis bina fluenta cadunt. + + Bina fluenta cadunt, quorum hinc dolor elicit unum, + + Inde aliud, tanti causa doloris, amor. + + Meque ipsum incuso, quod sim tam stultus, et amens, + + Et pascam aerumnas crudelitate meas: + + Rursus in errores tamen hos delabor, et hujus + + Erroris rursus paenitet esse reum. + + Sic pugnant mea vota meis contraria votis, + + Nec placet, heu! misero quod modo dulce fuit. + + Nec quod sim discors, angit modo; saevius angit + + Vivere me longos te sine posse dies. + + Ah! ubi sunt voces illae, et mea fortia verba? + + Ah! ubi, quae verbis debet inesse, fides? + + Me quoque rapturam subito, quae te hora tulisset, + + Et pariter praedam mortis utrumque fore? + + Ecce tamen vivo, nec post nova cornua Phoebes + + Vis me maeroris perdere longa potest. + + Heu! quae dura silex, quod inexsuperabile robur, + + Quod ferrum, et triplex aes mihi pectus obit? + + Vivo equidem, vivo, sed morte est tristior ipsa, + + Quae sine te, conjux, vita relicta mihi est. + + At tu nunc choreis Natorum immixta tuorum, + + Qui (prona) facili ad Superos te praeiere (via) gradu, + + Plena Deo frueris, nec, quae tibi parta, bonorum + + Amittendorum te timor ullus habet. + + Nam tua non tristes pietas te duxit in oras: + + Debetur sedes non nisi laeta piis. + + Te plaga (credo equidem) summi plaga lucida caeli, + + Te laeta aeterno vere vireta tenent. + + Ipsum ipsum Auctorem rerum, quem qui videt, ultra + + Nil habet optandum, jam sine nube vides. + + Usque et ubique vides, at non saturata videndo + + Illo oculos pascis; pressa sed usque fame es. + + Te vis implet opum, sed non (licet impleat) explet; + + Excipit unum aliud, subsequiturque bonum. + + Non te humiles curae, non te mortalia tangunt; + + Prae caelo, et stellis quam tibi sordet humus! + + Sordet humus certe. non sic tamen, ut tua nunquam + + Ad miserum flectas lumina blanda virum; + + Audire aut flentem fugias, et saucia flentis, + + Qua licet, admota corda fovere manu; + + Iactatumque diu ventisque undisque vocare + + Ad laeta Eridani littora stelliferi. + + Quam tua sors felix, quam nostra simillima morti est, + + Felle ego, tu Divum vesceris ambrosia. + + Non tamen invideo tua gaudia, sed miser opto, + + Laetitiae consors quam prius esse tuae. + +
+ +
+
diff --git a/spec/fixtures/petrov_eleg02_with_internal_error.xml b/spec/fixtures/petrov_eleg02_with_internal_error.xml new file mode 100644 index 0000000..7a9b595 --- /dev/null +++ b/spec/fixtures/petrov_eleg02_with_internal_error.xml @@ -0,0 +1,255 @@ + + + + + +
+ + Siccine dividimur, vita mihi carior Uxor, + + Morte tua nostrum dissociante thorum? + + Siccine me miserum, nunquam relictura, relinquis + + Me miserum, et Natos, pignora cara, tuos? + + Non te Bactra tenent, non me nunc ultima Thule, + + Longius est spatium, nos quod abesse facit. + + Nunc mihi, nunc cantum ventosque, amnesque morantem, + + Nunc cuperem auditas Manibus esse fides. + + Non summo ut faciam quercus descendere ab Aemo; + + Aut stare immotas voce canentis aves. + + Sed carae ut repetam fugientem conjugis Umbram + + Nunc prece, nunc cythara consociante preces + + Irem audax (amor ipse facem praeferret eunti) + + Plena tenebrarum per loca, plena metus. + + Atque aliquis miserans maesta de gente silentum, + + Quos olim simili vulnere stravit amor, + + Ostendens procul Elysium, loca laeta piorum, + + „Quam petis, ille tenet“, diceret, „ille locus“. + + Non me, non novies Styx interfusa teneret + + Viminea et novies trajicienda rate. + + Non fera vipereo terreret crine Megaera, + + Majestas Stygii non truculenta Jovis. + + Forsan et ille pius lacrymas ad verba precantis + + Funderet, et reditum Conjugis annueret. + + Quid loquor ah! demens? non est revocabilis ultra, + + Transvecta est Stygios quae semel Umbra lacus. + + Non redit ad fontem, quae fontem deserit unda. + + Non reflorescunt, quae cecidere, rosae. + + Ergo, quod est miseris reliquum solumque levamen, + + Quo lever, heu! superest nil nisi flere mihi, + + Nil nisi flere meos, saevissima vulnera, casus, + + Dum cineri uxoris jungar et ipse cinis. + + Vix afflicta Domus geminati insignia luctus + + Exuerat, madidas non bene sicca genas: + + Ecce cadit saevae jam tertia victima Morti + + Uxor, vulneribus victima caesa tribus. + + Non fuit illa tibi communi lege necanda, + + Impia Mors, plagis percutienda fuit. + + Cuncta tui in miseram consumpsti tela furoris, + + In sola haeserunt sed tua tela cute. + + Membra malis cessere, animus fuit altior illis, + + Tu fragilis victrix corporis, ille tui. + + Saepe opus igne fuit, ferroque; ullumne dolentis + + Inter eas poenas edidit illa sonum? + + Num viso extimuit ferro, ingemuitve recepto? + + Non patiens gemitum, sed miser ipse dabam. + + Ah! chalybe immiti languentis caesa rigabat + + Membra cruor: lacrymis non maduere genae. + + Num, quando monita est, momenta novissima vitae + + Instare, et celeri jam properare gradu? + + Scilicet hos animos illi mens inscia noxae, + + Inque Deum pietas, et proba vita dabat, + + Hos amor in miseros, miserisque intenta juvandis, + + Clausa sibi, reliquis semper aperta manus: + + Et vigil in Natos cura, et studium acre tuendae + + In nivea morum simplicitate domus: + + Et tormenta per haec candentis atrocia ferri, + + Quae toties visa est sustinuisse libens, + + Posthuma vitandi tormenta, piantia Manes, + + Spes prope certa, sibi si qua pianda forent. + + Hos animos etiam illa dabant, quae pectore forti + + Ex gemina amissa vulnera prole tulit. + + O Superi, quantum vidit maeroris amari, + + Et quantum vidit roboris illa dies! + + Quae caruere genae lacrymis, et questibus ora? + + Fundere nec lacrymas visa, nec illa queri. + + Exuerat Matrem coram, Matrem intus agebat, + + Non se, sed miserum commiserata Virum. + + Dotibus his tantis quid nunc bona corporis addam? + + Quid cultum ingenuis artibus ingenium? + + Quid quam dulce melos manabat ab ore loquentis, + + In quo opifex mellis fecerat ipsa favos? + + Talem fata mihi rapuere, immitia fata, + + Consortem thalami, subsidiumque mei. + + Post duo dilectae crudelia funera prolis, + + Praesto illa, auxilium quae mihi ferret, erat. + + Tota videbatur gens esse superstes in illa + + Nullaque, ea salva, membra recisa Domus. + + Nec me illa omnino miserum solante putabam, + + Illa levamen erat levantis, et illa comes. + + Decrescit siquidem fidas diffusus in aures + + Luctus, ut in rivos secta fit unda minor. + + Adde alios casus, et quae mala plurima passus, + + Insontem invidiae vi superante, fui: + + Nunc mihi fraude mala jus libertatis ademptum, + + Nunc raptae, parcus quas dabat usus, opes. + + Dum tu aderas, uxor, felix dicebar, eramque, + + Nil nocuit telis sors mihi saeva suis. + + Vim mala perdebant in dulci conjugis ore, + + Et quam tu, poterant aspera fata minus. + + Cui querar infelix? cui nunc mea tristia dicam? + + Quae lacrymas posthac terget amica manus? + + Cuncta, illa rapta, rapuit manus invida Parcae, + + Unde afflicta malis mens capiebat opem. + + Nec, quia ter denos mecum una exegerit annos + + Est mihi, ceu sero rapta, dolenda minus. + + Ah! magis illa ligant, quorum est diuturnior usus, + + Et plus, quae plus sunt nexa, dirempta dolent. + + Sic tener, ac mollis ramo si ramus adhaesit, + + Disjungas facili vincla novella manu. + + Frangitur annosus, vel vix victusque gemensque + + Alter ab amplexu solvitur alterius. + + Nullaque sat longa est, quae desinit esse, voluptas, + + Et nulla est magno longa in amore mora. + + Longa mora est tali mihi nunc uxore carenti, + + Omnis mense dies longior, hora die est. + + Quid moror ergo miser? cur non invisa relinquo + + Lumina? cur te non, o mea vita, sequor? + + Tu mihi dicebas, sine me nil dulce futurum, + + Non si ipsum flueret nectar in ora, tibi. + + Quo sola ergo fugis, comitem aspernata maritum? + + In rapidos abeunt cur tua dicta Notos? + + Sed non sola fugis: me tecum, ubicumque moraris, + + Qui bene nos junxit, vivere cogit amor. + + Una mei pars tecum abiit, minor altera mecum est, + + Pars abiit melior, plena dolore manet. + + Ast haec ipsa brevi tua post vestigia curret, + + A majore nequit pars procul esse minor. + + O volet illa dies, quae partes uniat ambas, + + Meque addat comitem tempus in omne tibi! + + Mors tua divisit, mea nos conjungat, et urna + + Consociet, thalamus quos sociare nequit. + +
+ +
+
From 172367e31981f72a5a387a6318a4e65702fbc50a Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 13:51:30 +0200 Subject: [PATCH 2/8] Fix regexp for closing tags only again --- lib/llt/segmenter.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/llt/segmenter.rb b/lib/llt/segmenter.rb index f39b01d..a0a0970 100644 --- a/lib/llt/segmenter.rb +++ b/lib/llt/segmenter.rb @@ -170,8 +170,9 @@ def take_all_closing_tags(scanner, sentence) end end + # this will not match self contained nodes like def closing_tags_only?(str) - str.match(/\A(\s*<.*?\/.*?>\s*)+\z/) + str.match(/\A(\s*<\/.*?>\s*)+\z/) end From d59a80d47f5378c451a8d55fa645a58856e416de Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 13:52:21 +0200 Subject: [PATCH 3/8] Deactivate newline boundary for xml files --- lib/llt/segmenter.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/llt/segmenter.rb b/lib/llt/segmenter.rb index a0a0970..4d0751b 100644 --- a/lib/llt/segmenter.rb +++ b/lib/llt/segmenter.rb @@ -51,8 +51,14 @@ def setup(options) @indexing = parse_option(:indexing, options) @id = 0 if @indexing + # newline_boundary is only active when we aren't working with xml! nl_boundary = parse_option(:newline_boundary, options) - @sentence_closer = Regexp.union(SENTENCE_CLOSER, /\n{#{nl_boundary}}/) + + @sentence_closer = build_sentence_closer_regexp(nl_boundary) + end + + def build_sentence_closer_regexp(nl_boundary) + @xml ? SENTENCE_CLOSER : Regexp.union(SENTENCE_CLOSER, /\n{#{nl_boundary}}/) end # Used to normalized wonky whitespace in front of or behind direct speech From 16ffe31f590e484ed5d0e809b72a449f78a822e5 Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 13:53:57 +0200 Subject: [PATCH 4/8] Add guard to avoid endless loops --- lib/llt/segmenter.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/llt/segmenter.rb b/lib/llt/segmenter.rb index 4d0751b..2666f99 100644 --- a/lib/llt/segmenter.rb +++ b/lib/llt/segmenter.rb @@ -121,8 +121,12 @@ def toggle_direct_speech_status def scan_through_string(scanner, sentences = []) while scanner.rest? + loop_guard = scanner.pos + sentence = scan_until_next_sentence(scanner, sentences) + raise if scanner.pos == loop_guard + if @xml rebuild_xml_tags(scanner, sentence, sentences) take_all_closing_tags(scanner, sentence) @@ -139,6 +143,10 @@ def scan_through_string(scanner, sentences = []) sentences end + def scan_to_first_real_text(scanner) + scanner.scan_until(/<.*?>\s*(?=\w)/) + end + def scan_until_next_sentence(scanner, sentences) scanner.scan_until(@sentence_closer) || rescue_no_delimiters(sentences, scanner) From aff7368942ca63ed9eabfdefb014c101044833a5 Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 13:58:48 +0200 Subject: [PATCH 5/8] Another update of the damn regexp --- lib/llt/segmenter.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/llt/segmenter.rb b/lib/llt/segmenter.rb index 2666f99..237be97 100644 --- a/lib/llt/segmenter.rb +++ b/lib/llt/segmenter.rb @@ -184,9 +184,8 @@ def take_all_closing_tags(scanner, sentence) end end - # this will not match self contained nodes like def closing_tags_only?(str) - str.match(/\A(\s*<\/.*?>\s*)+\z/) + str.match(/\A(\s*<\/.*?>\s*|\s*<.*?\/>\s*)+\z/) end From 6306f4726a9c017ef50187a2a2753df0181af9f7 Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 14:24:13 +0200 Subject: [PATCH 6/8] =?UTF-8?q?Revert=20change=20for=20=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/llt/segmenter.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/llt/segmenter.rb b/lib/llt/segmenter.rb index 237be97..7343444 100644 --- a/lib/llt/segmenter.rb +++ b/lib/llt/segmenter.rb @@ -31,7 +31,7 @@ def self.default_options # the xml escaped characters cannot be refactored to something along # &(?:amp|quot); - it's an invalid pattern in the look-behind SENTENCE_CLOSER = /(?/ def segment(string, add_to: nil, **options) From 7e528a1c32dd2541d21a48867702ad86516191e4 Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 14:38:07 +0200 Subject: [PATCH 7/8] Another testfile --- ...eleg01_with_endless_loop_no_xml_header.xml | 202 ++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 spec/fixtures/petrov_eleg01_with_endless_loop_no_xml_header.xml diff --git a/spec/fixtures/petrov_eleg01_with_endless_loop_no_xml_header.xml b/spec/fixtures/petrov_eleg01_with_endless_loop_no_xml_header.xml new file mode 100644 index 0000000..9f9291d --- /dev/null +++ b/spec/fixtures/petrov_eleg01_with_endless_loop_no_xml_header.xml @@ -0,0 +1,202 @@ + + + +
+ + Conjugis ut carae patrio mens debita caelo + + Pars melior, miseram laeta reliquit humum: + + Postquam, illa rapta, simul omnis rapta voluptas + + Est mihi (jam ex illo tempore mensis abit) + + Non nisi perpetuos fundunt mea lumina fletus; + + Lux sequitur noctem tristis, et umbra diem. + + Pabula sunt lacrymae, lacrymae sunt pocula, sed + quae + + Plus, Medea, tuo gramine fellis habent. + + Sic me qui pascit, simul enecat humor, et hospes + + Ipse mei cordis, cor mihi luctus edit. + + Ac veluti turtur, sociam cui barbarus auceps + + Exceptam structis perdidit insidiis, + + Si quam forte videt sine vite, et frondibus ulmum, + + Aequalem sorti, consimilemque suae, + + Flectit iter, ramoque sedens miserabilis ales + + Gutture subrauco nil nisi triste gemit. + + Non illum exhilarat facies pulcherrima Veris, + + Nulla sibi in notis pabula quaerit agris: + + Non sociae possunt volucres abducere ramo, + + Ad prope labentes non sitis urget aquas. + + Sic ego. Sic vitam sine te, dulcissima conjux, + + Si vitae haec nomen vita meretur, ago. + + Sola queri misero, sola est mihi flere voluptas, + + Sola loci facies maesta, silensque placet. + + Non aures cantus, non fila loquacia mulcent; + + Non oculos formae gratia, flosque rapit. + + Unam te in sylvis, unam in florentibus hortis, + + Per juga, per valles quaero, nec invenio. + + Nec magis Eurydice est Vati quaesita marito, + + Tartareum quamvis viderit ille canem: + + Nec magis est Cephalo Procris defleta, videnti + + Deceptae errorem, flagitiumque manus; + + Quam totas ego te noctes, mea vita, diesque + + Quaero, nec inventam maestus abesse queror. + + Et tamen ante oculos errat tua semper imago, + + (Quid non fingit amans?) et tua verba sonant. + + Si qua avis in densis, Siren innoxia, lucis + + Est audita mihi fundere dulce melos, + + Sisto gradum, et similis deceptus imagine vocis + + Est, inquam, est cantus conjugis ille meae. + + Si quando ad fontes, aut ad vernantia prata, + + Aut maris ad placidas me tulit error aquas, + + Hic locus est, dico, quem visere saepe solebat. + + Quae mora (jam sol est ortus) abesse facit? + + Sed jam jam veniet; latet illa forte sub umbra, + + Aut illi pietas est sua causa morae. + + Causa morae est certe pietas: nisi fallimur, haec est, + + Fundentem ad superos quae videt hora preces. + + Mox sat ut illusum me liquit amabilis error, + + Protinus ex oculis bina fluenta cadunt. + + Bina fluenta cadunt, quorum hinc dolor elicit unum, + + Inde aliud, tanti causa doloris, amor. + + Meque ipsum incuso, quod sim tam stultus, et amens, + + Et pascam aerumnas crudelitate meas: + + Rursus in errores tamen hos delabor, et hujus + + Erroris rursus paenitet esse reum. + + Sic pugnant mea vota meis contraria votis, + + Nec placet, heu! misero quod modo dulce fuit. + + Nec quod sim discors, angit modo; saevius angit + + Vivere me longos te sine posse dies. + + Ah! ubi sunt voces illae, et mea fortia verba? + + Ah! ubi, quae verbis debet inesse, fides? + + Me quoque rapturam subito, quae te hora tulisset, + + Et pariter praedam mortis utrumque fore? + + Ecce tamen vivo, nec post nova cornua Phoebes + + Vis me maeroris perdere longa potest. + + Heu! quae dura silex, quod inexsuperabile robur, + + Quod ferrum, et triplex aes mihi pectus obit? + + Vivo equidem, vivo, sed morte est tristior ipsa, + + Quae sine te, conjux, vita relicta mihi est. + + At tu nunc choreis Natorum immixta tuorum, + + Qui (prona) facili ad Superos te praeiere (via) gradu, + + Plena Deo frueris, nec, quae tibi parta, bonorum + + Amittendorum te timor ullus habet. + + Nam tua non tristes pietas te duxit in oras: + + Debetur sedes non nisi laeta piis. + + Te plaga (credo equidem) summi plaga lucida caeli, + + Te laeta aeterno vere vireta tenent. + + Ipsum ipsum Auctorem rerum, quem qui videt, ultra + + Nil habet optandum, jam sine nube vides. + + Usque et ubique vides, at non saturata videndo + + Illo oculos pascis; pressa sed usque fame es. + + Te vis implet opum, sed non (licet impleat) explet; + + Excipit unum aliud, subsequiturque bonum. + + Non te humiles curae, non te mortalia tangunt; + + Prae caelo, et stellis quam tibi sordet humus! + + Sordet humus certe. non sic tamen, ut tua nunquam + + Ad miserum flectas lumina blanda virum; + + Audire aut flentem fugias, et saucia flentis, + + Qua licet, admota corda fovere manu; + + Iactatumque diu ventisque undisque vocare + + Ad laeta Eridani littora stelliferi. + + Quam tua sors felix, quam nostra simillima morti est, + + Felle ego, tu Divum vesceris ambrosia. + + Non tamen invideo tua gaudia, sed miser opto, + + Laetitiae consors quam prius esse tuae. + +
+ +
+
From d45ad1b6a32a29124515b84f2b6fd52f5a9836eb Mon Sep 17 00:00:00 2001 From: LFDM <1986gh@gmail.com> Date: Sat, 12 Apr 2014 14:38:16 +0200 Subject: [PATCH 8/8] Use testfiles in spec --- spec/lib/llt/segmenter_spec.rb | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/spec/lib/llt/segmenter_spec.rb b/spec/lib/llt/segmenter_spec.rb index e46ffb5..41a9f43 100644 --- a/spec/lib/llt/segmenter_spec.rb +++ b/spec/lib/llt/segmenter_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' describe LLT::Segmenter do + def load_fixture(filename) + File.read(File.expand_path("../../../fixtures/#{filename}", __FILE__)) + end + let(:segmenter) { LLT::Segmenter.new } describe "#segment" do it "returns an array of LLT::Sentence elements" do @@ -333,6 +337,36 @@ end end + context "with full TEI files" do + it "doesn't go into an endless loop when something is wrong" do + txt = load_fixture('petrov_eleg01_with_endless_loop.xml') + sentences = segmenter.segment(txt, xml: true) + sentences.should_not be_empty + sentences.should have(60).items + end + + it "example II" do + txt = load_fixture('petrov_eleg01_with_endless_loop_no_xml_header.xml') + sentences = segmenter.segment(txt, xml: true) + sentences.should_not be_empty + sentences.should have(60).items + end + + it "example III" do + txt = load_fixture('petrov_eleg01_cleaned.xml') + sentences = segmenter.segment(txt, xml: true) + sentences.should_not be_empty + sentences.should have(60).items + end + + it "example IV" do + txt = load_fixture('petrov_eleg02_with_internal_error.xml') + sentences = segmenter.segment(txt, xml: true) + sentences.should_not be_empty + sentences.should have(74).items + end + end + describe "takes an optional keyword argument add_to" do class ParagraphDummy attr_reader :sentences