我已經使用斯坦福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