본문 바로가기

Programming177

python에서 multi line으로 진행상황 나타내기 2016/11/19 - [Programming/python] - python에서 Progressbar 표현하기 python에서 Progressbar 표현하기 Python script를 실행하는데 이게 돌고 있는건지.. 아니면 멈춘건지 의구심이 들때가 간혹 있다. 언제 끝나는지 궁금하기도 하고... 그래서 python으로 progressbar를 표현할 수 있는게 없나 구글에서 찾아봄. htt.. yujuwon.tistory.com 위의 코드를 활용해서 multi line으로 화면에 진행상황을 출력하려고 했으나, 번번히 실패를 경험하게 된다. 가령 stdout에 '/r', '/n'등을 입력하고 flush를 하게 되면 출력하려고 하는 문장이 1줄로만 나타나거나, newline이 동작하여 아래로 쭉 써지게 된다.. 2019. 11. 24.
[ELASTIC SEARCH] full scan 하기 elastic의 index table을 full scan 하려고 아래와 같이 코드를 작성해서 호출했다. 처음에 total size를 가져온 후 from의 window size를 옮겨가며 전체 데이터를 가져오는 방식이다. 그런데 위와 같이 작업 할 경우 아래와 같은 에러메시지가 나타나게 된다. Limit of total fields 10000 in index has been exceeded. 해당 index에서의 최대 결과 윈도우는 기본으로 10000으로 설정되어 있으며( index.max_result_window) 해당 값을 넘어갈 시에 위와 같은 메시지가 발생한다. 내가 아무리 from을 13000, size를 100으로 줬다고 하더라도 es 내부에서는 전체 13100개를 가져온 후 0~13000개는 .. 2019. 8. 8.
BloomFilter를 이용해서 데이터 찾기. map-reduce, 혹은 spark를 사용함에 있어서 가장 비용을 많이 차지하는 부분은 map-reduce의 reduce, spark에서는 join 부분일 것이다.join을 할때는 되도록 데이터 셋을 최대한 줄인 후에 join을 하는 게 가장 바람직하다. 만약에 실제 내가 사용할 데이터는 2억건인데 input으로 들어온 데이터가 400억 건이면 400억 건에 대해 일단 2억건으로 줄인 후 join을 진행하는게 맞다. 그럼 400억 건을 2억건으로 어떻게 줄일까?? 물론 2억건을 메모리로 다 올린 후에 for문으로 찾아도 된다. 그러나 지금 설명하려고 하는 내용은 bloomFilter를 활용해서 데이터를 줄이는 방법을 말하려고 한다. 일단 BloomFilter에 대해 간략히 설명하자면, 해시 테이블을 활.. 2018. 10. 30.
안드로이드 해시 값 확인하기 카카오 API를 사용하기 위해서는 카카오 개발자 센터에서 안드로이드 키 해시를 등록해야 한다. 만약 해당 안드로이드와 다른 키 해시 값이 등록이 될 경우 API 값을 리턴 받을 수가 없다. 그리고 디버그용 해시 값과 릴리즈용 해시 값이 엄연히 다르기 때문에 두가지 경우의 해시 값을 모두 등록해주어야 한다. ( 카카오 개발자 센터에서 디버그 용, 릴리즈 용 애플리케이션을 각각 만들어야 한다는 소리) 우선 디버그용 키 해시 값 얻어오는 방법을 알아 보자. (맥 기준) $> keytool -exportcert -alias androiddebugkey -keystore -storepass android -keypass android | openssl sha1 -binary | openssl base64 그리고 .. 2018. 10. 5.
Can`t load DaumMapEngineApi.so file 근 5년여 가량 개인 앱 서비스를 운영하고 있었는데, 갑자기 어제 구글플레이개발자콘솔 화면에 아래와 같이 에러 횟수가 확 늘어나는 것을 확인했다. 게다가 어떤 분이 지도보기를 하면 앱이 죽는다고 남겨 주신 리뷰가 해당 버그를 추적하는데 큰 힘이 되었다. 우선 버그를 찾기가 엄청 힘들었다. 일단 내 폰, 와이프 폰에서는 정상 동작 한다!! 사용자 실수인가??? 이런 의심도 찰나.. 우연찮게 빌린 처남 폰에서 지도보기를 하니 앱이 죽는다. -_-;;; 아... 최신 폰에서만 앱이 죽나 보다... 처남에게 양해를 구하고 디버깅 시작!! Can`t load DaumMapEngineApi.so file 위의 에러 메시지가 발생하며 MapView가 실행되지 않는 것을 확인할 수 있었다. '아.. 그래 지도 lib .. 2018. 10. 4.
hadoop guava 버전 충돌 maven guava 버전을 20.0으로 올리고 map reduce 작업을 돌리는데 자꾸 이전 버전을 타는 문제가 발생했다. 문제는 정확히 아래와 같다. 목표는 입력 url에서 top Domain을 뽑아내기 위함임.top Domain을 뽑기 위해서 guava의 아래의 함수를 사용함. InternetDomainName.from(host_url).topPrivateDomain().toString(); 하지만 위의 함수를 map reduce를 통해 돌릴 경우 InternetDomainName{name="domain"} 이런 식으로 객체가 리턴이 됨. 아무래도 hadoop의 lib와 dependency lib가 서로 충돌이 일어나서 dependency lib를 못 타는 것 같았다. 이를 해결 하기 위해 mave.. 2018. 5. 28.
spaCy 사용하기 - Training Models spaCy의 훈련 로직은 대충 아래의 그림과 같다. training data는 text와 label로 구성이 되어져 있고, Model에서는 해당 text에 대해 label을 예측한다. 정답과 비교해서 차이만큼 gradient를 적용하고 이런식으로 반복함으로써 모델을 update하는 구조이다. spaCy에서는 GoldParse라는 class를 지원하는데 이걸 이용해서 모델을 학습할 수도 있다. entity 학습의 경우 BILUO scheme를 따른다. 또한 학습 성능을 향상시키기 위해 dropout을 적용할 수도 있다. 아래는 간단하게 모델을 업데이트 하는 코드를 설명하고 있다. english 타입의 빈 모델을 만들고, training data를 적당히 섞어 준 다음에 data를 1개씩 가져와서 모델을 업.. 2018. 4. 24.
spaCy 사용하기 - Vectors & Similarity spaCy에서는 vector similarity 기능도 제공을 해 주고 있다. 또한 아래와 같이 vector를 가지고 있는지, norm 값(여기선 L2 norm), out of vocabulary 인지 등도 확인해 볼 수 있다. 문서간의 유사도도 확인해 볼 수가 있다. 홈페이지에서는 주변 단어와의 연결 관계 등을 고려해서 철자가 틀려도 비슷한 유사도를 나타낸다고 쓰여져 있는데, 결과 값이 별로 좋지 못한 관계로 이 부분은 그냥 스킵.. 자신이 직접 단어 벡터를 추가할 수도 있다. (이게 의미가 있나...) glove vector를 추가할 수도 있다. 그 밖의 fastText vector와 같은 다른 벡터들도 추가할 수가 있다. 핵심은 ' '으로 구분하고 첫번째 요소는 단어 2번째는 vector 값의 형태.. 2018. 4. 23.
spaCy 사용하기 - multi-processing 과 serialization spaCy는 아래와 같이 nlp.pipe를 이용해서 병렬 처리가 가능하다. for doc in nlp.pipe(texts, batch_size=10000, n_threads=3):pass 아래의 코드는 Joblib와 spaCy를 이용해서 multi process를 구현한 코드이다. 자세히는 잘 모르겠다. -_- 또한 spaCy에서는 model을 저장 혹은 불러올 수가 있다. # 모델 저장 text = open('customer_feedback_627.txt', 'r').read()doc = nlp(text)doc.to_disk('/customer_feedback_627.bin') # 모델 load from spacy.tokens import Docfrom spacy.vocab import Vocab do.. 2018. 4. 22.