node-twitter-korean-text
Nodejs interface to twitter-korean-text via node-java
Dependency
Currently wraps twitter-korean-text 4.4.4
νμ¬ μ΄ νλ‘μ νΈλ twitter-korean-text 4.4.4μ μ¬μ©μ€μ λλ€.
Requirement
Since it uses java code compiled with Java 8, make sure you have both Java 8 JDK and JRE installed.
For more details about installing java interface, see installation notes on node-java.
μ΄ νλ‘μ νΈλ Java 8λ‘ μ»΄νμΌλ μ½λλ₯Ό μ¬μ©νκΈ° λλ¬Έμ, Java 8 JDK/JREκ° μ€μΉλμ΄ μμ΄μΌ ν©λλ€.
Java interfaceμ μ€μΉμ κ΄λ ¨λ λ μμΈν μ¬νμ μ΄κ³³ μμ νμΈνμΈμ.
Installation
npm install --save node-twitter-korean-text
Usage
Support both asynchronous(default) and synchronous way.
const TwitterKoreanProcessor = require('node-twitter-korean-text');
// Normalize
TwitterKoreanProcessor.normalize('νλ€κ²μλ€ κ·Έλμ¬γ
γ
γ
').then((result) => {
// 'νλ€κ² μ΅λλ€ κ·Έλμγ
γ
'
});
// Tokenize
// tokensToJsonArray(tokens, keepSpace = false)
TwitterKoreanProcessor.tokenize('μ°©νκ°μμ§μμ λ°μ 루루').then((tokens) => {
TwitterKoreanProcessor.tokensToJsonArray(tokens, true).then((result) => {
// [
// { 'text': 'μ°©ν', 'koreanPos': 'Adjective', 'offset': 0, 'length': 2, 'isUnknown': false },
// { 'text': 'κ°μμ§', 'koreanPos': 'Noun', 'offset': 2, 'length': 3, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Suffix', 'offset': 5, 'length': 1, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Josa', 'offset': 6, 'length': 1, 'isUnknown': false },
// { 'text': ' ', 'koreanPos': 'Space', 'offset': 7, 'length': 1, 'isUnknown': false },
// { 'text': 'λ°μ', 'koreanPos': 'Verb', 'offset': 8, 'length': 2, 'isUnknown': false },
// { 'text': ' ', 'koreanPos': 'Space', 'offset': 10, 'length': 1, 'isUnknown': false },
// { 'text': '루루', 'koreanPos': 'Noun', 'offset': 11, 'length': 2, 'isUnknown': false }
// ]
});
TwitterKoreanProcessor.tokensToJsonArray(tokens, false).then((result) => {
// [
// { 'text': 'μ°©ν', 'koreanPos': 'Adjective', 'offset': 0, 'length': 2, 'isUnknown': false },
// { 'text': 'κ°μμ§', 'koreanPos': 'Noun', 'offset': 2, 'length': 3, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Suffix', 'offset': 5, 'length': 1, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Josa', 'offset': 6, 'length': 1, 'isUnknown': false },
// { 'text': 'λ°μ', 'koreanPos': 'Verb', 'offset': 8, 'length': 2, 'isUnknown': false },
// { 'text': '루루', 'koreanPos': 'Noun', 'offset': 11, 'length': 2, 'isUnknown': false }
// ]
});
});
// Stemming
TwitterKoreanProcessor.tokenize('κ²μΌλ₯Έ μμΉ¨μ΄ λ°μꡬλ')
.then((tokens) => TwitterKoreanProcessor.stem(tokens))
.then((stemmed) => TwitterKoreanProcessor.tokensToJsonArray(stemmed))
.then((result) => {
// [
// { 'text': 'κ²μΌλ₯΄λ€', 'koreanPos': 'Adjective', 'offset': 0, 'length': 3, 'isUnknown': false },
// { 'text': 'μμΉ¨', 'koreanPos': 'Noun', 'offset': 4, 'length': 2, 'isUnknown': false },
// { 'text': 'μ΄', 'koreanPos': 'Josa', 'offset': 6, 'length': 1, 'isUnknown': false },
// { 'text': 'λ°λ€', 'koreanPos': 'Verb', 'offset': 8, 'length': 4, 'isUnknown': false }
// ]
});
// Add to dictionary
TwitterKoreanProcessor.tokenize('μ°νλμ΄κ°λ
μλ')
.then((tokens) => TwitterKoreanProcessor.tokensToJsonArray(tokens, false))
.then((result) => {
// [
// { 'text': 'μ°νλμ΄κ°λ
μλ', 'koreanPos': 'ProperNoun', 'offset': 0, 'length': 8, 'isUnknown': true }
// ]
});
TwitterKoreanProcessor.addNounsToDictionary('μ°νλ', 'μ΄κ°λ
', 'μλ')
TwitterKoreanProcessor.tokenize('μ°νλμ΄κ°λ
μλ')
.then((tokens) => TwitterKoreanProcessor.tokensToJsonArray(tokens, false))
.then((result) => {
// [
// { 'text': 'μ°νλ', 'koreanPos': 'Noun', 'offset': 0, 'length': 3, 'isUnknown': false },
// { 'text': 'μ΄κ°λ
', 'koreanPos': 'Noun', 'offset': 3, 'length': 3, 'isUnknown': false },
// { 'text': 'μλ', 'koreanPos': 'Noun', 'offset': 6, 'length': 2, 'isUnknown': false }
// ]
});
// Phrase extraction
// extractPhrases(tokens, filterSpam = true, includeHashtags = true)
TwitterKoreanProcessor.tokenize('μλ¦λ€μ΄ νΈμν°λ₯Ό λ§λ€μ΄ 보μ. μλ° #μνμ§_λ§μ').then((tokens) => {
TwitterKoreanProcessor.extractPhrases(tokens, true, true).then((result) => {
// [
// { 'text': 'μλ¦λ€μ΄ νΈμν°', 'koreanPos': 'Noun', 'offset': 0, 'length': 8 },
// { 'text': 'νΈμν°', 'koreanPos': 'Noun', 'offset': 5, 'length': 3 },
// { 'text': '#μνμ§_λ§μ', 'koreanPos': 'Hashtag', 'offset': 21, 'length': 7 }
// ]
});
TwitterKoreanProcessor.extractPhrases(tokens, true, false).then((result) => {
// [
// { 'text': 'μλ¦λ€μ΄ νΈμν°', 'koreanPos': 'Noun', 'offset': 0, 'length': 8 },
// { 'text': 'νΈμν°', 'koreanPos': 'Noun', 'offset': 5, 'length': 3 }
// ]
});
TwitterKoreanProcessor.extractPhrases(tokens, false, true).then((result) => {
// [
// { 'text': 'μλ¦λ€μ΄ νΈμν°', 'koreanPos': 'Noun', 'offset': 0, 'length': 8 },
// { 'text': 'μλ°', 'koreanPos': 'Noun', 'offset': 18, 'length': 2 },
// { 'text': 'νΈμν°', 'koreanPos': 'Noun', 'offset': 5, 'length': 3 },
// { 'text': '#μνμ§_λ§μ', 'koreanPos': 'Hashtag', 'offset': 21, 'length': 7 }
// ]
});
TwitterKoreanProcessor.extractPhrases(tokens, false, false).then((result) => {
// [
// { 'text': 'μλ¦λ€μ΄ νΈμν°', 'koreanPos': 'Noun', 'offset': 0, 'length': 8 },
// { 'text': 'μλ°', 'koreanPos': 'Noun', 'offset': 18, 'length': 2 },
// { 'text': 'νΈμν°', 'koreanPos': 'Noun', 'offset': 5, 'length': 3 }
// ]
});
});
// Splitting Sentence
TwitterKoreanProcessor.splitSentences('κ°μμ΄λ€! λ¨μλ κ°μμ νλ€...... κ·Έλ μ§? 루루μΌ! λ²λ²λ¦¬μ½νΈ μ¬λ¬ κ°μ!!!!')
.then((result) => {
// [
// { 'text': 'κ°μμ΄λ€!', 'start': 0, 'end': 5 },
// { 'text': 'λ¨μλ κ°μμ νλ€......', 'start': 6, 'end': 22 },
// { 'text': 'κ·Έλ μ§?', 'start': 23, 'end': 27 },
// { 'text': '루루μΌ!', 'start': 28, 'end': 32 },
// { 'text': 'λ²λ²λ¦¬μ½νΈ μ¬λ¬ κ°μ!!!!', 'start': 33, 'end': 48 }
// ]
});
// Detokenize
TwitterKoreanProcessor.detokenize(['λ', 'νμ¨', 'νκ²', 'λμ', 'μ', 'λ', '루루']).then((result) => {
// 'λ νμ¨νκ² λμμλ 루루'
});
Synchronous way
just append Sync at the end of each methods
const TwitterKoreanProcessor = require('node-twitter-korean-text');
// Normalize
const normalized = TwitterKoreanProcessor.normalizeSync('νλ€κ²μλ€ κ·Έλμ¬γ
γ
γ
');
// 'νλ€κ² μ΅λλ€ κ·Έλμγ
γ
'
// Tokenize
// tokensToJsonArray(tokens, keepSpace = false)
const tokens = TwitterKoreanProcessor.tokenizeSync('μ°©νκ°μμ§μμ λ°μ 루루');
const tokenWithSpace = TwitterKoreanProcessor.tokensToJsonArraySync(tokens, true);
// [
// { 'text': 'μ°©ν', 'koreanPos': 'Adjective', 'offset': 0, 'length': 2, 'isUnknown': false },
// { 'text': 'κ°μμ§', 'koreanPos': 'Noun', 'offset': 2, 'length': 3, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Suffix', 'offset': 5, 'length': 1, 'isUnknown': false },
// { 'text': 'μ', 'koreanPos': 'Josa', 'offset': 6, 'length': 1, 'isUnknown': false },
// { 'text': ' ', 'koreanPos': 'Space', 'offset': 7, 'length': 1, 'isUnknown': false },
// { 'text': 'λ°μ', 'koreanPos': 'Verb', 'offset': 8, 'length': 2, 'isUnknown': false },
// { 'text': ' ', 'koreanPos': 'Space', 'offset': 10, 'length': 1, 'isUnknown': false },
// { 'text': '루루', 'koreanPos': 'Noun', 'offset': 11, 'length': 2, 'isUnknown': false }
// ]
...