# morpheme-match

> match function that match token(形態素解析) with sentence.

Latest version **2.0.4** (published 2019-10-20) · MIT license · 0 weekly downloads

## Install

```sh
npm install morpheme-match
pnpm add morpheme-match
yarn add morpheme-match
bun add morpheme-match
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.4 |
| Published | 2019-10-20 |
| First published | 2016-06-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 18.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 15 |
| Author | azu |
| Maintainers | azu |
| Keywords | japanese, morpheme, text, 形態素 |

## Links

- npm: https://www.npmjs.com/package/morpheme-match
- Repository: https://github.com/azu/morpheme-match
- Issues: https://github.com/azu/morpheme-match/issues
- npm.io page: https://npm.io/package/morpheme-match

## Alternatives

- [ext-list](https://npm.io/package/ext-list.md) — 6.3M weekly downloads
- [@lexical/selection](https://npm.io/package/@lexical/selection.md) — 3.8M weekly downloads
- [@lexical/text](https://npm.io/package/@lexical/text.md) — 3.6M weekly downloads
- [@lexical/clipboard](https://npm.io/package/@lexical/clipboard.md) — 3.0M weekly downloads
- [@tiptap/extension-mention](https://npm.io/package/@tiptap/extension-mention.md) — 3.0M weekly downloads

## Recent versions

- 2.0.4 (latest) — 2019-10-20
- 2.0.0 — 2019-06-14
- 1.2.1 — 2018-12-31
- 1.2.0 — 2018-12-31
- 1.1.0 — 2016-12-03
- 1.0.1 — 2016-06-07

## README

# morpheme-match 

morpheme-match provide match function that match token with sentence.

形態素解析したトークンを元に、文章にマッチするトークンが含まれているかをチェックするライブラリ。

## Install

Install with [npm](https://www.npmjs.com/):

    npm install morpheme-match

## Usage

### createTokenMatcher(expectedTokens): function

`createTokenMatcher()` return `function(token): { match: boolean, tokens?: Array, skipped? Array }`.

We want to check "名詞かもしれない" contain "かも" token. 
Write following:

See example code with [azu.github.io/morpheme-match/#名詞(かも)しれない](http://azu.github.io/morpheme-match/#名詞(かも)しれない).

```js
import {createTokenMatcher} from "morpheme-match";
const matchToken = createTokenMatcher([
    {
        "surface_form": "かも",
        "pos": "助詞",
        "pos_detail_1": "副助詞",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "*",
        "conjugated_form": "*",
        "basic_form": "かも",
        "reading": "カモ",
        "pronunciation": "カモ"
    }
]);
const tokens = [
    {
        "surface_form": "名詞",
        "pos": "名詞",
        "pos_detail_1": "一般",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "*",
        "conjugated_form": "*",
        "basic_form": "名詞",
        "reading": "メイシ",
        "pronunciation": "メイシ"
    },
    // Hit!
    {
        "surface_form": "かも",
        "pos": "助詞",
        "pos_detail_1": "副助詞",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "*",
        "conjugated_form": "*",
        "basic_form": "かも",
        "reading": "カモ",
        "pronunciation": "カモ"
    },
    {
        "surface_form": "しれ",
        "pos": "動詞",
        "pos_detail_1": "自立",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "一段",
        "conjugated_form": "未然形",
        "basic_form": "しれる",
        "reading": "シレ",
        "pronunciation": "シレ"
    },
    {
        "surface_form": "ない",
        "pos": "助動詞",
        "pos_detail_1": "*",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "特殊・ナイ",
        "conjugated_form": "基本形",
        "basic_form": "ない",
        "reading": "ナイ",
        "pronunciation": "ナイ"
    }
];
const result = tokens.some(token => {
    const {match} = matchToken(token);
    return match;
});
console.log(result);// true
```

If want to get matched token, write following:


```js
let resultTokens = [];
const result = tokens.some(token => {
    const {match, tokens, skipped} = matchToken(token);
    resultTokens = tokens;
    return match;
});
console.log(resultTokens);
/*
[ { surface_form: 'かも',
    pos: '助詞',
    pos_detail_1: '副助詞',
    pos_detail_2: '*',
    pos_detail_3: '*',
    conjugated_type: '*',
    conjugated_form: '*',
    basic_form: 'かも',
    reading: 'カモ',
    pronunciation: 'カモ' } ]
*/
```

### Tips

morpheme-matchは`_`から始まるキーを無視するため、メタ情報は`_`で書き込む事ができます。

```js
const matchToken = createTokenMatcher([
    {
        "surface_form": "かも",
        "pos": "助詞",
        "pos_detail_1": "副助詞",
        "pos_detail_2": "*",
        "pos_detail_3": "*",
        "conjugated_type": "*",
        "conjugated_form": "*",
        "basic_form": "かも",
        "reading": "カモ",
        "pronunciation": "カモ",
        "_cature": "$1"
    }
]);
```

キー`_skippable`が`true`の場合はマッチしない場合は無視されます。


```js
const matchToken = createTokenMatcher([
    {
        "surface_form": "かも",
    },
    {
        "surface_form": "、",
        "_skippable": true,
    },
    {
        "surface_form": "しれ",
    },
]);
```



## 関連

- [azu/morpheme-match-all: A wrapper of morpheme-match API. Match all kuromoji's tokens.](https://github.com/azu/morpheme-match-all)
    - A wrapper for morpheme-match
- [textlint-ja/textlint-rule-morpheme-match: 形態素解析結果のTokenベースの辞書でマッチするtextlintルール](https://github.com/textlint-ja/textlint-rule-morpheme-match)

## Changelog

See [Releases page](https://github.com/azu/morpheme-match/releases).

## Running tests

Install devDependencies and Run `npm test`:

    npm i -d && npm test

## Contributing

Pull requests and stars are always welcome.
For bugs and feature requests, [please create an issue](https://github.com/azu/morpheme-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](http://twitter.com/azu_re)

## License

MIT © azu

---
_Source: https://npm.io/package/morpheme-match · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
