2016-01-30 15 views
0

Я импортировал свой набор данных с SFrame:Graphlab: Как избежать дублирования вручную функций, которые имеют только другую строковую переменную?

products = graphlab.SFrame('amazon_baby.gl') 
products['word_count'] = graphlab.text_analytics.count_words(products['review']) 

Я хотел бы сделать анализ настроений на множестве слов, как показано ниже:

selected_words = ['awesome', 'great', 'fantastic', 'amazing', 'love', 'horrible', 'bad', 'terrible', 'awful', 'wow', 'hate'] 

Тогда я хотел бы создать новый столбец для каждого из выбранные слова в матрице продукции и вступление в число раз встречается такое слово, так что я создал функцию для слова «удивительный»:

def awesome_count(word_count): 
    if 'awesome' in product: 
     return product['awesome'] 
    else: 
     return 0; 

products['awesome'] = products['word_count'].apply(awesome_count) 

так е так хорошо, но мне нужно вручную создавать другие функции для каждого из выбранных слов таким образом, например, great_count и т. д. Как избежать этого ручного усилия и написать более чистый код?

ответ

0

Я на самом деле найти более простой способ сделать это сделать:

def wordCount_select(wc,selectedWord): 
    if selectedWord in wc: 
     return wc[selectedWord] 
    else: 
     return 0  


for word in selected_words: 
    products[word] = products['word_count'].apply(lambda wc: wordCount_select(wc, word)) 
0

Я думаю, что команда SFrame.unpack должна сделать трюк. Фактически, параметр limit примет ваш список выбранных слов и сохранит только эти результаты, чтобы часть была значительно упрощена.

Я не знаю точно, что в данных обзорах, поэтому я сделал пример игрушка:

# Create the data and convert to bag-of-words. 
import graphlab 
products = graphlab.SFrame({'review':['this book is awesome', 
             'I hate this book']}) 

products['word_count'] = \ 
    graphlab.text_analytics.count_words(products['review']) 

# Unpack the bag-of-words into separate columns. 
selected_words = ['awesome', 'hate'] 
products2 = products.unpack('word_count', limit=selected_words) 


# Fill in zeros for the missing values. 
for word in selected_words: 
    col_name = 'word_count.{}'.format(word) 
    products2[col_name] = products2[col_name].fillna(value=0) 

Я также не могу не отметить, что GraphLab Создать действительно есть its own sentiment analysis toolkit, что может быть стоит выписка.

+0

Спасибо за помощь. Я провожу немного времени и нахожу более простой способ применения и лам. – drdot

+0

Извините, я не совсем понимаю. Вы ищете ответ, который использует 'apply', вместо' unpack'? – papayawarrior

+1

Я чувствую, что использование apply выглядит более чистым, чем использование методов «unpack», «format» и «fillna». Не стесняйтесь бросать разные мнения. – drdot