[python] 스탠포드 파서 및 NLTK
NLTK에서 Stanford Parser를 사용할 수 있습니까? (나는 스탠포드 POS에 대해 말하는 것이 아닙니다.)
답변
이 답변은 NLTK v 3.0에 적용되며 최신 버전에는 적용되지 않습니다.
물론, Python에서 다음을 시도해보십시오.
import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = '/path/to/standford/jars'
os.environ['STANFORD_MODELS'] = '/path/to/standford/jars'
parser = stanford.StanfordParser(model_path="/location/of/the/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences
# GUI
for line in sentences:
for sentence in line:
sentence.draw()
산출:
[Tree ( ‘ROOT’, [Tree ( ‘S’, [Tree ( ‘INTJ’, [Tree ( ‘UH’, [ ‘Hello’])])), Tree ( ‘,’, [ ‘,’]), Tree ( ‘NP’, [Tree ( ‘PRP $’, [ ‘My’]), Tree ( ‘NN’, [ ‘name’])]), Tree ( ‘VP’, [Tree ( ‘VBZ’, [ ‘is’]), Tree ( ‘ADJP’, [Tree ( ‘JJ’, [ ‘Melroy’])])]), Tree ( ‘.’, [ ‘.’])])]), Tree ( ‘ ROOT ‘, [Tree (‘SBARQ ‘, [Tree (‘WHNP ‘, [Tree (‘WP ‘, [‘What ‘])])), Tree (‘SQ ‘, [Tree (‘VBZ ‘, [‘is ‘ ]), Tree ( ‘NP’, [Tree ( ‘PRP $’, [ ‘your’]), Tree ( ‘NN’, [ ‘name’])])]), Tree ( ‘.’, [ ‘? ‘])])])]
참고 1 :
이 예에서 파서 및 모델 jar는 모두 동일한 폴더에 있습니다.
노트 2:
- 스탠포드 파서의 파일 이름 : stanford-parser.jar
- 스탠포드 모델의 파일 이름 : stanford-parser-xxx-models.jar
주 3 :
englishPCFG.ser.gz 파일을 찾을 수 있습니다 내부 models.jar 파일 (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz). 아카이브 관리자를 사용하여 models.jar 파일을 ‘압축 해제’하십시오.
참고 4 : Oracle JDK 8이라고도
하는 Java JRE (런타임 환경) 1.8을 사용하고 있는지 확인하십시오 . 그렇지 않으면 다음이 표시됩니다. Unsupported major.minor version 52.0.
설치
-
https://github.com/nltk/nltk 에서 NLTK v3를 다운로드합니다 . 그리고 NLTK를 설치합니다.
sudo python setup.py 설치
-
NLTK 다운로더를 사용하여 Python을 사용하여 Stanford Parser를 가져올 수 있습니다.
import nltk nltk.download()
-
내 예를 들어보세요! (jar 경로를 변경하고 모델 경로를 ser.gz 위치로 변경하는 것을 잊지 마십시오)
또는:
-
위와 동일하게 NLTK v3를 다운로드하여 설치합니다.
-
최신 버전을 다운로드합니다 ( 현재 버전 파일 이름은 stanford-parser-full-2015-01-29.zip) :
http://nlp.stanford.edu/software/lex-parser.shtml#Download -
standford-parser-full-20xx-xx-xx.zip을 추출합니다.
-
새 폴더를 만듭니다 (예에서는 ‘jars’). 추출 된 파일을이 jar 폴더 (stanford-parser-3.xx-models.jar 및 stanford-parser.jar)에 배치하십시오.
위에 표시된대로 환경 변수 (STANFORD_PARSER 및 STANFORD_MODELS)를 사용하여이 ‘jars’폴더를 가리킬 수 있습니다. 저는 Linux를 사용하고 있으므로 Windows를 사용하는 경우 C : // folder // jars와 같은 것을 사용하십시오.
-
아카이브 관리자 (7zip)를 사용하여 stanford-parser-3.xx-models.jar을 엽니 다.
-
jar 파일 내부를 찾습니다. edu / stanford / nlp / models / lexparser. 다시 ‘englishPCFG.ser.gz’라는 파일의 압축을 풉니 다. 이 ser.gz 파일을 추출한 위치를 기억하십시오.
-
StanfordParser 인스턴스를 생성 할 때 모델 경로를 매개 변수로 제공 할 수 있습니다. 이것은 모델에 대한 전체 경로입니다 (예 : /location/of/englishPCFG.ser.gz).
-
내 예를 들어보세요! (jar 경로를 변경하고 모델 경로를 ser.gz 위치로 변경하는 것을 잊지 마십시오)
답변
사용되지 않는 답변
아래 답변은 더 이상 사용되지 않습니다 . NLTK v3.3 이상의 경우 https://stackoverflow.com/a/51981566/610569 의 솔루션을 사용하십시오 .
편집 됨
참고 : 다음 답변은 다음에서만 작동합니다.
- NLTK 버전> = 3.2.4
- 2015-04-20 이후로 컴파일 된 Stanford Tools
- Python 2.7, 3.4 및 3.5 (Python 3.6은 아직 공식적으로 지원되지 않음)
두 도구 모두 빠르게 변경되고 3 ~ 6 개월 후에 API가 매우 다르게 보일 수 있습니다. 다음 답변을 영원한 수정이 아닌 일시적인 것으로 취급하십시오.
NLTK를 사용하여 Stanford NLP 도구를 인터페이스하는 방법에 대한 최신 지침은 항상 https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software 를 참조하십시오 !!
TL; DR
cd $HOME
# Update / Install NLTK
pip install -U nltk
# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
export STANFORDTOOLSDIR=$HOME
export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers
그때:
>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
>>> from nltk.parse.stanford import StanfordDependencyParser
>>> dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> print [parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]
롱에서 :
첫째 , Stanford NLP 도구는 Java로 작성 되고 NLTK는 Python으로 작성 된다는 점에 유의해야합니다 . NLTK가 도구와 인터페이스하는 방식은 명령 줄 인터페이스를 통해 Java 도구를 호출하는 것입니다.
둘째 , NLTK
Stanford NLP 도구에 대한 API는 버전 3.1 이후로 많이 변경되었습니다. 따라서 NLTK 패키지를 v3.1로 업데이트하는 것이 좋습니다.
셋째 , NLTK
Stanford NLP Tools에 대한 API는 Stanford POS tagger , Stanford NER Tagger , Stanford Parser 와 같은 개별 NLP 도구를 래핑합니다 .
POS 및 NER 태거의 경우 Stanford Core NLP 패키지를 감싸지 않습니다 .
Stanford Parser의 경우 Stanford Parser와 Stanford Core NLP를 모두 감싸는 특수한 경우입니다 (개인적으로 NLTK를 사용하여 후자를 사용하지 않았으므로 http : //www.eecs 에서 @dimazest의 데모를 따르 겠습니다. qmul.ac.uk/~dm303/stanford-dependency-parser-nltk-and-anaconda.html )
NLTK v3.1부터 STANFORD_JAR
및 STANFORD_PARSER
변수는 더 이상 사용되지 않으며 더 이상 사용되지 않습니다.
더 오래 :
1 단계
OS에 Java를 적절하게 설치했다고 가정합니다.
이제 NLTK 버전을 설치 / 업데이트합니다 ( http://www.nltk.org/install.html 참조 ).
- pip 사용 :
sudo pip install -U nltk
- 데비안 배포판 (apt-get 사용) :
sudo apt-get install python-nltk
Windows의 경우 (32 비트 바이너리 설치 사용) :
- Python 3.4 설치 : http://www.python.org/downloads/(64 비트 버전 사용 안 함)
- Numpy 설치 (선택 사항) : http://sourceforge.net/projects/numpy/files/NumPy/(pythnon3.4 를 지정하는 버전)
- NLTK 설치 : http://pypi.python.org/pypi/nltk
- 설치 테스트 : 시작> Python34를 누른 다음 import nltk를 입력합니다.
( 왜 64 비트? 참조 https://github.com/nltk/nltk/issues/1079를 )
그런 다음 편집증에서 nltk
파이썬 내에서 버전을 다시 확인하십시오 .
from __future__ import print_function
import nltk
print(nltk.__version__)
또는 명령 줄에서 :
python3 -c "import nltk; print(nltk.__version__)"
3.1
출력으로 보이는지 확인하십시오 .
더 많은 편집증에 대해서는 좋아하는 모든 Stanford NLP 도구 API를 사용할 수 있는지 확인하십시오.
from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.stanford import StanfordNeuralDependencyParser
from nltk.tag.stanford import StanfordPOSTagger, StanfordNERTagger
from nltk.tokenize.stanford import StanfordTokenizer
( 참고 : 위의 수입이됩니다 만 . 당신은 이러한 API를 포함하는 올바른 NLTK 버전을 사용하고 있는지 확인 가져 오기에 오류를보고하지 성공적 스탠포드 도구를 사용하는 NLTK API를 구성했는지하지 의미합니까)
2 단계
이제 필요한 Stanford NLP 도구 인터페이스를 포함하는 올바른 버전의 NLTK가 있는지 확인했습니다. 필요한 모든 Stanford NLP 도구를 다운로드하고 추출해야합니다.
TL; DR , Unix :
cd $HOME
# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
Windows / Mac :
- http://nlp.stanford.edu/software/lex-parser.shtml#Download 에서 파서를 다운로드하고 압축을 풉니 다.
- http://nlp.stanford.edu/software/tagger.shtml#Download 에서 FULL VERSION tagger를 다운로드하고 unizp하십시오.
- http://nlp.stanford.edu/software/CRF-NER.shtml#Download 에서 NER tagger를 다운로드하고 unizp합니다.
3 단계
NLTK가 관련 파일 경로를 자동으로 찾을 수 있도록 환경 변수를 설정합니다. 다음 변수를 설정해야합니다.
-
적절한 Stanford NLP
.jar
파일을CLASSPATH
환경 변수에 추가하십시오 .- 예를 들어 NER의 경우
stanford-ner-2015-04-20/stanford-ner.jar
- 예를 들어 POS의 경우
stanford-postagger-full-2015-04-20/stanford-postagger.jar
- 예를 들어 파서의
stanford-parser-full-2015-04-20/stanford-parser.jar
경우 파서 모델 jar 파일이됩니다.stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
- 예를 들어 NER의 경우
-
STANFORD_MODELS
변수에 적절한 모델 디렉토리를 추가합니다 (예 : 사전 훈련 된 모델이 저장된 위치를 찾을 수있는 디렉토리).- 예를 들어 NER의 경우
stanford-ner-2015-04-20/classifiers/
- 예를 들어 POS의 경우
stanford-postagger-full-2015-04-20/models/
- 예를 들어 파서의 경우 모델 디렉토리가 없습니다.
- 예를 들어 NER의 경우
코드 STANFORD_MODELS
에서 모델 이름을 추가하기 전에 디렉토리를 검색하는지 확인하십시오 . 또한 API는 자동으로 `CLASSPATH )에 대한 OS 환경 검색을 시도합니다.
NLTK v3.1부터는 STANFORD_JAR
변수가 더 이상 사용되지 않으며 더 이상 사용되지 않습니다 . 다음 Stackoverflow 질문에있는 코드 조각이 작동하지 않을 수 있습니다.
- Stanford 종속성 파서 설정 및 NLTK
- 스탠포드 파서에 대한 nltk 인터페이스
- stanford pos tagger를 nltk로 가져 오는 데 문제가 있습니다.
- Python Nltk의 Stanford Entity Recognizer (케이스 없음)
- Stanford NLP Tagger 및 NLTK로 속도를 향상시키는 방법
- 스탠포드 NLTK 파이썬 모듈을 어떻게 구할 수 있습니까?
- 스탠포드 파서 및 NLTK 창
- NLTK를 사용한 스탠포드 NER (Named Entity Recognizer) 기능
- NLTK가있는 Stanford 파서가 빈 출력을 생성합니다.
- NLTK에서 Stanford NER Tagger를 사용하여 개인 및 조직 목록 추출
- NLTK Python에서 Stanford POS Tagger 사용 오류
Ubuntu의 STEP 3에 대한 TL; DR
export STANFORDTOOLSDIR=/home/path/to/stanford/tools/
export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers
( Windows의 경우 : 환경 변수 설정에 대한 지침 은 https://stackoverflow.com/a/17176423/610569 참조 )
당신은 해야 다음, 파이썬을 시작하기 전에 위와 같이 변수를 설정 :
>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
또는 이전 답변에서 제안한대로 Python 내부에 환경 변수를 추가해 볼 수 있지만 파서 / 태거에게 .jar
파일과 모델 을 보관 한 직접 경로로 초기화하도록 직접 지시 할 수도 있습니다 .
다음 메소드를 사용하면 환경 변수를 설정할 필요가 없지만 API가 매개 변수 이름을 변경할 때 그에 따라 변경해야합니다. 그렇기 때문에 NLTK 버전에 맞게 Python 코드를 수정하는 것보다 환경 변수를 설정하는 것이 더 좋습니다.
예를 들어 ( 환경 변수를 설정하지 않고 ) :
# POS tagging:
from nltk.tag import StanfordPOSTagger
stanford_pos_dir = '/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir + 'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir + 'stanford-postagger.jar'
st = StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('What is the airspeed of an unladen swallow ?'.split())
# NER Tagging:
from nltk.tag import StanfordNERTagger
stanford_ner_dir = '/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'
st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
# Parsing:
from nltk.parse.stanford import StanfordParser
stanford_parser_dir = '/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir + "edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir + "stanford-parser.jar"
parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)
답변
사용되지 않는 답변
아래 답변은 더 이상 사용되지 않습니다 . NLTK v3.3 이상의 경우 https://stackoverflow.com/a/51981566/610569 의 솔루션을 사용하십시오 .
수정 됨
현재 Stanford 파서 (2015-04-20)부터의 기본 출력 lexparser.sh
이 변경되어 아래 스크립트가 작동하지 않습니다.
그러나이 답변은 레거시를 위해 유지 되지만 http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip 에서는 여전히 작동 합니다.
원래 답변
나는 당신이 Jython, JPype를 엉망으로 만들지 말 것을 제안합니다. 파이썬은 파이썬 작업을하고 자바는 자바 작업을하게하고 콘솔을 통해 스탠포드 파서 출력을 얻습니다.
홈 디렉토리에 Stanford Parser 를 설치 한 후 다음 ~/
Python 레시피를 사용하여 플랫 괄호 구문 분석을 가져옵니다.
import os
sentence = "this is a foo bar i want to parse."
os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()
bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse
답변
NLTK의 V3.3로, 사용자는해야 하지 않도록 에서 스탠포드 NER 또는 POS 태거를 nltk.tag
하고, 피 에서 스탠포드 토크 나이 / 분할기를 nltk.tokenize
.
대신 새 nltk.parse.corenlp.CoreNLPParser
API를 사용하십시오 .
https://github.com/nltk/nltk/wiki/Stanford-CoreNLP-API-in-NLTK를 참조 하십시오.
(링크 전용 답변을 피하고 아래 NLTK github wiki의 문서를 붙여 넣었습니다)
먼저 NLTK를 업데이트하십시오.
pip3 install -U nltk # Make sure is >=3.3
그런 다음 필요한 CoreNLP 패키지를 다운로드합니다.
cd ~
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-02-27.zip
unzip stanford-corenlp-full-2018-02-27.zip
cd stanford-corenlp-full-2018-02-27
# Get the Chinese model
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties
# Get the Arabic model
wget http://nlp.stanford.edu/software/stanford-arabic-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-arabic.properties
# Get the French model
wget http://nlp.stanford.edu/software/stanford-french-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-french.properties
# Get the German model
wget http://nlp.stanford.edu/software/stanford-german-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-german.properties
# Get the Spanish model
wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-spanish.properties
영어
여전히 stanford-corenlp-full-2018-02-27
디렉토리에서 서버를 시작하십시오.
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,ner,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000 &
그런 다음 Python에서 :
>>> from nltk.parse import CoreNLPParser
# Lexical Parser
>>> parser = CoreNLPParser(url='http://localhost:9000')
# Parse tokenized text.
>>> list(parser.parse('What is the airspeed of an unladen swallow ?'.split()))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]
# Parse raw string.
>>> list(parser.raw_parse('What is the airspeed of an unladen swallow ?'))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]
# Neural Dependency Parser
>>> from nltk.parse.corenlp import CoreNLPDependencyParser
>>> dep_parser = CoreNLPDependencyParser(url='http://localhost:9000')
>>> parses = dep_parser.parse('What is the airspeed of an unladen swallow ?'.split())
>>> [[(governor, dep, dependent) for governor, dep, dependent in parse.triples()] for parse in parses]
[[(('What', 'WP'), 'cop', ('is', 'VBZ')), (('What', 'WP'), 'nsubj', ('airspeed', 'NN')), (('airspeed', 'NN'), 'det', ('the', 'DT')), (('airspeed', 'NN'), 'nmod', ('swallow', 'VB')), (('swallow', 'VB'), 'case', ('of', 'IN')), (('swallow', 'VB'), 'det', ('an', 'DT')), (('swallow', 'VB'), 'amod', ('unladen', 'JJ')), (('What', 'WP'), 'punct', ('?', '.'))]]
# Tokenizer
>>> parser = CoreNLPParser(url='http://localhost:9000')
>>> list(parser.tokenize('What is the airspeed of an unladen swallow?'))
['What', 'is', 'the', 'airspeed', 'of', 'an', 'unladen', 'swallow', '?']
# POS Tagger
>>> pos_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
>>> list(pos_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))
[('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
# NER Tagger
>>> ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
>>> list(ner_tagger.tag(('Rami Eid is studying at Stony Brook University in NY'.split())))
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'STATE_OR_PROVINCE')]
중국말
`stanford-corenlp-full-2018-02-27 디렉토리에서 조금 다르게 서버를 시작합니다.
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-chinese.properties \
-preload tokenize,ssplit,pos,lemma,ner,parse \
-status_port 9001 -port 9001 -timeout 15000
Python에서 :
>>> parser = CoreNLPParser('http://localhost:9001')
>>> list(parser.tokenize(u'我家没有电脑。'))
['我家', '没有', '电脑', '。']
>>> list(parser.parse(parser.tokenize(u'我家没有电脑。')))
[Tree('ROOT', [Tree('IP', [Tree('IP', [Tree('NP', [Tree('NN', ['我家'])]), Tree('VP', [Tree('VE', ['没有']), Tree('NP', [Tree('NN', ['电脑'])])])]), Tree('PU', ['。'])])])]
아라비아 말
서버를 시작하십시오.
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-arabic.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9005 -port 9005 -timeout 15000
Python에서 :
>>> from nltk.parse import CoreNLPParser
>>> parser = CoreNLPParser('http://localhost:9005')
>>> text = u'انا حامل'
# Parser.
>>> parser.raw_parse(text)
<list_iterator object at 0x7f0d894c9940>
>>> list(parser.raw_parse(text))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
>>> list(parser.parse(parser.tokenize(text)))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
# Tokenizer / Segmenter.
>>> list(parser.tokenize(text))
['انا', 'حامل']
# POS tagg
>>> pos_tagger = CoreNLPParser('http://localhost:9005', tagtype='pos')
>>> list(pos_tagger.tag(parser.tokenize(text)))
[('انا', 'PRP'), ('حامل', 'NN')]
# NER tag
>>> ner_tagger = CoreNLPParser('http://localhost:9005', tagtype='ner')
>>> list(ner_tagger.tag(parser.tokenize(text)))
[('انا', 'O'), ('حامل', 'O')]
프랑스 국민
서버를 시작하십시오.
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-french.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9004 -port 9004 -timeout 15000
Python에서 :
>>> parser = CoreNLPParser('http://localhost:9004')
>>> list(parser.parse('Je suis enceinte'.split()))
[Tree('ROOT', [Tree('SENT', [Tree('NP', [Tree('PRON', ['Je']), Tree('VERB', ['suis']), Tree('AP', [Tree('ADJ', ['enceinte'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9004', tagtype='pos')
>>> pos_tagger.tag('Je suis enceinte'.split())
[('Je', 'PRON'), ('suis', 'VERB'), ('enceinte', 'ADJ')]
독일 사람
서버를 시작하십시오.
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-german.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9002 -port 9002 -timeout 15000
Python에서 :
>>> parser = CoreNLPParser('http://localhost:9002')
>>> list(parser.raw_parse('Ich bin schwanger'))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> list(parser.parse('Ich bin schwanger'.split()))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]
>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]
>>> ner_tagger = CoreNLPParser('http://localhost:9002', tagtype='ner')
>>> ner_tagger.tag('Donald Trump besuchte Angela Merkel in Berlin.'.split())
[('Donald', 'PERSON'), ('Trump', 'PERSON'), ('besuchte', 'O'), ('Angela', 'PERSON'), ('Merkel', 'PERSON'), ('in', 'O'), ('Berlin', 'LOCATION'), ('.', 'O')]
스페인의
서버를 시작하십시오.
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-spanish.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9003 -port 9003 -timeout 15000
Python에서 :
>>> pos_tagger = CoreNLPParser('http://localhost:9003', tagtype='pos')
>>> pos_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PROPN'), ('Obama', 'PROPN'), ('salió', 'VERB'), ('con', 'ADP'), ('Michael', 'PROPN'), ('Jackson', 'PROPN'), ('.', 'PUNCT')]
>>> ner_tagger = CoreNLPParser('http://localhost:9003', tagtype='ner')
>>> ner_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PERSON'), ('Obama', 'PERSON'), ('salió', 'O'), ('con', 'O'), ('Michael', 'PERSON'), ('Jackson', 'PERSON'), ('.', 'O')]
답변
스탠포드 파서 용 파이썬 인터페이스가 있습니다.
답변
Stanford Core NLP 소프트웨어 페이지에는 Python 래퍼 목록이 있습니다.
답변
내가 잘 기억한다면 Stanford 파서는 자바 라이브러리이므로 서버 / 컴퓨터에서 자바 인터프리터를 실행해야합니다.
한 번 서버로 사용하고 PHP 스크립트와 함께 사용했습니다. 스크립트는 php의 exec () 함수를 사용하여 다음과 같이 파서에 대한 명령 줄 호출을 수행했습니다.
<?php
exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );
?>
이 명령의 모든 세부 사항을 기억하지 못합니다. 기본적으로 fileToParse를 열고 구문 분석 한 다음 resultFile에 출력을 썼습니다. 그런 다음 PHP는 추가 사용을 위해 결과 파일을 엽니 다.
명령의 끝은 불필요한 명령 줄 정보가 스크립트를 방해하지 않도록 구문 분석기의 상세 정보를 NULL로 지정합니다.
Python에 대해 잘 모르지만 명령 줄 호출을 수행하는 방법이있을 수 있습니다.
당신이 원했던 정확한 경로가 아닐 수도 있지만, 그것이 당신에게 영감을 줄 수 있기를 바랍니다. 행운을 빕니다.