Socket
Socket
Sign inDemoInstall

analyze-desumasu-dearu

Package Overview
Dependencies
22
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.1.0 to 4.0.0

261

lib/analyze.js

@@ -5,3 +5,3 @@ // LICENSE : MIT

Object.defineProperty(exports, "__esModule", {
value: true
value: true
});

@@ -13,4 +13,8 @@ exports.isDesumasu = isDesumasu;

exports.analyzeDearu = analyzeDearu;
exports.Types = void 0;
var ObjectAssign = require("object.assign");
var find = require('array-find');
var find = require("array-find");
var getTokenizer = require("kuromojin").getTokenizer;

@@ -27,4 +31,5 @@ /**

*/
// Cache tokens
// Cache tokens
var _tokensCacheMap = {};

@@ -35,6 +40,7 @@ /**

*/
var defaultOptions = {
// 接続的な "である" を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
// 接続的な "である" を無視する
// e.g.) 今日はいい天気であるが明日はどうなるかは分からない。
ignoreConjunction: false
};

@@ -47,5 +53,7 @@ /**

*/
var Types = exports.Types = {
desu: "特殊・デス",
dearu: "特殊・ダ"
var Types = {
desu: "特殊・デス",
masu: "特殊・マス",
dearu: "特殊・ダ"
};

@@ -56,4 +64,8 @@ /**

*/
function isDesumasu(resultObject) {
return resultObject.type === Types.desu;
exports.Types = Types;
function isDesumasu(_ref) {
var type = _ref.type;
return isDesumasuType(type);
}

@@ -64,6 +76,22 @@ /**

*/
function isDearu(resultObject) {
return resultObject.type === Types.dearu;
function isDearu(_ref2) {
var type = _ref2.type;
return isDearuType(type);
}
/**
* typeが敬体(ですます調)か常体(である調)かを判定する
* @param {string} type
* @returns {boolean}
*/
var isDesumasuType = function isDesumasuType(type) {
return type === Types.desu || type === Types.masu;
};
var isDearuType = function isDearuType(type) {
return type === Types.dearu;
};
/**

@@ -76,11 +104,16 @@ * tokenが文末のtokenなのかどうか

*/
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;
}
var nextPunctureToken = findNextPunctureToken(targetToken, allTokens);
if (nextPunctureToken === undefined) {
return true;
}
var nextPunctureTokenSurface = nextPunctureToken.surface_form;
if (/[\!\?!?。]/.test(nextPunctureTokenSurface)) {
return true;
}
};

@@ -93,23 +126,28 @@ /**

*/
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;
});
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;
});
};

@@ -121,28 +159,31 @@ /**

*/
var mapToAnalyzedResult = function mapToAnalyzedResult(tokens) {
/**
* @param {AnalyzedToken} token
* @return {AnalyzedResultObject}
*/
return function mapTokenToAnalyzedResult(token) {
var indexOfTargetToken = tokens.indexOf(token);
var nextPunctureToken = findNextPunctureToken(token, tokens);
// if has not next token, use between token <--> last.
var nextTokenIndex = nextPunctureToken ? tokens.indexOf(nextPunctureToken) : tokens.length;
var valueTokens = tokens.slice(indexOfTargetToken, nextTokenIndex + 1);
var value = valueTokens.map(function (token) {
return token["surface_form"];
}).join("");
return {
type: token["conjugated_type"],
value: value,
surface: token["surface_form"],
// index start with 0
index: token["word_position"] - 1,
/**
* @type {AnalyzedToken}
*/
token: ObjectAssign({}, token)
};
/**
* @param {AnalyzedToken} token
* @return {AnalyzedResultObject}
*/
return function mapTokenToAnalyzedResult(token) {
var indexOfTargetToken = tokens.indexOf(token);
var nextPunctureToken = findNextPunctureToken(token, tokens); // if has not next token, use between token <--> last.
var nextTokenIndex = nextPunctureToken ? tokens.indexOf(nextPunctureToken) : tokens.length;
var valueTokens = tokens.slice(indexOfTargetToken, nextTokenIndex + 1);
var value = valueTokens.map(function (token) {
return token["surface_form"];
}).join("");
return {
type: token["conjugated_type"],
value: value,
surface: token["surface_form"],
// index start with 0
index: token["word_position"] - 1,
/**
* @type {AnalyzedToken}
*/
token: ObjectAssign({}, token)
};
};
};

@@ -155,39 +196,41 @@ /**

*/
function analyze(text) {
var options = arguments.length <= 1 || arguments[1] === undefined ? defaultOptions : arguments[1];
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
var ignoreConjunction = options.ignoreConjunction !== undefined ? options.ignoreConjunction : defaultOptions.ignoreConjunction;
return getTokenizer().then(function (tokenizer) {
var tokens = _tokensCacheMap[text] ? _tokensCacheMap[text] : tokenizer.tokenizeForSentence(text);
_tokensCacheMap[text] = tokens;
var filterByType = tokens.filter(function (token, index) {
var nextToken = tokens[index + 1]; // token[特殊・ダ] + nextToken[アル] なら 常体(である調) として認識する
var ignoreConjunction = options.ignoreConjunction !== undefined ? options.ignoreConjunction : defaultOptions.ignoreConjunction;
return getTokenizer().then(function (tokenizer) {
var tokens = _tokensCacheMap[text] ? _tokensCacheMap[text] : tokenizer.tokenizeForSentence(text);
_tokensCacheMap[text] = tokens;
var filterByType = tokens.filter(function (token, index) {
var nextToken = tokens[index + 1];
// token[特殊・ダ] + nextToken[アル] なら 常体(である調) として認識する
var conjugatedType = token["conjugated_type"];
if (conjugatedType === Types.dearu) {
// "である" を取り出す。この時点では接続なのか末尾なのかは区別できない
if (token["pos"] === "助動詞" && token["conjugated_form"] === "連用形") {
if (nextToken && nextToken["conjugated_type"] === "五段・ラ行アル") {
// 文末の"である"のみを許容する場合は文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}
}
} else if (conjugatedType === Types.desu) {
// TODO: can omit?
if (token["conjugated_form"] === "基本形") {
// 文末の"です"のみを許容する場合は、文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}
var conjugatedType = token["conjugated_type"];
if (isDearuType(conjugatedType)) {
// "である" を取り出す。この時点では接続なのか末尾なのかは区別できない
if (token["pos"] === "助動詞" && token["conjugated_form"] === "連用形") {
if (nextToken && nextToken["conjugated_type"] === "五段・ラ行アル") {
// 文末の"である"のみを許容する場合は文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
});
return filterByType.map(mapToAnalyzedResult(tokens));
}
}
} else if (isDesumasuType(conjugatedType)) {
// TODO: can omit?
if (token["conjugated_form"] === "基本形") {
// 文末の"です"のみを許容する場合は、文末であるかどうかを調べる
if (ignoreConjunction) {
return isLastToken(token, tokens);
} else {
return true;
}
}
}
});
return filterByType.map(mapToAnalyzedResult(tokens));
});
}

@@ -200,8 +243,9 @@ /**

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

@@ -214,9 +258,10 @@ /**

*/
function analyzeDearu(text) {
var options = arguments.length <= 1 || arguments[1] === undefined ? defaultOptions : arguments[1];
return analyze(text, options).then(function (results) {
return results.filter(isDearu);
});
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
return analyze(text, options).then(function (results) {
return results.filter(isDearu);
});
}
//# sourceMappingURL=analyze.js.map

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

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

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

"test": "mocha",
"example": "cd example && npm it"
"example": "cd example && npm it",
"prettier": "prettier --write \"**/*.{js,jsx,ts,tsx,css}\""
},

@@ -38,15 +39,35 @@ "keywords": [

"devDependencies": {
"babel-cli": "^6.5.1",
"babel-plugin-add-module-exports": "^0.1.2",
"babel-preset-es2015": "^6.5.0",
"babel-preset-power-assert": "^1.0.0",
"babel-register": "^6.8.0",
"mocha": "^2.3.3",
"power-assert": "^1.3.1"
"@babel/cli": "^7.0.0",
"@babel/core": "^7.0.0",
"@babel/preset-env": "^7.0.0",
"@babel/register": "^7.0.0",
"babel-preset-power-assert": "^3.0.0",
"husky": "^1.0.1",
"lint-staged": "^7.3.0",
"mocha": "^5.2.0",
"power-assert": "^1.4.4",
"prettier": "^1.10.2"
},
"dependencies": {
"array-find": "^1.0.0",
"kuromojin": "^1.2.1",
"object.assign": "^4.0.3"
"kuromojin": "^1.4.0",
"object.assign": "^4.1.0"
},
"prettier": {
"singleQuote": false,
"printWidth": 120,
"tabWidth": 4
},
"lint-staged": {
"*.{js,jsx,ts,tsx,css}": [
"prettier --write",
"git add"
]
},
"husky": {
"hooks": {
"post-commit": "git reset",
"pre-commit": "lint-staged"
}
}
}

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

`options`: 無視オプションを指定できます。
- `options`
- `ignoreConjunction`: 無視オプションを指定できます

@@ -148,3 +149,4 @@ ```js

`options`: 無視オプションを指定できます。
- `options`
- `ignoreConjunction`: 無視オプションを指定できます。

@@ -177,2 +179,8 @@ ```js

## UseCase
以下のツールなどで利用しています。
- [textlint-ja/textlint-rule-no-mix-dearu-desumasu: textlint rule that check no mix である and ですます.](https://github.com/textlint-ja/textlint-rule-no-mix-dearu-desumasu)
## Tests

@@ -196,2 +204,2 @@

Thank for [RedPen](http://redpen.cc/ "RedPen").
Thank for [RedPen](http://redpen.cc/ "RedPen").
// LICENSE : MIT
"use strict";
const ObjectAssign = require("object.assign");
const find = require('array-find');
const find = require("array-find");
const getTokenizer = require("kuromojin").getTokenizer;

@@ -36,4 +36,6 @@ /**

desu: "特殊・デス",
masu: "特殊・マス",
dearu: "特殊・ダ"
};
/**

@@ -43,5 +45,6 @@ * @param {AnalyzedResultObject} resultObject

*/
export function isDesumasu(resultObject) {
return resultObject.type === Types.desu;
export function isDesumasu({ type }) {
return isDesumasuType(type);
}
/**

@@ -51,7 +54,15 @@ * @param {AnalyzedResultObject} resultObject

*/
export function isDearu(resultObject) {
return resultObject.type === Types.dearu;
export function isDearu({ type }) {
return isDearuType(type);
}
/**
* typeが敬体(ですます調)か常体(である調)かを判定する
* @param {string} type
* @returns {boolean}
*/
const isDesumasuType = type => type === Types.desu || type === Types.masu;
const isDearuType = type => type === Types.dearu;
/**
* tokenが文末のtokenなのかどうか

@@ -131,2 +142,3 @@ * 文末とは"。"やこれ以上後ろにtokenがないケースを示す

};
/**

@@ -139,5 +151,4 @@ * `text`から敬体(ですます調)と常体(である調)を取り出した結果を返します。

export function analyze(text, options = defaultOptions) {
const ignoreConjunction = options.ignoreConjunction !== undefined
? options.ignoreConjunction
: defaultOptions.ignoreConjunction;
const ignoreConjunction =
options.ignoreConjunction !== undefined ? options.ignoreConjunction : defaultOptions.ignoreConjunction;
return getTokenizer().then(tokenizer => {

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

const conjugatedType = token["conjugated_type"];
if (conjugatedType === Types.dearu) {
if (isDearuType(conjugatedType)) {
// "である" を取り出す。この時点では接続なのか末尾なのかは区別できない

@@ -163,3 +174,3 @@ if (token["pos"] === "助動詞" && token["conjugated_form"] === "連用形") {

}
} else if (conjugatedType === Types.desu) {
} else if (isDesumasuType(conjugatedType)) {
// TODO: can omit?

@@ -179,2 +190,3 @@ if (token["conjugated_form"] === "基本形") {

}
/**

@@ -189,2 +201,3 @@ * `text` の敬体(ですます調)について解析し、敬体(ですます調)のトークン情報を返します。

}
/**

@@ -197,3 +210,3 @@ * `text` の常体(である調)について解析し、常体(である調)のトークン情報を返します。

export function analyzeDearu(text, options = defaultOptions) {
return analyze(text, options).then(results => results.filter(isDearu))
}
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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc