在我的業務領域,這兩個詞的組合:「門衛大廈」應始終標記爲(門衛:「JJ」)(建築物:「NN」 )。 NLTK內部惡搞標籤它:自定義詞性標記與回退到nltk內部pos
nltk.pos_tag(["doorman", "building"]) -> [('doorman', 'NN'), ('building', 'NN')]
我的方法是創建一個BigramTagger,並把它與這句話訓練:
train_sents = [
[('doorman', 'JJ'), ('building', 'NN')]
]
與NLTK內部惡搞到退避它爲所有其他案例。
default_tagger = nltk.data.load("../nltk_data/taggers/maxent_treebank_pos_tagger/english.pickle")
bigram_tagger = nltk.BigramTagger(train_sents, backoff=default_tagger)
但是,當我嘗試使用這樣的:
bigram_tagger.tag(nltk.word_tokenize("Elegant doorman building with gym"))`
好像不施加BigramTaager,我得到:
[('Elegant', 'NNP'), ('doorman', 'NN'), ('building', 'NN'), ('with', 'IN'), ('gym', 'NN')]
但這似乎工作:
bigram_tagger.tag(nltk.word_tokenize("doorman building")) -> [('doorman', 'JJ'), ('building', 'NN')]
顯然我錯過了我應該使用這些組件的方式, 如何讓nltk內部的pos tagger可以很好的策略,但是在某些與特定業務領域相關的特定情況下,也可以「覆蓋」它?
謝謝,它非常有意義 – user1511123
不客氣。如果答案解決了您的問題,請點擊左側的大複選標記以「接受」它。 – alexis