2017-09-21 2 views
1

私が使用してトークン化されたパンダのDFの列があります。タグ付けリスト

df['pos_col'] = nltk.tag.pos_tag(df['token_col']) 
df['wordnet_tagged_pos_col'] = [(w,get_wordnet_pos(t)) for (w, t) in (df['pos_col'])] 

しかしI:今、私はそれらのトークン化の単語使用してタグ付けしようとしている

df['token_col'] = df.col.apply(word_tokenize) 

をエラーになっM」私はかなり理解することはできません。

AttributeError       Traceback (most recent call last) 
<ipython-input-28-99d28433d090> in <module>() 
     1 #tag tokenized lists 
----> 2 df['pos_col'] = nltk.tag.pos_tag(df['token_col']) 
     3 df['wordnet_tagged_pos_col'] = [(w,get_wordnet_pos(t)) for (w, t) in (df['pos_col'])] 

C:\Users\egagne\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tag\__init__.py in pos_tag(tokens, tagset, lang) 
    125  """ 
    126  tagger = _get_tagger(lang) 
--> 127  return _pos_tag(tokens, tagset, tagger) 
    128 
    129 

C:\Users\egagne\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tag\__init__.py in _pos_tag(tokens, tagset, tagger) 
    93 
    94 def _pos_tag(tokens, tagset, tagger): 
---> 95  tagged_tokens = tagger.tag(tokens) 
    96  if tagset: 
    97   tagged_tokens = [(token, map_tag('en-ptb', tagset, tag)) for (token, tag) in tagged_tokens] 

C:\Users\egagne\AppData\Local\Continuum\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\egagne\AppData\Local\Continuum\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\egagne\AppData\Local\Continuum\Anaconda3\lib\site-packages\nltk\tag\perceptron.py in normalize(self, word) 
    236   if '-' in word and word[0] != '-': 
    237    return '!HYPHEN' 
--> 238   elif word.isdigit() and len(word) == 4: 
    239    return '!YEAR' 
    240   elif word[0].isdigit(): 

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

それが違いを作る場合は、私の次のステップはlemmatizinされますグラムそれらのタグ付けされたトークンを使用して:

df['lmtzd_col'] = [(lmtzr.lemmatize(w, pos=t if t else 'n').lower(),t) for (w,t) in wordnet_tagged_pos_col] 
print(len(set(wordnet_tagged_pos_col)),(len(set(df['lmtzd_col'])))) 

MY DFはので、ここで、70以上の列幅である小さなスナップショットです:

ID_number Meeting1 Meeting2 Meeting3 Meeting4 Meeting5 col  
123456789 9/15/2015 1/8/2016 4/27/2016 NaN   NaN   [Assessment, of, Improvement, will, be, on-goi... 
987654321 9/22/2016 NaN   2/25/2017 NaN   NaN   [A, member, of, the, administrative, team, wil.. 
456789123 10/1/2015 11/30/2015 NaN   NaN   NaN   [During, our, second, and, third, meetings, we... 
+0

colのサンプルを投稿できますか? – Dark

+0

@Bharathshetty - サンプルデータを追加しました – LMGagne

+0

'get_wordnet_pos'は組み込み権限ではありませんか? – Dark

答えて

1
あなたは音声タグの部分は

、すなわち取得するために適用されます使用することができます

df['pos_col'] = df['token_col'].apply(nltk.tag.pos_tag) 

df['pos_col'] 
 
0 [(Assessment, NNP), (of, NNP), (Improvement,... 
1 [(A, DT), (member, NNP), (of, NNP), (the, N... 
2 [(During, IN), (our, JJ), (second, NN), (an... 
Name: pos_col, dtype: object 

同様にそのより良いあなたがパスよりも、すべての行に関数を適用するラムダとapply関数を使用します列のすべてのセルにget_wordnet_posを適用する必要があるため、

df['wordnet_tagged_pos_col'] = df['pos_col'].apply(lambda x : [(w,get_wordnet_pos(t)) for (w, t) in x],1) 

などの関数にシリーズを追加する必要があります。

df['wordnet_tagged_pos_col'] 
 
0 [(Assessment, (N, n)), (of, (N, n)), (Improv... 
1 [(A, (D, n)), (member, (N, n)), (of, (N, n))... 
2 [(During, (I, n)), (our, (J, a)), (second, (... 
Name: wordnet_tagged_pos_col, dtype: object 

それがお役に立てば幸いです。

+0

アンパックする値が多すぎます(期待値2)。 – LMGagne

+0

Pos_colまたはwordnet col? – Dark

+0

これはpos_col行です – LMGagne