在NLTK中训练一个新的斯坦福词性标注器



我使用斯坦福POS标注器和一些自己收集的训练数据训练了一个不常见语言(维吾尔语)的词性标注器。我一直在使用NLTK的nltk.tag.stanford.POSTagger接口来标记Python中的单个句子。这对我的大多数目的都很有效:(从/usr/share/stanford-postagger运行)

>>> 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'mxe9ning', u'PN1s.GEN'), (u'mantini', u'N-ACC'), (u'yxe9genlikimni', 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内部训练新的Stanford标记器,或者我需要每次通过命令行手动创建它?

这比我想象的要简单得多。

import subprocess32
subprocess32.call(
    ['java', '-mx1g', '-classpath',
     '/usr/share/stanford-postagger/stanford-postagger.jar',
     'edu.stanford.nlp.tagger.maxent.MaxentTagger', '-props',
     'uyghurtagger.props'])

它真的就像传递命令行参数列表给subprocess32.call()一样简单。(根据subprocess文档中的建议,我使用subprocess32而不是subprocess)。

最新更新