我已经使用斯坦福POS标记器和一些自我收集的训练数据训练了一种非常见语言(维吾尔语)的词性标记器。我一直在使用NLTK的nltk.tag.stanford.POSTagger
接口来标记Python中的单个句子。这适用于大多数的我的目的:(从/usr/share/stanford-postagger
运行)从NLTK内训练新的斯坦福词性标记器
>>> from nltk.tag.stanford import POSTagger
>>> uy = POSTagger('models/uyghur.tagger', 'stanford-postagger.jar')
>>> uy.tag('Men méning mantini yégenlikimni bilimen .'.split())
[[(u'Men', u'PN1s'), (u'm\xe9ning', u'PN1s.GEN'), (u'mantini', u'N-ACC'), (u'y\xe9genlikimni', u'Vt-PST.dir-1s2'), (u'bilimen', u'Vt-PRS-1s1'), (u'.', u'PUNCT')]]
我愿做十倍的交叉验证得到这个恶搞的准确性更好的感觉,即,使用每个第十我的完整训练数据作为测试数据,用于在另外十分之九的数据上训练标记器。在Python中分裂数据集十种方法是没有问题的,但我不知道是否有方法在Python中训练新的标记器。当我完成它时,它已从命令行使用java -mx1g -classpath /usr/share/stanford-postagger/stanford-postagger.jar edu.stanford.nlp.tagger.maxent.MaxentTagger -props uyghurtagger.props
。
是否可以使用NLTK界面从Python内部培训新的斯坦福标记器,还是每次都需要通过命令行手动创建它?
据我所知,斯坦福标记界面仅用于使用标记器。我不确定你为什么要从nltk中进行训练,但如果它只是一个自动化交叉验证过程的问题,那么你总是可以使用'subprocess'模块从python中启动java进程。你有没有这样做的理由? – alexis
我相信NLTK只是打电话来使用标记器,而不是任何方式来训练它。我会回应上述评论,并说这里最简单的最简单的解决方案就是编写一些Python代码来进行命令行调用。 – StanfordNLPHelp
谢谢你们两位!我应该知道我是从错误的方面接近问题的...... – menzenski