2017-09-21 1 views
1

j'ai une colonne dans une Pandas df qui a été tokenized en utilisant:listes de marquage des mots lexicalisés

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

Maintenant, je suis en train de marquer ces mots tokenizés en utilisant:

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'])] 

Mais je « obtiens une erreur que je ne peux pas tout à fait comprendre:

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' 

Si cela fait une différence, ma prochaine étape sera lemmatizin g ces jetons marqués à l'aide:

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 est plus de 70 colonnes de large, alors voici un petit aperçu:

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

Pouvez-vous poster un échantillon de col? – Dark

+0

@Bharathshetty - a ajouté quelques exemples de données – LMGagne

+0

'get_wordnet_pos' n'est pas un droit intégré? – Dark

Répondre

1

Vous pouvez utiliser appliquer pour obtenir les pièces de balises vocales à savoir

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 

de même son mieux vous utilisez la fonction apply avec lambda pour appliquer la fonction sur chaque ligne de passe ing la série à la fonction comme

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

parce que vous devez appliquer get_wordnet_pos sur toutes les cellules de la colonne.

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 

Hope it helps.

+0

Merci, j'ai couru ce code et j'ai' ValueError: trop de valeurs à décompresser (attendu 2) ' – LMGagne

+0

Pos_col ou wordnet col? – Dark

+0

c'est la ligne pos_col – LMGagne