레이블이 python3인 게시물을 표시합니다. 모든 게시물 표시
레이블이 python3인 게시물을 표시합니다. 모든 게시물 표시

2020년 11월 5일 목요일

Google, sentencepiece. (Word Piece Model package)

Google Github에 Word Piece Model package인 sentencepiece라는 코드(C++)가 공개되었다. 파이썬에서는 subprocess로 띄워 실행할 수 있다.

설치는 pip install 로 가능하다.

아래는 하위의 articles라는 디렉터리에 *.txt 파일들을 읽어와 학습하는 예제이다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# sentencepiece test
#!pip install sentencepiece

import os
import sentencepiece as spm
from datetime import datetime

fns = []

# 학습데이터 경로
prefix = 'data' 

# vocabulary size, e.g., 8000, 16000, or 32000
vocab_size = 32000

dir_name = 'articles'

for fn in os.listdir(dir_name):
    nm, ext = os.path.splitext(fn)
    if ext == '.txt':
        fns.append(os.path.join(dir_name, fn))

fns_txt = ','.join(fns)

cmd = '--input={} --model_prefix={} --vocab_size={}'.format(fns_txt, prefix, vocab_size)

st = datetime.now()
spm.SentencePieceTrainer.Train(cmd)
et = datetime.now()

print('#학습완료: {}'.format(et - st))

spm_train명령의 command-options은 여기를 참고. 


이후 prefix로 지정된 파일이 생긴다. → data.model & data.vocab

이제 다음과 같이 모델파일을 불러온다.

1
2
sp = spm.SentencePieceProcessor()
sp.Load('{}.model'.format(prefix)) # data.model

 

이제, 다음과 같이 테스트해 볼 수 있다.

1
2
sp.EncodeAsPieces('스포츠브라 브라탑 스포츠브라탑 운동용브라 운동브라')  
#> ['▁스포츠브라', '▁브라탑', '▁스포츠', '브라탑', '▁운동용', '브라', '▁운동', '브라']

 



2019년 2월 26일 화요일

Python 3.x 에서 Dictionary 정렬하기

Python 3.x 에서 Dictionary를 value가 큰 순으로 정렬하는 여러가지 방법


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def dict_val(x):
    return x[1]

x = {"python": 2, "blah": 4, "alice": 3}

#일반적인방법
sorted_x1 = sorted(x.items(), key=dict_val, reverse=True)
print('sorted_x1',sorted_x1)

#lambda를 이용하는 방법
sorted_x2 = sorted(x.items(), key=lambda t: t[1], reverse=True)
print('sorted_x2',sorted_x2)

#zip을 이용하는 방법
sorted_x3 = sorted(zip(x.values(), x.keys()), reverse=True)
print('sorted_x3',sorted_x3)

결과:

  • sorted_x1 [('blah', 4), ('alice', 3), ('python', 2)] 
  • sorted_x2 [('blah', 4), ('alice', 3), ('python', 2)] 
  • sorted_x3 [(4, 'blah'), (3, 'alice'), (2, 'python')]


2018년 8월 10일 금요일

Python으로 만든 데몬을 시작/중지/재시작 시키는 쉘스크립트 예제.

"DaemonManager.sh"


#!/bin/sh
if [ -f ~/.bashrc ]; then
    . ~/.bashrc

PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export PATH=/usr/local/anaconda3-4.1.0/bin:/usr/local/lib/:$PATH
fi
WORKDIR=~/TEST/BaseUpdateDaemon
DAEMON=daemon.py
LOG=~/TEST/log/daemon.log

function do_start()
{
    cd ${WORKDIR}
    nohup python ${DAEMON} & >> ${LOG}
}

function do_stop()
{
    PID=`ps -ef | grep ${DAEMON} | grep -v grep | awk '{print $2}'`
    if [ "$PID" != "" ]; then
        kill -9 $PID
    fi
}

case "$1" in
    start|stop)
        do_${1}
        ;;

    reload|restart)
        do_stop
        do_start
        ;;
    *)
    echo "Usage: ~/TEST/bin/DaemonManager\.sh {start|stop|restart}"
    exit 1
    ;;
esac