2016-09-19 6 views
0

私はNLTKを初めて使い、NLTK 3 Cookbookを使ってPython 3 Text Processingをやっています:第4章「WordNetを使ってタグ付け」を行い、デフォルト言語の英語でうまく動作します。私はomwに言語Bahasa(zsm)をダウンロードし、他のデータセットを使用してBahasaで試してみたいと思っています。同じアプローチを使用して、どのように言語のデフォルトを英語からzsmに変更できますか?私が使用しているNLTKのデフォルトのワードネット言語を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

あなたが考え出したように、のデフォルト値はです。デフォルトを望まないときはいつでも、あなたが望む言語を明示的に指定します。これが厄介だと分かった場合は、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): 
    ... 
+0

は、あなたがあなたの助けのために@alexisありがとうございました。それは動作し、私は探していたが、結果は私のものとは異なっていた。あなたの提案を使用して、タグなしの単語のほとんどはありません。それは私のように明示的に指定されたものと比べて、多くの言葉をエスケープするようなものです。うーん、興味深い。どのようなアイデアが起こるか。 –

+0

まあ...私の答えは、デフォルトの引数をラッパークラスでオーバーライドする方法を示しましたが、wordnetを使って_actually_する方法はありませんでした。おっと...チェックして今修正しました。もう一度見てください。 (主なものは、元の 'synsets()'メソッドのシグネチャと一致していました) – alexis

+0

@alexisに感謝します。私はそれを試して、まだ同じを返します。しかし、後でそれらのデータセットを使用して両方のアプローチをテストするために、他の人に任せます。今のところあなたの提案は私の主な質問に答えました:-) ps:私は[link](http://www.nltk.org/howto/wordnet.html)を使用していました –

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

キーは私のために動作するようになりました(LANG = 'ZSM' は単語)wordnet.synsetsです。私はまだ他の提案や訂正のために開いています。ありがとう。

関連する問題