kuroshiro-analyzer-yahoo-webapi
Version:
Yahoo WebAPI morphological analyzer for kuroshiro
126 lines (102 loc) • 4.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _axios = require("axios");
var _axios2 = _interopRequireDefault(_axios);
var _querystring = require("querystring");
var _querystring2 = _interopRequireDefault(_querystring);
var _fastXmlParser = require("fast-xml-parser");
var _fastXmlParser2 = _interopRequireDefault(_fastXmlParser);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var API_URL = "https://jlp.yahooapis.jp/MAService/V1/parse";
/**
* Yahoo WebAPI Analyzer
*/
var Analyzer = function () {
/**
* Constructor
* @param {string} [appId] Your Yahoo application ID.
* @param {Number} [timeout] Request timeout in millisecond.
*/
function Analyzer() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
appId = _ref.appId,
timeout = _ref.timeout;
_classCallCheck(this, Analyzer);
this._analyzer = null;
this._appId = appId;
this._timeout = timeout || 5000;
}
/**
* Initialize the analyzer
* @returns {Promise} Promise object represents the result of initialization
*/
_createClass(Analyzer, [{
key: "init",
value: function init() {
var _this = this;
return new Promise(function (resolve, reject) {
if (_this._analyzer == null) {
_this._analyzer = "yahoo";
resolve();
} else {
reject(new Error("This analyzer has already been initialized."));
}
});
}
/**
* Parse the given string
* @param {*} str input string
* @returns {Promise} Promise object represents the result of parsing
*/
}, {
key: "parse",
value: function parse() {
var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
var self = this;
return new Promise(function (resolve, reject) {
var paramJson = {
appid: self._appId,
sentence: str,
results: "ma"
};
(0, _axios2.default)({
method: "post",
url: API_URL,
data: _querystring2.default.stringify(paramJson),
timeout: self._timeout
}).then(function (res) {
var result = [];
var resObj = _fastXmlParser2.default.parse(res.data, {
trimValues: false // in case of the whitespace character
});
if (resObj.ResultSet.ma_result.total_count === 0) return resolve(result);
if (resObj.ResultSet.ma_result.total_count === 1) {
result.push({
surface_form: resObj.ResultSet.ma_result.word_list.word.surface,
pos: resObj.ResultSet.ma_result.word_list.word.pos,
reading: resObj.ResultSet.ma_result.word_list.word.reading
});
} else {
for (var i = 0; i < resObj.ResultSet.ma_result.word_list.word.length; i++) {
result.push({
surface_form: resObj.ResultSet.ma_result.word_list.word[i].surface,
pos: resObj.ResultSet.ma_result.word_list.word[i].pos,
reading: resObj.ResultSet.ma_result.word_list.word[i].reading
});
}
}
resolve(result);
}).catch(function (err) {
reject(err);
});
});
}
}]);
return Analyzer;
}();
exports.default = Analyzer;
module.exports = exports["default"];