TL;博士
_SEPARATOR
:
from nltk.tag import StanfordPOSTagger
st = StanfordPOSTagger('chinese-distsim.tagger')
st._SEPARATOR = '#'
print(st.tag('è¿ æ¯ æ¯å¦ç¦ 䏿 åè¯å¨ æµè¯'.split()))
更好的解决方案
请稍等,等待NLTK v3.2.5版本,其中将有一个非常简单的斯坦福标记器接口,该接口跨不同语言标准化。
由于标记和令牌是通过json从REST接口传输的,因此不涉及分隔符
=)
StanfordSegmenter
和
StanfordTokenizer
在v3.2.5中,类将被弃用,请参阅
nltk
版本:
pip install -U nltk
下载并启动斯坦福CoreNLP服务器:
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2016-10-31.zip
unzip stanford-corenlp-full-2016-10-31.zip && cd stanford-corenlp-full-2016-10-31
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2016-10-31-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties
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
>>> from nltk.tag.stanford import CoreNLPPOSTagger, CoreNLPNERTagger
>>> from nltk.tokenize.stanford import CoreNLPTokenizer
>>> stpos, stner = CoreNLPPOSTagger('http://localhost:9001'), CoreNLPNERTagger('http://localhost:9001')
>>> sttok = CoreNLPTokenizer('http://localhost:9001')
>>> sttok.tokenize(u'æå®¶æ²¡æçµèã')
['æå®¶', '没æ', 'çµè', 'ã']
# Without segmentation (input to`raw_string_parse()` is a list of single char strings)
>>> stpos.tag(u'æå®¶æ²¡æçµèã')
[('æ', 'PN'), ('å®¶', 'NN'), ('没', 'AD'), ('æ', 'VV'), ('çµ', 'NN'), ('è', 'NN'), ('ã', 'PU')]
# With segmentation
>>> stpos.tag(sttok.tokenize(u'æå®¶æ²¡æçµèã'))
[('æå®¶', 'NN'), ('没æ', 'VE'), ('çµè', 'NN'), ('ã', 'PU')]
# Without segmentation (input to`raw_string_parse()` is a list of single char strings)
>>> stner.tag(u'奥巴马ä¸è¿å
å°Â·æ°å
éä¸èµ·å»æè´§åºè´ç©ã')
[('奥', 'GPE'), ('å·´', 'GPE'), ('马', 'GPE'), ('ä¸', 'O'), ('è¿', 'O'), ('å
', 'PERSON'), ('å°', 'PERSON'), ('·', 'O'), ('æ°', 'O'), ('å
', 'O'), ('é', 'O'), ('ä¸', 'NUMBER'), ('èµ·', 'O'), ('å»', 'O'), ('æ', 'O'), ('è´§', 'O'), ('åº', 'O'), ('è´', 'O'), ('ç©', 'O'), ('ã', 'O')]
# With segmentation
>>> stner.tag(sttok.tokenize(u'奥巴马ä¸è¿å
å°Â·æ°å
éä¸èµ·å»æè´§åºè´ç©ã'))
[('奥巴马', 'PERSON'), ('ä¸', 'O'), ('è¿å
å°Â·æ°å
é', 'PERSON'), ('ä¸èµ·', 'O'), ('å»', 'O'), ('æè´§åº', 'O'), ('è´ç©', 'O'), ('ã', 'O')]