Closed arademaker closed 4 years ago
Feito
@igorcj, pensando melhor, acho que nossos scripts deveriam funcionar tanto recebendo um arquivo quanto recebendo um diretório e executando para todos os arquivos no diretório. Acho que assim teremos o máximo de flexibilidade. Algo como
python sent-segment.py --model MODELFILE --indir DIR-RAW --outdir DIR-SENT
ou
python sent-segment.py --model MODELFILE --infile FILE.RAW > FILE.SENT
python sent-segment.py --model MODELFILE < FILE.RAW > FILE.SENT
@arademaker, pode verificar a nova implementação? eu alterei os aprametros para que possa chamar dos dois modos: arquivo ou diretório. todos os parâmetros e ordem de chamada estão especificados no cabeçalho do arquivo.
@igorcj uma boa prática é sempre referenciar o issue no commit e sempre que comentar aqui também colocar alguma referencia para o arquivo ou commit. OK, vou olhar, obrigado.
Pensei que vc usaria alguma coisa como https://docs.python.org/3.3/library/argparse.html, o que tornaria o código mais claro.
Ah sim. Para falar a verdade não conhecia essa biblioteca. Posso implementar desta forma, só preciso estudar como funciona.
Acabo de commitar uma versão do código usando argparse. Acho que assim funciona bem. É possivel chamar como:
sent-segment.py pathin pathout -m MODELO -i -s
Onde os parâmetros opicionais são, respectivamente, para especificar o arquivo do modelo, indicar que é INFILE, e não diretório, e ativar o "status" no stdout.
Pode dar uma olhada e dizer se assim ficou bom?
fiz algumas mudanças na sua lógica. ao invés de status
, troquei para verbose
, nome mais comum para este tipo de flag. transformei isso em flag, não recebe valor, apenas indicamos ou não o flag verbose
.
% python sent-segment.py -h
usage: sent-segment.py [-h] [-m MODEL] [-i [INFILE]] [-v] indir outdir
positional arguments:
indir directory where the raw files are located.
outdir directory to save the outputs.
optional arguments:
-h, --help show this help message and exit
-m MODEL, --model MODEL
file with the model to be loaded.
-i [INFILE], --infile [INFILE]
single file processing mode. Only this file will be processed.
-v, --verbose verbose mode, prints in the stdout.
então agora podemos processar com:
% python sent-segment.py -m model_punkt.pickle -i 10.raw -v ../raw ../sents
Carregando modelo model_punkt.pickle
Modelo carregado em: 0.034s
processed ../raw/10.raw => ../sents/10-nk.sent
Tempo total: 0.0391s
interessante como o tempo para carregar o modelo é impactante! Praticamente metade do tempo quando processamos apenas um arquivo. Para processar tudo temos agora:
(venv) ar@leme src % python sent-segment.py -m model_punkt.pickle -v ../raw ../sents
Carregando modelo model_punkt.pickle
Modelo carregado em: 0.0338s
...
processed ../raw/1294.raw => ../sents/1294-nk.sent
processed ../raw/700.raw => ../sents/700-nk.sent
Tempo total: 33.0s
Legal. Gostei bastante da biblioteca. Não tinha encontrado esse "flag", bom saber. Aprendi bastante com esse código...
Adaptei o sent-segment.sh (que chama o ABCL) para executar apenas o código OpenNLP. O script também pode ser chamado para processar apenas um arquivo ou o diretório raw inteiro. Não está 100% robusto, mas esta melhor. O processamento do raw inteiro agora com o openNLP tem performance comparável com o NLTK.
O processamento via feeling precisa ser revisto, possivelmente com um docker para facilitar instalação do freeling e API python que permita sua execução também em batch vs single file.
modificar script para processar todos os arquivos do diretório de ENTRADA (raw) e gerar no diretório de SAIDA os SENT (offsets).