簡體   English   中英

如何從數據框中提取名詞

[英]How to extract nouns from dataframe

我想從數據框中提取名詞。 僅名詞。 我做如下

import pandas as pd
import nltk
from nltk.tag import pos_tag
from nltk import word_tokenize
df = pd.DataFrame({'noun': ['good day', 'good night']})

我想得到

    noun
0   day
1   night

我的密碼

df['noun'] = df.apply(lambda row: nltk.word_tokenize(row['noun']), axis=1) 
noun=[]
for  index, row in df.iterrows():
    noun.append([word for word,pos in pos_tag(row) if pos == 'NN'])
df['noun'] = noun 



 ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-194-688cfbb21ec5> in <module>()
      1 noun=[]
      2 for  index, row in df.iterrows():
----> 3     noun.append([word for word,pos in pos_tag(row) if pos == 'NN'])
      4 df['noun'] = noun

C:\Users\Edward\Anaconda3\lib\site-packages\nltk\tag\__init__.py in pos_tag(tokens, tagset)
    109     """
    110     tagger = PerceptronTagger()
--> 111     return _pos_tag(tokens, tagset, tagger)
    112 
    113 

C:\Users\Edward\Anaconda3\lib\site-packages\nltk\tag\__init__.py in _pos_tag(tokens, tagset, tagger)
     80 
     81 def _pos_tag(tokens, tagset, tagger):
---> 82     tagged_tokens = tagger.tag(tokens)
     83     if tagset:
     84         tagged_tokens = [(token, map_tag('en-ptb', tagset, tag)) for (token, tag) in tagged_tokens]

C:\Users\Edward\Anaconda3\lib\site-packages\nltk\tag\perceptron.py in tag(self, tokens)
    150         output = []
    151 
--> 152         context = self.START + [self.normalize(w) for w in tokens] + self.END
    153         for i, word in enumerate(tokens):
    154             tag = self.tagdict.get(word)

C:\Users\Edward\Anaconda3\lib\site-packages\nltk\tag\perceptron.py in <listcomp>(.0)
    150         output = []
    151 
--> 152         context = self.START + [self.normalize(w) for w in tokens] + self.END
    153         for i, word in enumerate(tokens):
    154             tag = self.tagdict.get(word)

C:\Users\Edward\Anaconda3\lib\site-packages\nltk\tag\perceptron.py in normalize(self, word)
    222         if '-' in word and word[0] != '-':
    223             return '!HYPHEN'
--> 224         elif word.isdigit() and len(word) == 4:
    225             return '!YEAR'
    226         elif word[0].isdigit():

AttributeError: 'list' object has no attribute 'isdigit'

請幫助,如何改進它? *對不起,我已經寫了一些文本,以便可以插入所有回溯,我想這是我無法將列表轉換為所需格式的問題嗎?

問題在於,在循環中, row是熊貓Series而不是列表。 您可以通過寫row[0]來訪問單詞列表:

>>> for  index, row in df.iterrows():
>>>     noun.append([word for word,pos in pos_tag(row[0]) if pos == 'NN'])
>>> print(noun)
[['day'], ['night']]

在這里,您將獲得一個列表列表,每個列表包含一個句子中的名詞。 如果您確實想要一個平面列表(如您問題中的示例結果所示),請寫成noun.extend(...)而不是noun.append

暫無
暫無

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

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