我是NLTK的新手,我正在使用NLTK 3 Cookbook进行Python 3文本处理:第4章。我已经完成了"使用WordNet进行标记"在默认语言英语中工作正常。我已经下载了语言Bahasa(zsm),想要使用其他数据集在Bahasa中尝试。使用相同的方法,如何将语言默认值从英语更改为zsm?
我正在使用的代码:
class WordNetTagger(SequentialBackoffTagger):
def __init__(self, *args, **kwargs):
SequentialBackoffTagger.__init__(self, *args, **kwargs)
self.wordnet_tag_map = {
'n': 'NN',
's': 'JJ',
'a': 'JJ',
'r': 'RB',
'v': 'VB'
}
def choose_tag(self, tokens, index, history):
word = tokens[index]
fd = FreqDist()
for synset in wordnet.synsets(word):
fd[synset.pos()] += 1
if not fd: return None
return self.wordnet_tag_map.get(fd.max())
提前致谢。
答案 0 :(得分:0)
经过一些试验后我才想到:
def choose_tag(self, tokens, index, history):
word = tokens[index]
fd = FreqDist()
for synset in wordnet.synsets(word, lang='zsm'):
fd[synset.pos()] += 1
if not fd: return None
return self.wordnet_tag_map.get(fd.max())
Key是wordnet.synsets(word,lang =' zsm')现在适用于我。而我仍然愿意接受任何其他建议或更正。感谢。
答案 1 :(得分:0)
正如您似乎已经想到的那样,您不会更改默认语言;只要您不想使用默认语言,就可以明确指定所需的语言。如果发现这很繁琐,可以将wordnet
对象包装在自己的自定义类中,该类提供自己的默认值。
class MyWordNet:
def __init__(self, wn):
self._wordnet = wn
def synsets(self, word, pos=None, lang="zsm"):
return self._wordnet.synsets(word, pos=pos, lang=lang)
# and similarly for any other methods you need
然后初始化一个包装器对象,将它传递给nltk的wordnet
读取器对象,然后使用它来代替原始对象:
wn = MyWordNet(wordnet)
...
for synset it wn.synsets(word):
...