Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/azu/nlp-pattern-match
Natural Language pattern matching library for JavaScript.
https://github.com/azu/nlp-pattern-match
english japanese javascript morphological-analysis nlcst nlp pos
Last synced: 4 months ago
JSON representation
Natural Language pattern matching library for JavaScript.
- Host: GitHub
- URL: https://github.com/azu/nlp-pattern-match
- Owner: azu
- License: mit
- Created: 2017-10-07T11:20:30.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2022-02-23T12:30:54.000Z (almost 3 years ago)
- Last Synced: 2024-10-30T04:17:52.933Z (4 months ago)
- Topics: english, japanese, javascript, morphological-analysis, nlcst, nlp, pos
- Language: TypeScript
- Size: 425 KB
- Stars: 19
- Watchers: 4
- Forks: 7
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# nlp-pattern-match [](https://github.com/azu/nlp-pattern-match/actions?query=workflow%3A"test")
Natural Language pattern matching library for JavaScript.
This library based on [NLCST](https://github.com/syntax-tree/nlcst) that is Natural Language Concrete Syntax Tree format.
You can write pattern match syntax using Part-of-speech(POS) tagging, Morphological Analysis(形態素解析).
## Packages
This repository is monorepo.
This repository includes following packages.| Package | npm |
| ------ | --- |
| nlcst-parse-english | [](https://www.npmjs.com/package/nlcst-parse-english) |
| nlcst-parse-japanese | [](https://www.npmjs.com/package/nlcst-parse-japanese) |
| nlcst-pattern-match | [](https://www.npmjs.com/package/nlcst-pattern-match) |
| match-test-replace | [](https://www.npmjs.com/package/match-test-replace) |
| nlcst-types | [](https://www.npmjs.com/package/nlcst-types) |
| unist-types | [](https://www.npmjs.com/package/unist-types) |## Support Language
Support English and Japanese.
In other words, We have the above language parser for NLCST.If you want to add language, Welcome to Pull Request.
## Match strictly
[NLCST](https://github.com/syntax-tree/nlcst) Parser and Pattern match.
You write Pattern of NLCST object in `patternMatcher.tag`${object}`.
[nlcst-pattern-match](./packages/nlcst-pattern-match) aim to provide that match strict pattern.
For more details, See [nlcst-pattern-match](./packages/nlcst-pattern-match) document.
```js
import { PatternMatcher } from "nlcst-pattern-match";
import { EnglishParser } from "nlcst-parse-english";
const englishParser = new EnglishParser();
const patternMatcher = new PatternMatcher({
parser: englishParser
});
const pattern = patternMatcher.tag`This is a ${{
type: "WordNode",
children: [
{
type: "TextNode",
value: /\w+/
}
]
}}.`;
let text = "Hello, This is a pen.";
const results = patternMatcher.match(text, pattern);
const result = results[0];assert.strictEqual(
text.slice(result.position.start.offset, result.position.end.offset),
"This is a pen."
);
```## Easy to replace
[match-test-replace](./pacakges/match-test-replace) aim to provide match, test and replace easily.
```js
import { replaceAll, matchTestReplace } from "match-test-replace";
const text = "webkit is matched,but node-webkit is not match";
const res = matchTestReplace(text, {
pattern: /(\S*?)webkit/g,
replace: () => "WebKit",
test: ({ captures }) => {
return captures[0] !== "node-";
}
});
assert.ok(res.ok === true, "should be ok: false");
assert.strictEqual(res.results.length, 1, "no replace");
assert.strictEqual(replaceAll(text, res.results).output, "WebKit is matched,but node-webkit is not match");
```## Easy + Strict
Easy match and replace, but test strictly.
```js
import * as assert from "assert";
import { replaceAll, matchTestReplace } from "match-test-replace";
import { PatternMatcher } from "nlcst-pattern-match";
import { EnglishParser } from "nlcst-parse-english";
const englishParser = new EnglishParser();
const matcher = new PatternMatcher({ parser: englishParser });
// https://developers.google.com/style/clause-order
// NG: Click Delete if you want to delete the entire document.
// OK: To delete the entire document, click Delete.
const text = 'Click Delete if you want to delete the entire document.';
const res = matchTestReplace(text, {
pattern: /Click (\w+) if you want to (.+)./,
replace: ({ captures }) => {
console.log(captures);
return `To ${captures[1]}, click ${captures[0]}.`
},
test: ({ all }) => {
const pattern = matcher.tag`Click ${{
type: "WordNode",
data: {
// Verb
pos: /^VB/
}
}}`;
return matcher.test(all, pattern);
}
});
assert.ok(res.ok === true, "should be ok: true");
const output = replaceAll(text, res.results).output;
assert.strictEqual(output, "To delete the entire document, click Delete.");
```## Changelog
See [Releases page](https://github.com/azu/nlp-pattern-match/releases).
## Development
yarn
# setup pacakges
yarn bootstrap
# test
yarn test## Contributing
Pull requests and stars are always welcome.
For bugs and feature requests, [please create an issue](https://github.com/azu/nlp-pattern-match/issues).
1. Fork it!
2. Create your feature branch: `git checkout -b my-new-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin my-new-feature`
5. Submit a pull request :D## Author
- [github/azu](https://github.com/azu)
- [twitter/azu_re](https://twitter.com/azu_re)## License
MIT © azu