Source code for advertools.kw_generate


from itertools import permutations

import pandas as pd

[docs]def kw_generate(products, words, max_len=3, match_types=['Exact', 'Phrase', 'Modified'], campaign_name='SEM_Campaign'): """Generate a data frame of kewywords using a list of products and relevant words. Parameters ---------- products : will be used as the names of the ad groups words : related words that make it clear that the user is interested in `products` max_len : the maximum number of words to include in each permutation of product keywords match_types : can be restricted or kept as is based on preference, possible values: 'Exact', 'Phrase', 'Modified', 'Broad' campaign_name : name of campaign >>> import advertools as adv >>> products = ['bmw', 'toyota'] >>> words = ['buy', 'second hand'] >>> kw_df = adv.kw_generate(products, words) >>> kw_df.head() Campaign Ad Group Keyword Criterion Type Labels 0 SEM_Campaign Bmw bmw buy Exact Buy 1 SEM_Campaign Bmw bmw buy Phrase Buy 2 SEM_Campaign Bmw +bmw +buy Modified Buy 3 SEM_Campaign Bmw bmw second hand Exact Second Hand 4 SEM_Campaign Bmw bmw second hand Phrase Second Hand >>> kw_df.tail() Campaign Ad Group Keyword Criterion Type Labels 55 SEM_Campaign Toyota second hand toyota buy Phrase Second Hand;Buy 56 SEM_Campaign Toyota +second hand +toyota +buy Modified Second Hand;Buy 57 SEM_Campaign Toyota second hand buy toyota Exact Second Hand;Buy 58 SEM_Campaign Toyota second hand buy toyota Phrase Second Hand;Buy 59 SEM_Campaign Toyota +second hand +buy +toyota Modified Second Hand;Buy Returns ------- keywords_df : a pandas.DataFrame ready to upload """ POSSIBLE_MATCH_TYPES = ['Exact', 'Phrase', 'Broad', 'Modified'] if not all([m in POSSIBLE_MATCH_TYPES for m in match_types]): raise ValueError('please make sure match types are any of ' + str(POSSIBLE_MATCH_TYPES)) if max_len < 2: raise ValueError('please make sure max_len is >= 2') headers = ['Campaign', 'Ad Group', 'Keyword', 'Criterion Type', 'Labels'] keywords_list = [] for prod in products: for i in range(2, max_len+1): for perm in permutations([prod] + words, i): if prod not in perm: continue for match in match_types: row = [ campaign_name, prod.title(), ' '.join(perm) if match != 'Modified' else '+' + ' +'.join(perm), match if match != 'Modified' else 'Broad', ';'.join([x.title() for x in perm if x != prod]) ] keywords_list.append(row) return pd.DataFrame.from_records(keywords_list, columns=headers)