0

カスタム トレーニング済みの nltk pos_tagger を使用してきましたが、明らかに動詞 (ING または ED で終わる) が NN として入ってくることがあります。追加の動詞を見つけるためだけに、追加の regexpTagger を介してタガーにすべての NN を処理させるにはどうすればよいですか?

セカンダリ正規表現タガーのサンプル コードをいくつか含めました。

from nltk.tag.sequential import RegexpTagger

rgt = RegexpTagger(
    (r'.*ing$', 'VBG'),                # gerunds
    (r'.*ed$', 'VBD'),                 # past tense verbs
])

ありがとう

4

1 に答える 1

0

これは、bi-gram (uni-gram によってバックオフされる) によってバックオフされる tri_gram タガーであり、主要なバックオフ トラッガーは正規表現トラガーです。したがって、ここで定義されたルールに基づいて他のタガーがタグ付けに失敗した場合、ここでの最後のタグ付けは正規表現に残されます。これが、ルールの独自の正規表現タガーを作成するのに役立つことを願っています。

   from nltk.corpus import brown
   import sys
   from nltk import pos_tag
   from nltk.tokenize import word_tokenize
   import nltk
   from nltk import ne_chunk
   def tri_gram():
   ##Trigram tagger done by training data from brown corpus 
    b_t_sents=brown.tagged_sents(categories='news')

   ##Making n-gram tagger using Turing backoff
   default_tagger = nltk.RegexpTagger(
            [(r'^-?[0-9]+(.[0-9]+)?$', 'CD'),   # cardinal numbers
         (r'(The|the|A|a|An|an)$', 'AT'),   # articles
         (r'.*able$', 'JJ'),                # adjectives
         (r'.*ness$', 'NN'),                # nouns formed from adjectives  
         (r'.*ly$', 'RB'),                  # adverbs
         (r'.*s$', 'NNS'),                  # plural nouns  
         (r'.*ing$', 'VBG'),                # gerunds   
         (r'.*ed$', 'VBD'),                 # past tense verbs
         (r'.*', 'NN')                      # nouns (default)
        ])
    u_gram_tag=nltk.UnigramTagger(b_t_sents,backoff=default_tagger) 
    b_gram_tag=nltk.BigramTagger(b_t_sents,backoff=u_gram_tag)
    t_gram_tag=nltk.TrigramTagger(b_t_sents,backoff=b_gram_tag)

    ##pos of given text
    f_read=open(sys.argv[1],'r')
    given_text=f_read.read();
    segmented_lines=nltk.sent_tokenize(given_text) 
    for text in segmented_lines:
        words=word_tokenize(text)
        sent = t_gram_tag.tag(words)
        print ne_chunk(sent)
tri_gram()
于 2013-03-01T09:17:10.023 に答える