Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

analyze-desumasu-dearu

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

analyze-desumasu-dearu - npm Package Compare versions

Comparing version 3.0.4 to 3.1.0

106

lib/analyze.js

@@ -29,2 +29,11 @@ // LICENSE : MIT

/**
* デフォルトのオプション値
* @type {{ignoreConjunction: boolean}}
*/
var defaultOptions = {
// 接続的な "である" を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
};
/**
* Type enum

@@ -53,4 +62,50 @@ * @type {{desu: string, dearu: string}}

}
/**
*
* tokenが文末のtokenなのかどうか
* 文末とは"。"やこれ以上後ろにtokenがないケースを示す
* @param {AnalyzedToken} targetToken
* @param allTokens
* @returns {boolean}
*/
var isLastToken = function isLastToken(targetToken, allTokens) {
var nextPunctureToken = findNextPunctureToken(targetToken, allTokens);
if (nextPunctureToken === undefined) {
return true;
}
var nextPunctureTokenSurface = nextPunctureToken.surface_form;
if (/[\!\?!?。]/.test(nextPunctureTokenSurface)) {
return true;
}
};
/**
* targetTokenより後ろにあるtokenから切り口となるtokenを探す
* @param targetToken
* @param allTokens
* @returns {AnalyzedToken|undefined}
*/
var findNextPunctureToken = function findNextPunctureToken(targetToken, allTokens) {
var PUNCTUATION = /、|。/;
var CONJUGATED_TYPE = /特殊/;
var indexOfTargetToken = allTokens.indexOf(targetToken);
// value is collection of these tokens: [ {target}, token, token, nextTarget|PunctuationToken ]
var postTokens = allTokens.slice(indexOfTargetToken + 1);
return find(postTokens, function (token) {
// 接続、末尾なので切る
if (PUNCTUATION.test(token["surface_form"])) {
return true;
}
// 次の特殊・がきたら
if (CONJUGATED_TYPE.test(token["conjugated_type"])) {
return true;
}
// 明示的なtokenがない場合は、名詞がきたらそこで切ってしまう
if (token["pos"] === "名詞") {
return true;
}
return false;
});
};
/**
* tokensからAnalyzedTokenにmapを作る
* @param {AnalyzedToken[]}tokens

@@ -65,20 +120,4 @@ * @returns {function(token: AnalyzedToken)}

return function mapTokenToAnalyzedResult(token) {
var PUNCTUATION = /、|。/;
var CONJUGATED_TYPE = /特殊/;
var indexOfTargetToken = tokens.indexOf(token);
// value is collection of these tokens: [ {target}, token, token, nextTarget|PunctuationToken ]
var postTokens = tokens.slice(indexOfTargetToken + 1);
var nextPunctureToken = find(postTokens, function (token) {
if (PUNCTUATION.test(token["surface_form"])) {
return true;
}
if (CONJUGATED_TYPE.test(token["conjugated_type"])) {
return true;
}
// 明示的なtokenがない場合は、名詞がきたらそこで切ってしまう
if (token["pos"] === "名詞") {
return true;
}
return false;
});
var nextPunctureToken = findNextPunctureToken(token, tokens);
// if has not next token, use between token <--> last.

@@ -105,6 +144,10 @@ var nextTokenIndex = nextPunctureToken ? tokens.indexOf(nextPunctureToken) : tokens.length;

* `text`から敬体(ですます調)と常体(である調)を取り出した結果を返します。
* @param text
* @param {string} text
* @param {Object} options
* @returns {Promise.<AnalyzedResultObject[]>}
*/
function analyze(text) {
var options = arguments.length <= 1 || arguments[1] === undefined ? defaultOptions : arguments[1];
var ignoreConjunction = options.ignoreConjunction !== undefined ? options.ignoreConjunction : defaultOptions.ignoreConjunction;
return getTokenizer().then(function (tokenizer) {

@@ -118,5 +161,11 @@ var tokens = _tokensCacheMap[text] ? _tokensCacheMap[text] : tokenizer.tokenizeForSentence(text);

if (conjugatedType === Types.dearu) {
// "である" を取り出す。この時点では接続なのか末尾なのかは区別できない
if (token["pos"] === "助動詞" && token["conjugated_form"] === "連用形") {
if (nextToken && nextToken["conjugated_type"] === "五段・ラ行アル") {
return true;
// 文末の"である"のみを許容する場合は文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}

@@ -127,3 +176,8 @@ }

if (token["conjugated_form"] === "基本形") {
return true;
// 文末の"です"のみを許容する場合は、文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}

@@ -138,6 +192,9 @@ }

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
function analyzeDesumasu(text) {
return analyze(text).then(function (results) {
var options = arguments.length <= 1 || arguments[1] === undefined ? defaultOptions : arguments[1];
return analyze(text, options).then(function (results) {
return results.filter(isDesumasu);

@@ -149,6 +206,9 @@ });

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
function analyzeDearu(text) {
return analyze(text).then(function (results) {
var options = arguments.length <= 1 || arguments[1] === undefined ? defaultOptions : arguments[1];
return analyze(text, options).then(function (results) {
return results.filter(isDearu);

@@ -155,0 +215,0 @@ });

@@ -14,3 +14,3 @@ {

},
"version": "3.0.4",
"version": "3.1.0",
"description": "文の敬体(ですます調)、常体(である調)を解析",

@@ -26,3 +26,3 @@ "main": "lib/analyze.js",

"scripts": {
"build": "babel src --out-dir lib --source-maps",
"build": "NODE_ENV=production babel src --out-dir lib --source-maps",
"watch": "babel src --out-dir lib --watch --source-maps",

@@ -29,0 +29,0 @@ "prepublish": "npm run --if-present build",

@@ -90,7 +90,21 @@ # analyze-desumasu-dearu [![Build Status](https://travis-ci.org/azu/analyze-desumasu-dearu.svg?branch=master)](https://travis-ci.org/azu/analyze-desumasu-dearu)

### `analyze(text): Promise.<AnalyzedResultObject[]>`
### `analyze(text, options): Promise.<AnalyzedResultObject[]>`
`text`から敬体(ですます調)と常体(である調)を取り出した結果を返します
`options`: 無視オプションを指定できます。
```js
/**
* デフォルトのオプション値
* @type {{ignoreConjunction: boolean}}
*/
const defaultOptions = {
// 接続的な使い方を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
};
````
```js
// AnalyzedResultObjectの配列

@@ -112,3 +126,3 @@ [{

### `analyzeDesumasu(text): Promise.<AnalyzedResultObject[]>`
### `analyzeDesumasu(text, options): Promise.<AnalyzedResultObject[]>`

@@ -123,13 +137,28 @@ `text`に含まれる文の敬体(ですます調)を解析して、AnalyzedResultObjectの配列を返します。

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
export function analyzeDesumasu(text) {
return analyze(text).then(results => results.filter(isDesumasu));
export function analyzeDesumasu(text, options = defaultOptions) {
return analyze(text, options).then(results => results.filter(isDesumasu));
}
```
### `analyzeDearu(text): Promise.<AnalyzedResultObject[]>`
### `analyzeDearu(text, options): Promise.<AnalyzedResultObject[]>`
常体(である調)を解析してAnalyzedResultObjectの配列を返します
`options`: 無視オプションを指定できます。
```js
/**
* デフォルトのオプション値
* @type {{ignoreConjunction: boolean}}
*/
const defaultOptions = {
// 接続的なであるの使い方を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
};
````
内部的には`analyze()`を使っています。

@@ -141,6 +170,7 @@

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
export function analyzeDearu(text) {
return analyze(text).then(results => results.filter(isDearu))
export function analyzeDearu(text, options = defaultOptions) {
return analyze(text, options).then(results => results.filter(isDearu))
}

@@ -147,0 +177,0 @@ ```

@@ -20,2 +20,11 @@ // LICENSE : MIT

/**
* デフォルトのオプション値
* @type {{ignoreConjunction: boolean}}
*/
const defaultOptions = {
// 接続的な "である" を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
};
/**
* Type enum

@@ -44,4 +53,50 @@ * @type {{desu: string, dearu: string}}

}
/**
*
* tokenが文末のtokenなのかどうか
* 文末とは"。"やこれ以上後ろにtokenがないケースを示す
* @param {AnalyzedToken} targetToken
* @param allTokens
* @returns {boolean}
*/
const isLastToken = (targetToken, allTokens) => {
const nextPunctureToken = findNextPunctureToken(targetToken, allTokens);
if (nextPunctureToken === undefined) {
return true;
}
const nextPunctureTokenSurface = nextPunctureToken.surface_form;
if (/[\!\?!?。]/.test(nextPunctureTokenSurface)) {
return true;
}
};
/**
* targetTokenより後ろにあるtokenから切り口となるtokenを探す
* @param targetToken
* @param allTokens
* @returns {AnalyzedToken|undefined}
*/
const findNextPunctureToken = (targetToken, allTokens) => {
const PUNCTUATION = /、|。/;
const CONJUGATED_TYPE = /特殊/;
const indexOfTargetToken = allTokens.indexOf(targetToken);
// value is collection of these tokens: [ {target}, token, token, nextTarget|PunctuationToken ]
const postTokens = allTokens.slice(indexOfTargetToken + 1);
return find(postTokens, token => {
// 接続、末尾なので切る
if (PUNCTUATION.test(token["surface_form"])) {
return true;
}
// 次の特殊・がきたら
if (CONJUGATED_TYPE.test(token["conjugated_type"])) {
return true;
}
// 明示的なtokenがない場合は、名詞がきたらそこで切ってしまう
if (token["pos"] === "名詞") {
return true;
}
return false;
});
};
/**
* tokensからAnalyzedTokenにmapを作る
* @param {AnalyzedToken[]}tokens

@@ -56,20 +111,4 @@ * @returns {function(token: AnalyzedToken)}

return function mapTokenToAnalyzedResult(token) {
const PUNCTUATION = /、|。/;
const CONJUGATED_TYPE = /特殊/;
const indexOfTargetToken = tokens.indexOf(token);
// value is collection of these tokens: [ {target}, token, token, nextTarget|PunctuationToken ]
const postTokens = tokens.slice(indexOfTargetToken + 1);
const nextPunctureToken = find(postTokens, token => {
if (PUNCTUATION.test(token["surface_form"])) {
return true;
}
if (CONJUGATED_TYPE.test(token["conjugated_type"])) {
return true;
}
// 明示的なtokenがない場合は、名詞がきたらそこで切ってしまう
if (token["pos"] === "名詞") {
return true;
}
return false;
});
const nextPunctureToken = findNextPunctureToken(token, tokens);
// if has not next token, use between token <--> last.

@@ -94,6 +133,10 @@ const nextTokenIndex = nextPunctureToken ? tokens.indexOf(nextPunctureToken) : tokens.length;

* `text`から敬体(ですます調)と常体(である調)を取り出した結果を返します。
* @param text
* @param {string} text
* @param {Object} options
* @returns {Promise.<AnalyzedResultObject[]>}
*/
export function analyze(text) {
export function analyze(text, options = defaultOptions) {
const ignoreConjunction = options.ignoreConjunction !== undefined
? options.ignoreConjunction
: defaultOptions.ignoreConjunction;
return getTokenizer().then(tokenizer => {

@@ -107,5 +150,11 @@ const tokens = _tokensCacheMap[text] ? _tokensCacheMap[text] : tokenizer.tokenizeForSentence(text);

if (conjugatedType === Types.dearu) {
// "である" を取り出す。この時点では接続なのか末尾なのかは区別できない
if (token["pos"] === "助動詞" && token["conjugated_form"] === "連用形") {
if (nextToken && nextToken["conjugated_type"] === "五段・ラ行アル") {
return true;
// 文末の"である"のみを許容する場合は文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}

@@ -116,3 +165,8 @@ }

if (token["conjugated_form"] === "基本形") {
return true;
// 文末の"です"のみを許容する場合は、文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}

@@ -127,6 +181,7 @@ }

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
export function analyzeDesumasu(text) {
return analyze(text).then(results => results.filter(isDesumasu));
export function analyzeDesumasu(text, options = defaultOptions) {
return analyze(text, options).then(results => results.filter(isDesumasu));
}

@@ -136,6 +191,7 @@ /**

* @param {string} text
* @param {Object} options
* @return {Promise.<AnalyzedResultObject[]>}
*/
export function analyzeDearu(text) {
return analyze(text).then(results => results.filter(isDearu))
export function analyzeDearu(text, options = defaultOptions) {
return analyze(text, options).then(results => results.filter(isDearu))
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc