2016-03-08 37 views
3

我構建了一個Plaintext-Corpus,下一步是將所有文本進行解讀。我正在使用WordNetLemmatizer,並且需要爲每個令牌使用pos_tag以便不會出現例如愛 - >引理=愛與愛 - >引理=愛...NLTK:lemmatizer和pos_tag


默認WordNetLemmatizer-POS-標籤爲n(=名詞)我想,但我怎麼能使用pos_tag?我認爲預期的WordNetLemmatizer-POS-Tag與我得到的pos_tag不同。有沒有功能或可以幫助我的東西?!?!

在這一行

我認爲word_pos是錯誤的,這就是錯誤的原因

引理= wordnet_lemmatizer.lemmatize(文字,word_pos)

import nltk 
from nltk.corpus import PlaintextCorpusReader 
from nltk import sent_tokenize, word_tokenize, pos_tag 
from nltk.stem import WordNetLemmatizer 
wordnet_lemmatizer = WordNetLemmatizer() 

corpus_root = 'C:\\Users\\myname\\Desktop\\TestCorpus' 
lyrics = PlaintextCorpusReader(corpus_root,'.*') 

for fileid in lyrics.fileids(): 
    tokens = word_tokenize(lyrics.raw(fileid)) 
    tagged_tokens = pos_tag(tokens) 
    for tagged_token in tagged_tokens: 
     word = tagged_token[0] 
     word_pos = tagged_token[1] 
     print(tagged_token[0]) 
     print(tagged_token[1]) 
     lemma = wordnet_lemmatizer.lemmatize(word,pos=word_pos) 
     print(lemma) 

其他問題:是pos_tag足夠我的詞性化或需要我另一個標籤?我的文本是歌詞...

+1

我認爲你的診斷是正確的; nltk已經獲得了一個新的POS標記器,但是顯示的解決方案[here](http://stackoverflow.com/q/15586721/699305)仍然可以工作。如果你確定'nltk.pos_tag()'的準確性(如果你的文本沒有那麼奇怪以至於它需要一個自定義標記器),那麼你就不需要爲安裝另一個標記器而煩惱。 – alexis

+1

(無恥插件; P)試試這個:https://gist.github.com/alvations/07758d02412d928414bb?這是從https://github.com/alvations/pywsd代碼片段 – alvas

+0

也許這也是適當的https://github.com/alvations/pywsd/blob/master/pywsd/utils.py#L100 – alvas

回答

1

您需要將標記從pos_tagger轉換爲wordnet識別的四個「語法類別」之一,然後將其作爲word_pos傳遞給lemmatizer。

the docs

句法類別:N爲名詞的文件,V爲動詞的文件,一個爲形容詞的文件,R爲副詞文件。

相關問題