2017-11-29 9 views
4

私はパンダのデータフレームを持っています。 1つの列があります。「col」 この列の各エントリは単語のリストです。 ['word1'、 'word2'など]すべてのパンダ細胞の相同化

nkltライブラリを使用して、これらすべての単語の補題を効率的に計算するにはどうすればよいですか?

import nklt 
nltk.stem.WordNetLemmatizer().lemmatize('word') 

私はパンダのデータセットの1列のすべてのセルのすべての単語のための補題を見つけることができるようにしたいです。

私のデータは、そのようになります。

import pandas as pd 
data = [[['walked','am','stressed','Fruit']],[['going','gone','walking','riding','running']]] 
df = pd.DataFrame(data,columns=['col']) 
+0

あなたのデータに基づいて 'apply'か' applymap'を使います。私たちが適切なものを提案できるようにいくつかのデータを表示してください。 – Dark

答えて

1

あなたは与えられた文字列内の各単語をlemmatizeする機能をパンダからapplyを使用することができます。テキストをトークン化する方法はたくさんあることに注意してください。空白トークナイザを使用する場合は、.のようなシンボルを削除する必要があります。

ここでは、例データフレームの列をどのようにlemmatizeするかの例を示します。

import nltk 

w_tokenizer = nltk.tokenize.WhitespaceTokenizer() 
lemmatizer = nltk.stem.WordNetLemmatizer() 

def lemmatize_text(text): 
    return [lemmatizer.lemmatize(w) for w in w_tokenizer.tokenize(text)] 

df = pd.DataFrame(['this was cheesy', 'she likes these books', 'wow this is great'], columns=['text']) 
df['text_lemmatized'] = df.text.apply(lemmatize_text) 
+0

ありがとうございます!しかし、それは私に言う: 'DataFrame'オブジェクトの属性は 'テキスト'ですか? – james

+0

関数を適用する列の名前を指定する必要があります。私の例では、私の例の列として 'text'を作成します。 – titipata

+0

それは長い時間がかかるのは正常ですか? – james

1
|col| 
['Sushi Bars', 'Restaurants'] 
['Burgers', 'Fast Food', 'Restaurants'] 

wnl = WordNetLemmatizer() 

は、以下の単語のリストを受け取り、見出し語化単語のリストを返す関数を作成します。これはうまくいくはずです。

def lemmatize(s): 
'''For lemmatizing the word 
''' 
    s = [wnl.lemmatize(word) for word in s] 
    return s 

dataset.loc[:,"col_lemma"] = dataset.col.apply(lambda x: lemmatize(x)) 
+0

「DataFrame」オブジェクトに「col」という属性はありません – james

関連する問題