【发布时间】:2018-01-06 23:56:29
【问题描述】:
我正在使用斯坦福 NLP 软件进行一些处理。首先,感谢斯坦福大学的每一个人为所有这些伟大的东西!这是我的难题:
我有一个可以包含 URL(“http://”)、电子邮件地址(“&”)和主题标签(“#”)的句子。我正在使用 python 来完成这项工作。如果我使用 nltk 内置的 POS 和 NER 标记,所有这些特殊字符都保存在它们的标记词中。但是使用这些非常慢,因为每次调用都会启动一个新的 java 实例。所以我改为在服务器模式下运行标记器。当我通过完整的句子时,他们回来时把所有的特殊字符都去掉了。我正在使用 python sner 包与服务器交互。
这就是我的意思。要使用 nltk StanfordPOSTagger,您必须传入一个预先标记的句子。我正在使用 StanfordTokenizer。
>>>from nltk.tag.stanford import StanfordPOSTagger
>>>from nltk.tokenize import StanfordTokenizer
>>>import sner # https://pypi.python.org/pypi/sner
>>>sent="Here's an #example from me@y.ou url http://me.you"
>>>st=StanfordTokenizer(homedir+'models/stanford-postagger.jar',
options={"ptb3Ellipsis":False})
>>>nltk_pos=StanfordPOSTagger(homedir+'models/english-bidirectional-distsim.tagger',
homedir+'models/stanford-postagger.jar')
>>>pos_args=['java', '-mx300m', '-cp', homedir+'/models/stanford-postagger.jar',
edu.stanford.nlp.tagger.maxent.MaxentTaggerServer','-model',
homedir+'models/english-bidirectional-distsim.tagger','-port','2020']
>>>POS=Popen(pos_args)
>>>sp=sner(host="localhost",port=2020)
>>>nltk_pos.tag(st.tokenize(sent))
>>>[(u'Here', u'RB'), (u"'s", u'VBZ'), (u'an', u'DT'),
(u'#example', u'NN'), (u'from', u'IN'), (u'me@y.ou', u'NN'),
(u'url', u'NN'), (u'http://me.you', u'NN')]
>>>sp.tag(sent)
>>>[(u'Here', u'RB'), (u"'s", u'VBZ'), (u'an', u'DT'),
(u'example', u'NN'), (u'from', u'IN'), (u'y.ou', u'NN'),
(u'url', u'NN'), (u'//me.you', u'NN')]
我很好奇为什么会有差异,是否有办法让服务器不删除这些字符?我读过有一些方法可以将标志传递给 POS 服务器以使用预标记文本(“-tokenize false”),但我不知道如何使用 python 接口将该字符串列表传递给服务器.在 sner 包中,要解析的文本作为单个字符串发送,而不是分词器返回的字符串列表。
-b
【问题讨论】:
标签: stanford-nlp