如何将NLTK默认的wordnet语言更改为zsm?

时间:2016-09-19 09:06:59

标签: python nltk

我是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())

提前致谢。

2 个答案:

答案 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):
   ...