从 NLTK 中训练一个新的斯坦福词性标注器
Training a new Stanford part-of-speech tagger from within the NLTK
我使用 Stanford 词性标注器和一些自行收集的训练数据为一种不常见的语言(维吾尔语)训练了词性标注器。我一直在使用 NLTK 的 nltk.tag.stanford.POSTagger
界面来标记 Python 中的单个句子。这对我的大部分用途都很有效:(运行 from /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 中训练一个新的 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
docs 中的建议,我使用 subprocess32
而不是 subprocess
。
我使用 Stanford 词性标注器和一些自行收集的训练数据为一种不常见的语言(维吾尔语)训练了词性标注器。我一直在使用 NLTK 的 nltk.tag.stanford.POSTagger
界面来标记 Python 中的单个句子。这对我的大部分用途都很有效:(运行 from /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 中训练一个新的 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
docs 中的建议,我使用 subprocess32
而不是 subprocess
。