0.1.0 • Published 2 years ago

compromise-paragraphs v0.1.0

Weekly downloads
1,335
License
MIT
Repository
github
Last release
2 years ago
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:

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

API:

outputs:

  • .text()
  • .json()

matches:

  • .match()
  • .not()
  • .if()
  • .ifNo()
  • .has()

selectors:

  • .sentences()
  • .terms()

accessors:

  • .eq()
  • .first()
  • .last()

loops:

  • .forEach()
  • .map()
  • .filter()

MIT