2016-08-25 5 views
3

에서 리디렉션의 I/O :이 프로그램을 개막 같은SBCL 실행 프로그램 (스탠포드 파서) 또는 내가 혀짤배기 SBCL의 자식 프로세스로 스탠포드 파서 산란 문제로 실행하고 유닉스

(defvar *p* (sb-ext:run-program "/usr/bin/java" 
    (list  "-cp" 
    "\"/home/todd/CoreNLP/*\"" 
    "-Xmx2g" 
    "edu.stanford.nlp.pipeline.StanfordCoreNLP" 
    "-annotators" 
    "tokenize,ssplit,pos,lemma,ner,parse,dcoref" 
    "-outputFormat" 
    "text") 
    :wait nil :input :stream :output :stream :error :output)) 

같습니다 그러나 파서는 죽는다. 이 텍스트 창이 내 텍스트를 다른 것으로 포맷하기 때문에 계속 진행되는 모든 것을 실제로 표현할 수는 없습니다. 어쨌든, 이것은 내가 실행하려고 다른 프로그램과 발생하지 않습니다 :이 경우

(defvar *g* (sb-ext:run-program "/usr/bin/gnuplot" nil 
           :wait nil 
           :input :stream 
           :output :stream 
           :error :output)) 

프로그램 (의 gnuplot) 계속 실행합니다.

저는 이것이 스탠포드 파서가 그것을 포기하기 시작하기까지 오랜 시간이 걸리기 때문에 이것이 궁금합니다.

아무도 그것에 대한 통찰력이 없다면 나는 감격 할 것입니다. Lisp 내에서 Stanford Parser와 대화하는 것이 이상적인 방법 일 것입니다. 그렇지 않으면 필자는 파일 시스템의 명명 된 파이프에서 들어오는 입력과 출력으로 파서를 시작하는 완벽하게 유효한 해결 방법을 가지고 있습니다. 프로그램이 대화식 모드 여야하기 때문에 위의 명령 행 옵션을 사용해야합니다 (대화식 모드가 아닌 경우 파서는 다른 유형의 출력을 생성합니다)

유닉스 질문입니다. 따라서 누군가가 전문가 일 경우입니다 :

CoreNLP 디렉토리에서 필자가 inpipe와 outpipe를 가지고 있다고 가정 할 때, 퍼머 (puter)를 쫓아 내 입출력이 연결될 커맨드 라인은 무엇이 될까요? 프로그램의 표준과 표준은 각각? (그 시점에서) Lisp 프로그램 내에서 파이프에 액세스 할 때 나중에 버퍼링 문제가 발생하지 않도록하기 위해 어떤 조치를 취할 수 있습니까?

누구나 lisp 내에서 Stanford Parser와 대화하는 방법에 대한 아이디어가 있습니까?

언제나처럼 통찰력이 있습니다.

-Todd

+0

"이 텍스트 창을 스탠포드 파서를 사용하고 있습니다 내 텍스트를 뭔가 다른 것으로 포맷 유지 "- [markdown] (https://stackoverflow.com/editing-help)을 사용합니다. 코드의 형식을 지정하려면 행의 처음에 4 개의 공백을 넣을 수 있습니다. – jkiiski

+0

'run-program'은 프로세스 객체를 반환합니다. 그 객체로부터 에러를 얻으려면 REPL :'(uiop : copy-stream-to-stream (sb-ext : process-error *) * 표준 출력 *)'에서 이것을 시도 할 수있다. '는 프로세스 객체를 나타냅니다. 나는 당신이하는 일이 실패해서는 안되는 이유를 알지 못한다. 그러나 대안으로 자바 세계와 ABCL (Armed Bear Common Lisp) 인터페이스를 시도 할 수있다. – coredump

답변

4

난 당신이 커먼 리스프에서 명령을 실행하기위한 열등한 쉘을 사용하는 것이 좋습니다.

standford-parser를 사용한 적이 없습니다. 그때

2016-08-26 09:04:24 ☆ |[email protected]| Antonios-MBP in ~/learn/lisp/cl-l/stackoverflow/scripts 
± |master ?:2 ✗| → cat /usr/local/Cellar/stanford-parser/3.6.0/libexec/lexparser.sh 
#!/usr/bin/env bash 
# 
# Runs the English PCFG parser on one or more files, printing trees only 

if [ ! $# -ge 1 ]; then 
    echo Usage: `basename $0` 'file(s)' 
    echo 
    exit 
fi 

scriptdir=`dirname $0` 

java -mx150m -cp "$scriptdir/*:" edu.stanford.nlp.parser.lexparser.LexicalizedParser \ 
-outputFormat "penn,typedDependencies" edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz $* 

:이 쉘 스크립트 오순절은 기본적으로 java 명령입니다 실행 정말

2016-08-26 09:04:06 ☆ |[email protected]| Antonios-MBP in ~/learn/lisp/cl-l/stackoverflow/scripts 
± |master ?:2 ✗| → lexparser.sh text.txt 
[main] INFO edu.stanford.nlp.parser.lexparser.LexicalizedParser - Loading parser from serialized file edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz ... 
done [0.6 sec]. 
Parsing file: text.txt 
Parsing [sent. 1 len. 42]: The strongest rain ever recorded in India shut down the financial hub of Mumbai , snapped communication lines , closed airports and forced thousands of people to sleep in their offices or walk home during the night , officials said today . 
(ROOT 
    (S 
    (S 
     (NP 
     (NP (DT The) (JJS strongest) (NN rain)) 
     (VP 
      (ADVP (RB ever)) 
      (VBN recorded) 
      (PP (IN in) 
      (NP (NNP India))))) 
     (VP 
     (VP (VBD shut) 
      (PRT (RP down)) 
      (NP 
      (NP (DT the) (JJ financial) (NN hub)) 
      (PP (IN of) 
       (NP (NNP Mumbai))))) 
     (, ,) 
     (VP (VBD snapped) 
      (NP (NN communication) (NNS lines))) 
     (, ,) 
     (VP (VBD closed) 
      (NP (NNS airports))) 
     (CC and) 
     (VP (VBD forced) 
      (NP 
      (NP (NNS thousands)) 
      (PP (IN of) 
       (NP (NNS people)))) 
      (S 
      (VP (TO to) 
       (VP 
       (VP (VB sleep) 
        (PP (IN in) 
        (NP (PRP$ their) (NNS offices)))) 
       (CC or) 
       (VP (VB walk) 
        (NP (NN home)) 
        (PP (IN during) 
        (NP (DT the) (NN night)))))))))) 
    (, ,) 
    (NP (NNS officials)) 
    (VP (VBD said) 
     (NP (NN today))) 
    (. .))) 

det(rain-3, The-1) 
amod(rain-3, strongest-2) 
nsubj(shut-8, rain-3) 
nsubj(snapped-16, rain-3) 
nsubj(closed-20, rain-3) 
nsubj(forced-23, rain-3) 
advmod(recorded-5, ever-4) 
acl(rain-3, recorded-5) 
case(India-7, in-6) 
nmod:in(recorded-5, India-7) 
ccomp(said-40, shut-8) 
compound:prt(shut-8, down-9) 
det(hub-12, the-10) 
amod(hub-12, financial-11) 
dobj(shut-8, hub-12) 
case(Mumbai-14, of-13) 
nmod:of(hub-12, Mumbai-14) 
conj:and(shut-8, snapped-16) 
ccomp(said-40, snapped-16) 
compound(lines-18, communication-17) 
dobj(snapped-16, lines-18) 
conj:and(shut-8, closed-20) 
ccomp(said-40, closed-20) 
dobj(closed-20, airports-21) 
cc(shut-8, and-22) 
conj:and(shut-8, forced-23) 
ccomp(said-40, forced-23) 
dobj(forced-23, thousands-24) 
nsubj(sleep-28, thousands-24) 
nsubj(walk-33, thousands-24) 
case(people-26, of-25) 
nmod:of(thousands-24, people-26) 
mark(sleep-28, to-27) 
xcomp(forced-23, sleep-28) 
case(offices-31, in-29) 
nmod:poss(offices-31, their-30) 
nmod:in(sleep-28, offices-31) 
cc(sleep-28, or-32) 
xcomp(forced-23, walk-33) 
conj:or(sleep-28, walk-33) 
dobj(walk-33, home-34) 
case(night-37, during-35) 
det(night-37, the-36) 
nmod:during(walk-33, night-37) 
nsubj(said-40, officials-39) 
root(ROOT-0, said-40) 
nmod:tmod(said-40, today-41) 

Parsed file: text.txt [1 sentences]. 
Parsed 42 words in 1 sentences (18.00 wds/sec; 0.43 sents/sec). 

: 그래서 나는 명령 줄로 사용할 수 있습니다, 내 맥 오순절 사제에 설치 모든 일이 너무 커먼 리스프와 함께 실행 한 :

먼저 quicklisp로 설치한다 :

CL-USER> (ql:quickload 'inferior-shell) 
To load "inferior-shell": 
    Load 1 ASDF system: 
    inferior-shell 
; Loading "inferior-shell" 

(INFERIOR-SHELL) 
CL-USER> (inferior-shell:run/ss '(lexparser.sh)) 
"Usage: lexparser.sh file(s) 
" 
NIL 
0 

완벽는 lexparser을 실행하고 실행 프로그램의 표준 출력, 무기 호 표준 오류, 0으로 문자열을 반환 :그런 다음 작동하는지보십시오.

text.txt : 지금까지 인도에 기록 된 가장 강한 비는 뭄바이의 금융 허브를 종료 통신 라인을 찍은

가 폐쇄 공항

마지막으로 텍스트를 준비, 나는 그들의 웹에서 샘플을 선택 며칠 동안 수천명의 사람들이 사무실에서 잠을 자거나 밤에 집으로 가야한다고 관리들은 전했다.

그리고 나서 실행합니다.

CL-USER> (inferior-shell:run/ss '(lexparser.sh text.txt)) 
"(ROOT 
    (S 
    (S 
     (NP 
     (NP (DT The) (JJS strongest) (NN rain)) 
     (VP 
      (ADVP (RB ever)) 
      (VBN recorded) 
      (PP (IN in) 
      (NP (NNP India))))) 
     (VP 
     (VP (VBD shut) 
      (PRT (RP down)) 
      (NP 
      (NP (DT the) (JJ financial) (NN hub)) 
      (PP (IN of) 
       (NP (NNP Mumbai))))) 
     (, ,) 
     (VP (VBD snapped) 
      (NP (NN communication) (NNS lines))) 
     (, ,) 
     (VP (VBD closed) 
      (NP (NNS airports))) 
     (CC and) 
     (VP (VBD forced) 
      (NP 
      (NP (NNS thousands)) 
      (PP (IN of) 
       (NP (NNS people)))) 
      (S 
      (VP (TO to) 
       (VP 
       (VP (VB sleep) 
        (PP (IN in) 
        (NP (PRP$ their) (NNS offices)))) 
       (CC or) 
       (VP (VB walk) 
        (NP (NN home)) 
        (PP (IN during) 
        (NP (DT the) (NN night)))))))))) 
    (, ,) 
    (NP (NNS officials)) 
    (VP (VBD said) 
     (NP (NN today))) 
    (. .))) 

det(rain-3, The-1) 
amod(rain-3, strongest-2) 
nsubj(shut-8, rain-3) 
nsubj(snapped-16, rain-3) 
nsubj(closed-20, rain-3) 
nsubj(forced-23, rain-3) 
advmod(recorded-5, ever-4) 
acl(rain-3, recorded-5) 
case(India-7, in-6) 
nmod:in(recorded-5, India-7) 
ccomp(said-40, shut-8) 
compound:prt(shut-8, down-9) 
det(hub-12, the-10) 
amod(hub-12, financial-11) 
dobj(shut-8, hub-12) 
case(Mumbai-14, of-13) 
nmod:of(hub-12, Mumbai-14) 
conj:and(shut-8, snapped-16) 
ccomp(said-40, snapped-16) 
compound(lines-18, communication-17) 
dobj(snapped-16, lines-18) 
conj:and(shut-8, closed-20) 
ccomp(said-40, closed-20) 
dobj(closed-20, airports-21) 
cc(shut-8, and-22) 
conj:and(shut-8, forced-23) 
ccomp(said-40, forced-23) 
dobj(forced-23, thousands-24) 
nsubj(sleep-28, thousands-24) 
nsubj(walk-33, thousands-24) 
case(people-26, of-25) 
nmod:of(thousands-24, people-26) 
mark(sleep-28, to-27) 
xcomp(forced-23, sleep-28) 
case(offices-31, in-29) 
nmod:poss(offices-31, their-30) 
nmod:in(sleep-28, offices-31) 
cc(sleep-28, or-32) 
xcomp(forced-23, walk-33) 
conj:or(sleep-28, walk-33) 
dobj(walk-33, home-34) 
case(night-37, during-35) 
det(night-37, the-36) 
nmod:during(walk-33, night-37) 
nsubj(said-40, officials-39) 
root(ROOT-0, said-40) 
nmod:tmod(said-40, today-41) 
" 
NIL 
0 

아니면 목록에 있습니다 END_STRONG_1를 넣을 수 있습니다 :

CL-USER> (multiple-value-list (inferior-shell:run/ss '(lexparser.sh text.txt))) 
("(ROOT 
    (S 
    (S 
     (NP 
     (NP (DT The) (JJS strongest) (NN rain)) 
     (VP 
      (ADVP (RB ever)) 
      (VBN recorded) 
      (PP (IN in) 
      (NP (NNP India))))) 
     (VP 
     (VP (VBD shut) 
      (PRT (RP down)) 
      (NP 
      (NP (DT the) (JJ financial) (NN hub)) 
      (PP (IN of) 
       (NP (NNP Mumbai))))) 
     (, ,) 
     (VP (VBD snapped) 
      (NP (NN communication) (NNS lines))) 
     (, ,) 
     (VP (VBD closed) 
      (NP (NNS airports))) 
     (CC and) 
     (VP (VBD forced) 
      (NP 
      (NP (NNS thousands)) 
      (PP (IN of) 
       (NP (NNS people)))) 
      (S 
      (VP (TO to) 
       (VP 
       (VP (VB sleep) 
        (PP (IN in) 
        (NP (PRP$ their) (NNS offices)))) 
       (CC or) 
       (VP (VB walk) 
        (NP (NN home)) 
        (PP (IN during) 
        (NP (DT the) (NN night)))))))))) 
    (, ,) 
    (NP (NNS officials)) 
    (VP (VBD said) 
     (NP (NN today))) 
    (. .))) 

det(rain-3, The-1) 
amod(rain-3, strongest-2) 
nsubj(shut-8, rain-3) 
nsubj(snapped-16, rain-3) 
nsubj(closed-20, rain-3) 
nsubj(forced-23, rain-3) 
advmod(recorded-5, ever-4) 
acl(rain-3, recorded-5) 
case(India-7, in-6) 
nmod:in(recorded-5, India-7) 
ccomp(said-40, shut-8) 
compound:prt(shut-8, down-9) 
det(hub-12, the-10) 
amod(hub-12, financial-11) 
dobj(shut-8, hub-12) 
case(Mumbai-14, of-13) 
nmod:of(hub-12, Mumbai-14) 
conj:and(shut-8, snapped-16) 
ccomp(said-40, snapped-16) 
compound(lines-18, communication-17) 
dobj(snapped-16, lines-18) 
conj:and(shut-8, closed-20) 
ccomp(said-40, closed-20) 
dobj(closed-20, airports-21) 
cc(shut-8, and-22) 
conj:and(shut-8, forced-23) 
ccomp(said-40, forced-23) 
dobj(forced-23, thousands-24) 
nsubj(sleep-28, thousands-24) 
nsubj(walk-33, thousands-24) 
case(people-26, of-25) 
nmod:of(thousands-24, people-26) 
mark(sleep-28, to-27) 
xcomp(forced-23, sleep-28) 
case(offices-31, in-29) 
nmod:poss(offices-31, their-30) 
nmod:in(sleep-28, offices-31) 
cc(sleep-28, or-32) 
xcomp(forced-23, walk-33) 
conj:or(sleep-28, walk-33) 
dobj(walk-33, home-34) 
case(night-37, during-35) 
det(night-37, the-36) 
nmod:during(walk-33, night-37) 
nsubj(said-40, officials-39) 
root(ROOT-0, said-40) 
nmod:tmod(said-40, today-41) 
" NIL 0) 

이 프로그램은 자바 8을 사용하는 기억, 나는 3.6.0

+0

굉장한 아이디어! 하지만 https://gitlab.common-lisp.net/qitab/inferior-shell/tree/master에서 열등 셸 (또는 파일 중 하나)을 다운로드하려고하지만 사이트가 작동하지 않습니다. 어떤 아이디어를 얻을 수 있습니까? –

+0

알았어, 신경 쓰지 마. 나는 그것을 설치했다. 그러나 문서에서이 점에 대해 약간 두려워하고 있습니다. 첫째,이 점에서 하위 쉘은 하위 프로세스의 동시 실행 만 지원합니다. 대화식으로 사용할 수 없다는 뜻입니까? 전 프로그램을 텍스트를 제출하고 출력을 검색 할 수 있도록 앞뒤로 파이프를 찾고 있어요 ... 한 번만 실행하는 것이 아닙니다. 여기에 그걸로 어리 석음이 될 것입니다 ... –

+0

@ToddPierce, 열등 쉘을 다운로드하는 가장 좋은 방법은 quicklisp https://www.quicklisp.org/beta/를 사용하고 있으며, 파이프와 함께 사용할 수 있습니다 http : //stackoverflow.com/questions/32703224/how-to-use-sbcl-to-use-shell-command – anquegi