본문 바로가기

전체 글418

spaCy 사용하기 - tokenization spaCy에서는 아래와 같은 방식으로 tokenization이 발생한다. 우선 whitespace 기준으로 raw text를 분리하고, 왼쪽에서 오른쪽 순서로 tokenization을 진행한다. 각각의 token은 아래의 주의사항을 거치게 된다. 1. don't 같은 경우엔 whitespace가 없지만 do, n't로 토큰화 해야 하며, U.K 같은 경우에는 하나의 토큰으로 인식해야 한다. 2. prefix, suffix, infix를 분리할 수 있는지 여부.. 아래의 그림 형태라고 생각하면 될 듯 하다. 각각의 언어마다 tokenization을 할 때 주의해야 할 특별한 규칙들이 있을 수가 있으며 spaCy에서는 이러한 규칙들을 추가할 수가 있다. 하다보니 궁금한 사항이 생겼는데.. 규칙 지우는건 어떻.. 2018. 4. 19.
spaCy 사용하기 - Named Entities spaCy를 사용해서 다양한 형태의 entity들을 식별해 볼 수가 있다. entity를 document 레벨이 아닌 token 레벨로도 접근 할 수가 있다. 위의 결과 값에서 B는 entity의 시작을 나타내고 O는 entitiy의 바깥, I는 entity 내부를 나타낸다. entity 정의가 되어 있지 않을 때는 새롭게 등록해 줄 수도 있다.(쓰다 보니 예제가.... -_-;; 따로 정치색이 있는 것은 아니고 아시는 분이 동명이인이라 놀리는 차원에서 쓴 예제예요.. 문제가 된다면 삭제하겠습니다..) 그런데 위와 같이 하면 기존의 entity가 사라지는 문제가 발생한다. 기존의 entity 정보가 손실되지 않게 하기 위해 아래와 같이 append를 시키자. NER을 training 하고 model up.. 2018. 4. 18.
spaCy 사용하기 - 설치 및 dependency parser 사용 spaCy 설치는 정말 간단하다. (ubuntu 기준) 아래와 같이 pip install 로 설치해 주면 된다. $> pip install -U spacy spaCy를 설치한 후에는 언어에 맞는 모델도 설치를 해야 한다. (tokenizing, parsing, pos tagging 등을 하기 위한 모델) spaCy에서는 총 8가지 언어를 지원하며 (한국어는 지원 안함) 지원 언어는 아래와 같다. 각 언어별 모델 설치는 아래와 같이 진행하면 된다. python -m spacy download enpython -m spacy downlonad depython -m spacy download espython -m spacy downlonad ptpython -m spacy download frpython -m.. 2018. 4. 16.
spaCy 사용하기 - nltk와 spaCy 비교 spaCy(https://spacy.io/)라고 nlp를 쉽게 할 수 있도록 도와주는 python package를 사용해 보고자 한다. python에 nltk가 있는데 굳이 spaCy를 써야하는 이유가 있나?? NLTK와 spaCy를 비교해 놓은 글이 있어서 링크와 함께 간단히 두 패키지의 특징을 비교해 보고자 한다. https://blog.thedataincubator.com/2016/04/nltk-vs-spacy-natural-language-processing-in-python/ 1. library 지원nltk의 경우 9개의 stemming library를 가지고 있으며(http://www.nltk.org/api/nltk.stem.html) 연구자 입장에서는 이들을 적절히 customizing 함으.. 2018. 4. 16.
Char based Text to CNN 한글 적용하기 Text의 각 Character들을 (한글로 치면 하나의 음절) 하나의 특징데이터로 삼고 CNN을 이용해서 분류작업을 해보기로 했다. 기본 Text to CNN에 대한 간략한 설명. http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/ 대략적으로 설명하자면 각각의 text내의 word 들을 vector로 변환한 후 해당 vector 값들을 나열해서 2차원 이미지 배열 처럼 만든다. 예를들어 I like coffee 라는 text가 있다면 I, like, coffee 이 단어들을 각각 3차원 벡터로 변환을 하고 ([1,0,0], [0,1,0], [0,0,1]) 변환된 벡터를 나열하면 3 * 3의 행렬이 생성된다... 2018. 4. 10.
[13강] scala 계층 구조 스칼라의 계층 구조는 아래의 트리 구조를 따른다. 최상위 슈퍼 클래스는 scala.Any이다. 모든 클래스가 Any를 상속하기 때문에 객체 간의 ==, !=, equals 등의 비교가 가능하다. 또한 Any 클래스에서는 == , !=는 final로 설정이 되어 있기 때문에 override가 불가능 하다. Any는 서브 클래스를 두 개 가지고 있는데 바로 AnyVal과 AnyRef이다. AnyVal의 경우는 Scala에 존재하는 값 클래스의 부모 클래스이며, Byte, Short, Char, Int, Float, Double, Boolean, Unit 이렇게 9 가지 클래스가 값 클래스에 해당한다.값 클래스는 내부적으로 final 클래스로 선언이 되었기 때문에 new 연산자로 인스턴스화가 불가능 하다.즉 .. 2018. 4. 3.
[SPARK] RDD error 체크하기 아래 형태의 코드를 스칼라를 이용해서 구현했다. for ( i println("Exception " + e) }} 위의 경우에 해당하는 폴더가 없거나 파일이 없는 경우, textFile.count()를 하게 되면 exception 에러가 발생하고 종료하게 된다.'아,,,, exception이 나더라도 그 다음 번 for문을 돌리고 싶은데 어떻게 해야 하지??' scala에 대해 온갖 욕을 해대며 구글링 시작... Try라는 것을 발견했다. 사용법은 아래와 같다. import scala.util.Try val result = Try(textFile.count()) 이렇게 Try로 감싸주게 되면 exception이 발생하지 않고 해당 성공, 실패 여부를 값으로 받아오게 된다.받아온 값은 아래 함수를 통해 성.. 2018. 3. 29.
[SPARK] RDD를 DataFrame으로 변환해주기 file을 읽어서 RDD로 만든 다음 해당 RDD를 DataFrame으로 변환해 주려고 한다. 일단 json 데이터를 파일로 읽어서 아래와 같이 RDD로 바꿔 보자. val conf = new SparkConf().setAppName("test") val sc = new SparkContext(conf)val rdd = sc.textFile("test.json") 해당 rdd를 df로 변환하자. df로 변환하기 위해서는 SQLContext를 사용해야 하는데, 이를 위해 maven에 spark-sql을 추가해 주자. org.apache.spark spark-sql_2.10 1.4.1 이제 rdd를 df로 변환해 주자. import org.apache.spark.sql.SQLContext val sqlCon.. 2018. 3. 28.
Java.util.map을 scala Map으로 변환하기 Scala를 쓸 때 항상 뻘짓을 하게 되는 부분이 형변환인 것 같다.python을 쓸때는 그냥 다 통용되는 느낌이었는데, scala에서는 데이터 형이 생각보다 엄청 중요하다는 걸 쓰면서 깨닫게 된다.특히나 java에서 통용되는 Object 객체를 scala Map 등으로 바꿔주는게 생각보다 정말 까다롭고 힘들었다. 나 역시 java library를 통해 java.util.Map[String, Object] 이 형태로 값을 리턴 받았는데, value에 해당하는 Object를 처리하기 너무 까다로워서 java 코드 자체를 java.util.Map[String, Map[String, String]]으로 다시 변경해서 리턴을 받았다. 지금부터는 자바 Map을 scala Map으로 형변환 하는 방법을 서술할 것이.. 2018. 3. 27.