簡體   English   中英

如何檢查Python NLTK中的某個標簽?

[英]How do I check for a certain tag in Python NLTK?

我一直在嘗試檢查標簽,以查看它是否是'NNP'已有一段時間了。

for key in words:
        temp.append(words[key])
        tagger = [key]
        tag = nltk.pos_tag(tagger)
        x = str(tag[0][1].strip())
        print(x is 'NNP')

代碼應該執行的操作是遍歷幾個鍵並檢查標簽是否為NNP。 無論何時標簽實際上是NNP,我的打印語句都會打印出False。 我使用type(tag [0] [1])檢查它是否為str,是的。 我還剝離了字符串,並決定使用str函數來確保它是字符串。 似乎沒有任何作用。 我應該使用內置的NLTK函數或其他建議嗎?

比較字符串時,應始終使用==運算符而不是is

print(x == 'NNP')

使用is比較字符串對象本身的身份,而==檢查字符串對象是否相等。

例如:

>>> import nltk
>>> tag = nltk.pos_tag(['Google'])
>>> tag
[('Google', 'NNP')]
>>> tag[0][1]
'NNP'
>>> tag[0][1] is 'NNP'
False
>>> tag[0][1] == 'NNP'
True

這是POS標簽檢查的慣用用法:

>>> from nltk import pos_tag, word_tokenize
>>> text = 'Google is a friend of Facebook and Yahoo shouts at Microsoft because Stackoverflow is giving out hats.'
>>> for word, pos in pos_tag(word_tokenize(text)):
...     print word, pos
... 
Google NNP
is VBZ
a DT
friend NN
of IN
Facebook NNP
and CC
Yahoo NNP
shouts NNS
at IN
Microsoft NNP
because IN
Stackoverflow NNP
is VBZ
giving VBG
out RP
hats NNS
. .
>>> for word, pos in pos_tag(word_tokenize(text)):
...     if pos == 'NNP':
...             print word
... 
Google
Facebook
Yahoo
Microsoft
Stackoverflow

使用列表理解:

>>> [word for word, pos in pos_tag(word_tokenize(text)) if pos == 'NNP']
['Google', 'Facebook', 'Yahoo', 'Microsoft', 'Stackoverflow']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM