반응형
반응형

twitter-korean-text - 트위터에서 만든 오픈소스 한국어 처리기


https://github.com/twitter/twitter-korean-text



트위터에서 만든 오픈소스 한국어 처리기

Scala/Java library to process Korean text with a Java wrapper. twitter-korean-text currently provides Korean normalization and tokenization. Please join our community at Google Forum. The intent of this text processor is not limited to short tweet texts.

스칼라로 쓰여진 한국어 처리기입니다. 현재 텍스트 정규화와 형태소 분석, 스테밍을 지원하고 있습니다. 짧은 트윗은 물론이고 긴 글도 처리할 수 있습니다. 개발에 참여하시고 싶은 분은 Google Forum에 가입해 주세요. 사용법을 알고자 하시는 초보부터 코드에 참여하고 싶으신 분들까지 모두 환영합니다.

twitter-korean-text의 목표는 빅데이터 등에서 간단한 한국어 처리를 통해 색인어를 추출하는 데에 있습니다. 완전한 수준의 형태소 분석을 지향하지는 않습니다.

twitter-korean-text는 normalization, tokenization, stemming, phrase extraction 이렇게 네가지 기능을 지원합니다.

정규화 normalization (입니닼ㅋㅋ -> 입니다 ㅋㅋ, 샤릉해 -> 사랑해)

  • 한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ -> 한국어를 처리하는 예시입니다 ㅋㅋ

토큰화 tokenization

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하는Verb, 예시Noun, 입Adjective, 니다Eomi ㅋㅋKoreanParticle

어근화 stemming (입니다 -> 이다)

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어Noun, 를Josa, 처리Noun, 하다Verb, 예시Noun, 이다Adjective, ㅋㅋKoreanParticle

어구 추출 phrase extraction

  • 한국어를 처리하는 예시입니다 ㅋㅋ -> 한국어, 처리, 예시, 처리하는 예시

Introductory Presentation: Google Slides

Try it here

Gunja Agrawal kindly created a test API webpage for this project: http://gunjaagrawal.com/langhack/

Gunja Agrawal님이 만들어주신 테스트 웹 페이지 입니다. http://gunjaagrawal.com/langhack/

Opensourced here: twitter-korean-tokenizer-api

API

scaladoc

mavendoc

Maven

To include this in your Maven-based JVM project, add the following lines to your pom.xml:

Maven을 이용할 경우 pom.xml에 다음의 내용을 추가하시면 됩니다:

  <dependency>
    <groupId>com.twitter.penguin</groupId>
    <artifactId>korean-text</artifactId>
    <version>4.4</version>
  </dependency>

The maven site is available here http://twitter.github.io/twitter-korean-text/ and scaladocs are here http://twitter.github.io/twitter-korean-text/scaladocs/

Support for other languages.

.net

modamoda kindly offered a .net wrapper: https://github.com/modamoda/TwitterKoreanProcessorCS

node.js

Ch0p kindly offered a node.js wrapper: twtkrjs

Youngrok Kim kindly offered a node.js wrapper: node-twitter-korean-text

Python

Baeg-il Kim kindly offered a Python version: https://github.com/cedar101/twitter-korean-py

Jaepil Jeong kindly offered a Python wrapper: https://github.com/jaepil/twkorean

  • Python Korean NLP project KoNLPy now includes twitter-korean-text. 파이썬에서 쉬운 활용이 가능한 KoNLPy 패키지에 twkorean이 포함되었습니다.

Ruby

jun85664396 kindly offered a Ruby wrapper: twitter-korean-text-ruby

  • This provides access to com.twitter.penguin.korean.TwitterKoreanProcessorJava (Java wrapper).

Jaehyun Shin kindly offered a Ruby wrapper: twitter-korean-text-ruby

  • This provides access to com.twitter.penguin.korean.TwitterKoreanProcessor (Original Scala Class).

Elastic Search

socurites's Korean analyzer for elasticsearch based on twitter-korean-text: tkt-elasticsearch

Get the source 소스를 원하시는 경우

Clone the git repo and build using maven.

Git 전체를 클론하고 Maven을 이용하여 빌드합니다.

git clone https://github.com/twitter/twitter-korean-text.git
cd twitter-korean-text
mvn compile

Open 'pom.xml' from your favorite IDE.

Usage 사용 방법

You can find these examples in examples folder.

examples 폴더에 사용 방법 예제 파일이 있습니다.

from Scala

import com.twitter.penguin.korean.TwitterKoreanProcessor
import com.twitter.penguin.korean.phrase_extractor.KoreanPhraseExtractor.KoreanPhrase
import com.twitter.penguin.korean.tokenizer.KoreanTokenizer.KoreanToken

object ScalaTwitterKoreanTextExample {
  def main(args: Array[String]) {
    val text = "한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ #한국어"

    // Normalize
    val normalized: CharSequence = TwitterKoreanProcessor.normalize(text)
    println(normalized)
    // 한국어를 처리하는 예시입니다ㅋㅋ #한국어

    // Tokenize
    val tokens: Seq[KoreanToken] = TwitterKoreanProcessor.tokenize(normalized)
    println(tokens)
    // List(한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하는(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 입니(Adjective: 12, 2), 다(Eomi: 14, 1), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4))

    // Stemming
    val stemmed: Seq[KoreanToken] = TwitterKoreanProcessor.stem(tokens)

    println(stemmed)
    // List(한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하다(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 이다(Adjective: 12, 3), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4))

    // Phrase extraction
    val phrases: Seq[KoreanPhrase] = TwitterKoreanProcessor.extractPhrases(tokens, filterSpam = true, enableHashtags = true)
    println(phrases)
    // List(한국어(Noun: 0, 3), 처리(Noun: 5, 2), 처리하는 예시(Noun: 5, 7), 예시(Noun: 10, 2), #한국어(Hashtag: 18, 4))
  }
}

from Java

import java.util.List;

import scala.collection.Seq;

import com.twitter.penguin.korean.TwitterKoreanProcessor;
import com.twitter.penguin.korean.TwitterKoreanProcessorJava;
import com.twitter.penguin.korean.phrase_extractor.KoreanPhraseExtractor;
import com.twitter.penguin.korean.tokenizer.KoreanTokenizer;

public class JavaTwitterKoreanTextExample {
  public static void main(String[] args) {
    String text = "한국어를 처리하는 예시입니닼ㅋㅋㅋㅋㅋ #한국어";

    // Normalize
    CharSequence normalized = TwitterKoreanProcessorJava.normalize(text);
    System.out.println(normalized);
    // 한국어를 처리하는 예시입니다ㅋㅋ #한국어


    // Tokenize
    Seq<KoreanTokenizer.KoreanToken> tokens = TwitterKoreanProcessorJava.tokenize(normalized);
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaStringList(tokens));
    // [한국어, 를, 처리, 하는, 예시, 입니, 다, ㅋㅋ, #한국어]
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaKoreanTokenList(tokens));
    // [한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하는(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 입니(Adjective: 12, 2), 다(Eomi: 14, 1), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4)]


    // Stemming
    Seq<KoreanTokenizer.KoreanToken> stemmed = TwitterKoreanProcessorJava.stem(tokens);
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaStringList(stemmed));
    // [한국어, 를, 처리, 하다, 예시, 이다, ㅋㅋ, #한국어]
    System.out.println(TwitterKoreanProcessorJava.tokensToJavaKoreanTokenList(stemmed));
    // [한국어(Noun: 0, 3), 를(Josa: 3, 1),  (Space: 4, 1), 처리(Noun: 5, 2), 하다(Verb: 7, 2),  (Space: 9, 1), 예시(Noun: 10, 2), 이다(Adjective: 12, 3), ㅋㅋ(KoreanParticle: 15, 2),  (Space: 17, 1), #한국어(Hashtag: 18, 4)]


    // Phrase extraction
    List<KoreanPhraseExtractor.KoreanPhrase> phrases = TwitterKoreanProcessorJava.extractPhrases(tokens, true, true);
    System.out.println(phrases);
    // [한국어(Noun: 0, 3), 처리(Noun: 5, 2), 처리하는 예시(Noun: 5, 7), 예시(Noun: 10, 2), #한국어(Hashtag: 18, 4)]

  }
}

Basics

TwitterKoreanProcessor.scala is the central object that provides the interface for all the features.

TwitterKoreanProcessor.scala에 지원하는 모든 기능을 모아 두었습니다.

Running Tests

mvn test will run our unit tests

모든 유닛 테스트를 실행하려면 mvn test를 이용해 주세요.

Tools

We provide tools for quality assurance and test resources. They can be found under src/main/scala/com/twitter/penguin/korean/qa and src/main/scala/com/twitter/penguin/korean/tools.

Contribution

Refer to the general contribution guide. We will add this project-specific contribution guide later.

설치 및 수정하는 방법 상세 안내

Performance 처리 속도

Tested on Intel i7 2.3 Ghz

Initial loading time (초기 로딩 시간): 2~4 sec

Average time per parsing a chunk (평균 어절 처리 시간): 0.12 ms

Tweets (Avg length ~50 chars)

Tweets100K200K300K400K500K600K700K800K900K1M
Time in Seconds57.59112.09165.05218.11270.54328.52381.09439.71492.94542.12
Average per tweet: 0.54212 ms

Benchmark test by KoNLPy

Benchmark test

From http://konlpy.org/ko/v0.4.2/morph/

Author(s)


반응형
반응형
 


 ...



반응형
반응형

[Chatbot] http://mindmap.ai/ - 마인드맵으로 만드는 인공지능 챗봇플랫폼



챗봇서비스를 지원한다고 해서 가입!!!






...



반응형
반응형

1. 낮잠을 자라


어찌 보면 어의없어 보이지만 가장 정확한 말이다. 직장 내에서 낮잠을 자기란 쉽지 않다. 그렇다면 남은 점심시간을 활용해 보는 것은 어떨까. 졸음이 오기 전에 미리 낮잠을 자두는 것도 예방책이 될 수 있다고 한다. 20분 안팎의 원기 회복을 위한 낮잠은 스트레스 해소와 집중력 향상에 효과가 있다. 졸음은 우리 몸이 스스로 좀 쉬라고 보내는 신호라고 하니 미리 예방하자.


2. 몸을 움직여라


사무직 등 책상에 앉아서 일하는 직장인들은 계속 앉아있기 때문에 졸음이 몰려올 때도 있다. 이럴 때에는 약간의 스트레칭을 하거나 가볍게 걷는 것도 도움이 된다. 또한 사무실 밖으로 나와 신선한 공기를 마시는 것도 졸음을 쫓는 방법이라고 한다. 책상 앞에서 온종일 앉아있는 것은 건강을 해칠 수도 있다고 하니 되도록 일어나 움직이도록 하자.


3. 과식하지 마라


배가 부르면 졸음이 올 수 있다. 점심을 지금보다 조금 덜 먹는 것도 졸음을 예방하는 방법이 될 수 있다. 과식은 졸음뿐만 아니라 건강과 수명에도 영향을 미치므로 주의하자.


4. 커피를 마셔라


많은 사람이 졸음을 쫓기 위해 커피를 마시고 있다. 이는 커피 속 카페인이 각성 작용을 하기 때문. 하지만 하루에 너무 많은 커피를 마시면 몸에 좋지 않을 수 있으므로 주의하자.


또 졸음을 쫓는 방법으로는 하던 일을 멈추고 다른 일로 바꾸는 것도 도움이 된다. 

바쁜 일이 아니라면 이를 활용하는 것도 좋은 방법이 될 수 있을 것이다. 


이 외에도 양치를 하는 것도 졸음을 쫓을 수 있는데 천연 허브인 박하가 들어있는 치약을 사용하는 것이 효과가 크며, 잠시 명상을 하는 것도 졸음을 쫓는 방법이 될 수 있다고 한다.

반응형
반응형

대화형 챗봇 설계의 과제


챗봇이 실패하는 이유

페이스북이 2016년 4월에 봇 플랫폼을 출시 한 후, 많은 사람들이 주요 "출시 파트너"를 시험해 보았고 매우 부족한 것을 알게 되었습니다. 챗봇은 응용 프로그램 도메인 내에 있는 기본적인 질문 (예: 날씨 또는 꽃 배달 확인)조차 이해할 수 없었습니다. 사용자가 챗봇이 원하는 기계적인 질문에서 벗어나 "자연스럽게" 말하려고 할 때 챗봇이 혼란스러워하는 것을 보는 것은 특히 더 고통스러웠습니다.

페이스북 메신저 제품 관리자인 Mikhail Larionnov는 페이스북 플랫폼에서 많은 챗봇을 검토한 결과, 일부 챗봇의 견인력 부족에 대한 세 가지 이유를 확인했습니다:

  • 이용을 시작할 때 챗봇의 기능에 대한 설명이 거의 없다
  • 단일 챗봇에서 너무 많은 작업을 시도해 목표가 불명확
  • 자연어 처리에 지나치게 의존

성공적인 챗봇을 만드는 방법

그러나 Larionnov는 이러한 문제를 해결하기 위한 구체적인 조언을 제공했습니다.

첫째, 챗봇은 매우 제한된 범위를 가져야합니다. 챗봇은 좁은 주제에 대한 가치를 제공하고, 그것을 잘 해내야 합니다. 더 중요한 것은 챗봇이 무엇을 하는지 한두 문장으로 설명할 수 있어야 합니다.

둘째, 각 메시징 플랫폼의 내장 기능을 사용하여 사용자가 이용을 시작할 때 챗봇의 기능을 잘 전달해야 합니다. 페이스북 메신저의 경우 잘 만들어진 인사말 창과 동작 유도 문을 활용할 수 있습니다. 슬랙(Slack)의 경우 봇 저장소의 설명을 이용할 수 있습니다.

셋째, 가능한 구조화된 버튼을 사용해야합니다. 자유로운 사용자 입력이 정말 필요한 경우 AI가 입력을 이해할 수 없는 경우를 처리하고, 구문을 올바르게 사용하는 방법에 대한 도움말을 제공해야 합니다. 챗봇의 구문은 작업을 트리거(trigger, 시작)하는 명령과 키워드입니다.

네 번째 항목을 추가하면, 스팸처럼 불필요한 정보를 제공하면 안됩니다. 챗봇은 중지, 탈퇴 및 취소와 같은 명령을 이해하고 응답해야합니다. 그리고 즉시 메시지 전송을 중단해야 합니다. 봇이 과도하게 원치 않는 메시지를 사용자에게 보내면 사용자는 챗봇을 차단할 수밖에 없습니다. 4%의 사용자가 챗봇을 차단하면 페이스북은 사용자의 챗봇을 오프라인으로 전환시키는 것으로 알려져 있습니다.

반응형
반응형

현대인들은 

쉽게 건강하려고 애쓴다. 

건강은 바라지만 수고하려 하지 않는다. 

기계는 오래 쓰면 닳고, 망가진다. 인간의 몸도 

나이가 먹으면 약화되고 고장이 나기 마련이다. 

하지만 인간의 몸은 기계와 달리 스스로 원상태로 

복원하려는 신비한 능력이 있다. 그런 능력은 

개인의 노력에 의해 얻어지는 귀한 것이다. 



- 이길우의《고수들은 건강하다》중에서 - 



* 사람은 나이 들면 늙어갑니다.

하지만 같은 나이인데도 사람마다 몸 상태가 

모두 다릅니다. 이따금 몸져눕기도 하고 군데군데 

아픈 곳도 많지만 어떻게 복원해 왔느냐에 따라

건강한 몸, 그렇지 않은 몸으로 갈립니다.

사람 몸에 숨겨진 신비한 복원 능력도

갈고닦아야 자기 것이 됩니다.



...

반응형

'아침편지' 카테고리의 다른 글

링컨의 연설이 사람을 사로잡은 이유  (0) 2017.08.10
영혼에도 밥이 필요하다  (0) 2017.08.09
'느낌'  (0) 2017.08.07
시작하기 딱 좋은 때  (0) 2017.08.07
당신의 몸에서는 어떤 향이 나나요?  (0) 2017.08.04

+ Recent posts