https://github.com/wooorm/parse-english
English (natural language) parser
https://github.com/wooorm/parse-english
english natural-language parse
Last synced: 5 months ago
JSON representation
English (natural language) parser
- Host: GitHub
- URL: https://github.com/wooorm/parse-english
- Owner: wooorm
- License: mit
- Created: 2014-05-21T21:24:39.000Z (over 11 years ago)
- Default Branch: main
- Last Pushed: 2024-10-24T11:41:19.000Z (12 months ago)
- Last Synced: 2025-03-31T07:03:31.161Z (6 months ago)
- Topics: english, natural-language, parse
- Language: JavaScript
- Homepage: https://wooorm.com/parse-english/
- Size: 886 KB
- Stars: 160
- Watchers: 7
- Forks: 9
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Funding: funding.yml
- License: license
Awesome Lists containing this project
README
# parse-english
[![Build][build-badge]][build]
[![Coverage][coverage-badge]][coverage]
[![Downloads][downloads-badge]][downloads]
[![Size][size-badge]][size]Natural language parser, for the English language, that produces [nlcst][].
## Contents
* [What is this?](#what-is-this)
* [When should I use this?](#when-should-i-use-this)
* [Install](#install)
* [Use](#use)
* [API](#api)
* [`ParseEnglish()`](#parseenglish)
* [Algorithm](#algorithm)
* [Types](#types)
* [Compatibility](#compatibility)
* [Security](#security)
* [Related](#related)
* [Contribute](#contribute)
* [License](#license)## What is this?
This package exposes a parser that takes English natural language and produces
a syntax tree.## When should I use this?
If you want to handle English natural language as syntax trees manually, use
this.Alternatively, you can use the retext plugin [`retext-english`][retext-english],
which wraps this project to also parse natural language at a higher-level
(easier) abstraction.For Dutch or most Latin-script languages, you can instead use
[`parse-dutch`][parse-dutch] or [`parse-latin`][parse-latin].## Install
This package is [ESM only][esm].
In Node.js (version 16+), install with [npm][]:```sh
npm install parse-english
```In Deno with [`esm.sh`][esmsh]:
```js
import {ParseEnglish} from 'https://esm.sh/parse-english@7'
```In browsers with [`esm.sh`][esmsh]:
```html
import {ParseEnglish} from 'https://esm.sh/parse-english@7?bundle'
```
## Use
```js
import {ParseEnglish} from 'parse-english'
import {inspect} from 'unist-util-inspect'const tree = new ParseEnglish().parse(
'Mr. Henry Brown: A hapless but friendly City of London worker.'
)console.log(inspect(tree))
```Yields:
```txt
RootNode[1] (1:1-1:63, 0-62)
└─0 ParagraphNode[1] (1:1-1:63, 0-62)
└─0 SentenceNode[23] (1:1-1:63, 0-62)
├─0 WordNode[2] (1:1-1:4, 0-3)
│ ├─0 TextNode "Mr" (1:1-1:3, 0-2)
│ └─1 PunctuationNode "." (1:3-1:4, 2-3)
├─1 WhiteSpaceNode " " (1:4-1:5, 3-4)
├─2 WordNode[1] (1:5-1:10, 4-9)
│ └─0 TextNode "Henry" (1:5-1:10, 4-9)
├─3 WhiteSpaceNode " " (1:10-1:11, 9-10)
├─4 WordNode[1] (1:11-1:16, 10-15)
│ └─0 TextNode "Brown" (1:11-1:16, 10-15)
├─5 PunctuationNode ":" (1:16-1:17, 15-16)
├─6 WhiteSpaceNode " " (1:17-1:18, 16-17)
├─7 WordNode[1] (1:18-1:19, 17-18)
│ └─0 TextNode "A" (1:18-1:19, 17-18)
├─8 WhiteSpaceNode " " (1:19-1:20, 18-19)
├─9 WordNode[1] (1:20-1:27, 19-26)
│ └─0 TextNode "hapless" (1:20-1:27, 19-26)
├─10 WhiteSpaceNode " " (1:27-1:28, 26-27)
├─11 WordNode[1] (1:28-1:31, 27-30)
│ └─0 TextNode "but" (1:28-1:31, 27-30)
├─12 WhiteSpaceNode " " (1:31-1:32, 30-31)
├─13 WordNode[1] (1:32-1:40, 31-39)
│ └─0 TextNode "friendly" (1:32-1:40, 31-39)
├─14 WhiteSpaceNode " " (1:40-1:41, 39-40)
├─15 WordNode[1] (1:41-1:45, 40-44)
│ └─0 TextNode "City" (1:41-1:45, 40-44)
├─16 WhiteSpaceNode " " (1:45-1:46, 44-45)
├─17 WordNode[1] (1:46-1:48, 45-47)
│ └─0 TextNode "of" (1:46-1:48, 45-47)
├─18 WhiteSpaceNode " " (1:48-1:49, 47-48)
├─19 WordNode[1] (1:49-1:55, 48-54)
│ └─0 TextNode "London" (1:49-1:55, 48-54)
├─20 WhiteSpaceNode " " (1:55-1:56, 54-55)
├─21 WordNode[1] (1:56-1:62, 55-61)
│ └─0 TextNode "worker" (1:56-1:62, 55-61)
└─22 PunctuationNode "." (1:62-1:63, 61-62)
```## API
This package exports the identifier [`ParseEnglish`][api-parse-english].
There is no default export.### `ParseEnglish()`
Create a new parser.
`ParseEnglish` extends `ParseLatin`.
See [`parse-latin`][parse-latin] for API docs.## Algorithm
All of [`parse-latin`][parse-latin] is included, and the following support for
the English natural language:* unit abbreviations (`tsp.`, `tbsp.`, `oz.`, `ft.`, and more)
* time references (`sec.`, `min.`, `tues.`, `thu.`, `feb.`, and more)
* business Abbreviations (`Inc.` and `Ltd.`)
* social titles (`Mr.`, `Mmes.`, `Sr.`, and more)
* rank and academic titles (`Dr.`, `Rep.`, `Gen.`, `Prof.`, `Pres.`, and more)
* geographical abbreviations (`Ave.`, `Blvd.`, `Ft.`, `Hwy.`, and more)
* American state abbreviations (`Ala.`, `Minn.`, `La.`, `Tex.`, and more)
* Canadian province abbreviations (`Alta.`, `Qué.`, `Yuk.`, and more)
* English county abbreviations (`Beds.`, `Leics.`, `Shrops.`, and more)
* common elision (omission of letters) (`’n’`, `’o`, `’em`, `’twas`, `’80s`,
and more)## Types
This package is fully typed with [TypeScript][].
It exports no additional types.## Compatibility
Projects maintained by me are compatible with maintained versions of Node.js.
When I cut a new major release, I drop support for unmaintained versions of
Node.
This means I try to keep the current release line, `parse-english@^7`,
compatible with Node.js 16.## Security
This package is safe.
## Related
* [`parse-latin`](https://github.com/wooorm/parse-latin)
— Latin-script natural language parser
* [`parse-dutch`](https://github.com/wooorm/parse-dutch)
— Dutch natural language parser## Contribute
Yes please!
See [How to Contribute to Open Source][contribute].## License
[MIT][license] © [Titus Wormer][author]
[build-badge]: https://github.com/wooorm/parse-english/workflows/main/badge.svg
[build]: https://github.com/wooorm/parse-english/actions
[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/parse-english.svg
[coverage]: https://codecov.io/github/wooorm/parse-english
[downloads-badge]: https://img.shields.io/npm/dm/parse-english.svg
[downloads]: https://www.npmjs.com/package/parse-english
[size-badge]: https://img.shields.io/badge/dynamic/json?label=minzipped%20size&query=$.size.compressedSize&url=https://deno.bundlejs.com/?q=parse-english
[size]: https://bundlejs.com/?q=parse-english
[npm]: https://docs.npmjs.com/cli/install
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
[esmsh]: https://esm.sh
[typescript]: https://www.typescriptlang.org
[contribute]: https://opensource.guide/how-to-contribute/
[license]: license
[author]: https://wooorm.com
[retext-english]: https://github.com/retextjs/retext/tree/main/packages/retext-english
[nlcst]: https://github.com/syntax-tree/nlcst
[parse-latin]: https://github.com/wooorm/parse-latin
[parse-dutch]: https://github.com/wooorm/parse-dutch
[api-parse-english]: #parseenglish