[英]How to use a regex backoff tagger in python NLTK to override NN's?
我一直在使用經過自定義訓練的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
])
謝謝
這是tri_gram標記器,它由bi-gram(由uni-gram來支持)支持,而主要的退避搖籃是regex搖籃。 因此,如果其他標記器中的任何一個未能根據此處定義的規則對其進行標記,則此處最后的標記將留給正則表達式。 希望這可以幫助您構建自己的規則正則表達式標記器。
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.