您可能已经看过关于 nltk 的 GoogleCode book。我自己一直在非常缓慢地完成它,虽然我还没有处理 POS 标记,但当我觉得自己足够熟练使用该工具时,这是我最终想做的事情之一。无论如何,在第 5 章第 2 节中,您会看到以下文本和示例,用于制作自己的标记标记集(向所有人道歉,但我直接从文本中复制):
>>> tagged_token = nltk.tag.str2tuple('fly/NN')
>>> tagged_token
('fly', 'NN')
>>> tagged_token[0]
'fly'
>>> tagged_token[1]
'NN'
续 5.2:
我们可以直接从字符串构造一个标记标记列表。第一步是对字符串进行标记以访问单个单词/标签字符串,然后将每个字符串转换为元组(使用 str2tuple())。
>>> sent = '''
... The/AT grand/JJ jury/NN commented/VBD on/IN a/AT number/NN of/IN
... other/AP topics/NNS ,/, AMONG/IN them/PPO the/AT Atlanta/NP and/CC
... Fulton/NP-tl County/NN-tl purchasing/VBG departments/NNS which/WDT it/PPS
... said/VBD ``/`` ARE/BER well/QL operated/VBN and/CC follow/VB generally/RB
... accepted/VBN practices/NNS which/WDT inure/VB to/IN the/AT best/JJT
... interest/NN of/IN both/ABX governments/NNS ''/'' ./.
... '''
>>> [nltk.tag.str2tuple(t) for t in sent.split()]
[('The', 'AT'), ('grand', 'JJ'), ('jury', 'NN'), ('commented', 'VBD'), ('on', 'IN'), ('a', 'AT'), ('number', 'NN'), ... ('.', '.')]
上面的“发送”变量实际上是原始标记文本的样子,正如通过转到我自己计算机上的 nltk_data 目录并查看 corpora/brown/ 中的任何内容来确认的那样,因此您可以使用这种格式编写自己的标记文本和然后用它构建你自己的一组标记令牌。
设置好自己的标记标记后,您应该能够根据标记标记(从 5.5 开始)设置自己的 unigram 标记器:
>>>unigram_tagger = nltk.UnigramTagger(YOUR_OWN_TAGGED_TOKENS)
最后,因为您的标记文本可能是一个非常小的样本(因此不准确),您可以列出一个后备标记器,以便当它失败时,后备来救援:
>>> t0 = nltk.UnigramTagger(a_bigger_set_of_tagged_tokens)
>>> t1 = nltk.UnigramTagger(your_own_tagged_tokens, backoff=t0)
最后,你应该研究 n-gram 的差异、bigram、unigram 等,这些也在前面提到的第 5 章中介绍过。
无论如何,如果您继续阅读第 5 章,您将看到几种不同的文本标记方法(包括我最喜欢的:正则表达式标记器!)。有很多方法可以做到这一点,而且过于复杂,无法在像这样的小帖子中充分涵盖。
警告购买者:我还没有尝试过所有这些代码,所以我提供它作为我目前正在尝试解决的解决方案。如果我犯了错误,请帮助我纠正它们。