a plugin for compromise
v
npm install compromise-paragraphs
```js let str = `What's with these homies dissin' my girl? Why do they gotta front? What did we ever do to these guys that made them so violent? Woo-hoo, but you know I'm yours. Woo-hoo, and I know you're mine. Woo-hoo, and that's for all time ` let doc = nlp(str).paragraphs() doc.length // 3 doc.json(options) /*[ {text:'What's with these ...', sentences:[{},{}]} {text:'What did we ever ...', sentences:[{}]} ]*/ // get the second paragraph doc.eq(1).text() // 'What did we ever ...' // get the first two sentences of the first paragraph doc .first() .sentences() .slice(0, 2) ``` This is a tentative implementation of `.paragraphs()` and associated methods, for compromise. This is tricky because a sentence is a top-level structure to compromise, (and english grammar!), and combining sentences together would have some consequences about grammatical tags. Instead, this plugin is a (partially-complete) wrapper for sentence objects, so that you can call things like `.text()` and `.json()` on a paragraph, but then drop back down to `.sentences()` after, and work as normal. The term objects passed into `.paragraphs()` are mutable, so they will actually change when you transform them: ```js let doc = nlp(str).paragraphs() doc = doc.filter(p => { return p.has('#Determiner guys') }) // What did we ever do to these guys that made them so violent? ``` ### [Demo](https://observablehq.com/@spencermountain/compromise-paragraphs) ## API: outputs: - .text() - .json() matches: - .match() - .not() - .if() - .ifNo() - .has() selectors: - .sentences() - .terms() accessors: - .eq() - .first() - .last() loops: - .forEach() - .map() - .filter() MIT