UNPKG

korean-dictionary

Version:

Provides Korean Dictionary Implements and Crawler for Node.js with Rust FFI

165 lines (135 loc) 4.29 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: Dictionary.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: Dictionary.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>const ffi = require('ffi'); const path = require('path'); const DictionaryItem = require('./DictionaryItem'); const lib = ffi.Library(path.join(__dirname, '../target/release/libkorean_dictionary.so'), { createDictionaryFromFile: ['pointer', ['string']], createDictionaryFromWeb: ['pointer', ['size_t']], find: ['string', ['pointer', 'string']], findAll: ['string', ['pointer', 'string']], has: ['bool', ['pointer', 'string']], saveAsTsv: ['void', ['pointer', 'string']], size: ['size_t', ['pointer']], }); /** * Class representing a dictionary. */ class Dictionary { /** * Do not use this constructor. You can make dictionary instance by using * {@link Dictionary.createFromFile} or {@link Dictionary.createFromWeb}. * @private * @param {Buffer} pointer - A mutable pointer of dictionary for Rust */ constructor(pointer) { this.dictionary = pointer; } /** * 사전 TSV 파일을 읽어 Dictionary를 생성합니다. * @param {string} filePath * @returns {Dictionary} */ static createFromFile(filePath) { return new Dictionary(lib.createDictionaryFromFile(filePath)); } /** * 웹에서 표준국어대사전을 크롤링해 Dictionary를 생성합니다. * @param {number} threadNum - How many threads you use for crawling * @returns {Dictionary} */ static createFromWeb(threadNum) { return new Dictionary(lib.createDictionaryFromWeb(threadNum)); } /** * 사전에 해당 단어가 있는지 확인하고 해당 단어를 반환합니다. * @param {string} wordText * @returns {DictionaryItem} */ find(wordText) { const { dictionary } = this; const item = lib.find(dictionary, wordText); if (item) { const [word, meaning, pos, category] = item.split('\t'); return new DictionaryItem({ word, meaning, pos, category, }); } return null; } /** * 사전에 해당 단어가 있는지 확인하고 해당하는 모든 단어를 반환합니다. * @param {string} wordText * @returns {Array.&lt;DictionaryItem>} */ findAll(wordText) { const { dictionary } = this; const items = lib.findAll(dictionary, wordText); if (items) { return items.split('\n').map((item) => { const [word, meaning, pos, category] = item.split('\t'); return new DictionaryItem({ word, meaning, pos, category, }); }); } return null; } /** * 사전에 해당 단어가 있는지 확인합니다. * @param {string} wordText * @returns {boolean} */ has(wordText) { const { dictionary } = this; return lib.has(dictionary, wordText); } /** * 사전을 TSV 파일로 저장합니다. * @param {string} filePath */ saveAsTsv(filePath) { const { dictionary } = this; lib.saveAsTsv(dictionary, filePath); } /** * 사전에 포함된 단어 개수를 반환합니다. * @returns {number} */ size() { const { dictionary } = this; return lib.size(dictionary); } } module.exports = Dictionary; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Dictionary.html">Dictionary</a></li><li><a href="DictionaryItem.html">DictionaryItem</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Wed Nov 21 2018 20:39:12 GMT+0900 (Korean Standard Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>