我已经使用Stanford 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'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中训练新的斯坦福标记器,还是我每次都需要通过命令行手动创建它?

最佳答案

这比我想象的要容易得多。

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()一样简单。 (根据subprocess32 docs中的建议,我使用的是subprocess而不是subprocess)。

关于python - 从NLTK培训新的斯坦福词性标注器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33306510/

10-12 19:06