2017-01-05 10 views
1

キーワードを入力として受け取り、関連するキーワードのリストを返す関数があります。 私が必要とするのは、関連するキーワードを取得し、返されたリストの各キーワードに対して再度実行する関数です。私は必要なものリスト再帰の各要素に関数を適用

def find_related(kw): 

#magic happens 

return related_kws 

''' 
Example: 

>>>find_related('eat') 
{ 
    'base_kw': 'eat' 
    'related_kws': ['eat pasta', 'eat meat', 'eat fish'] 
} 
''' 

は次のようなものです:

def difficult_function(kw, cycles): 

#cycles determines number of times to run recursion 
#magic beyond my league happens... 

return more_related_keywords 

''' 
EXAMPLE #1 

>>>difficult_function('eat', 2) 
{ 
    'base_kw': 'eat' 
    'related_kws': { 
     'eat pasta': ['eat cold pasta', 'eat italian pasta', 'eat instant pasta'], 
     'eat meat': ['eat raw meat', 'eat cow meat', 'eat roasted meat'], 
     'eat fish': ['eat raw fish', 'eat rotten fish', 'eat fresh fish'] 
    } 
} 

''' 

''' 
EXAMPLE #2 

>>>difficult_function('eat', 3) 
{ 
    'base_kw': 'eat' 
    'related_kws': { 
     'eat pasta': { 
      'eat cold pasta': [ 
       'eat cold pasta with sauce', 
       'eat cold pasta and wine', 
       'eat cold pasta at night' 
      ], 
      'eat italian pasta': [ 
       'eat italian cheap pasta', 
       'eat best italian pasta', 
       'eat italian pasta and pesto' 
      ], 
      'eat instant pasta': [ 
       'eat instant pasta snack', 
       'eat instant cheese pasta', 
       'eat healthy instant pasta' 
      ] 
     }, 
     'eat meat': { 
      'eat raw meat': [ 
       'eat raw meat dangerous', 
       'eat raw chicken meat', 
       'eat raw meat with lemon' 
      ], 
      'eat cow meat': [ 
       'eat cow meat and salad', 
       'eat cow meat and rice, 
       'eat cow meat benefits' 
      ], 
      'eat roasted meat': [ 
       'eat roasted meat sandwich', 
       'eat cold roasted meat', 
       'don\'t eat roasted meat' 
      ] 
     }, 
     'eat fish': { 
      'eat raw fish': [ 
       'eat raw fish sushi', 
       'eat raw fish health', 'eat raw fish japanese'], 
      'eat rotten fish': [ 
       'eat rotten fish bacteria', 
       'eat rotten fish death', 
       'eat rotten fish stomach' 
      ], 
      'eat fresh fish': [ 
       'eat fresh fish restaurant', 
       'eat fresh fish with lemon', 
       'eat fresh fish at home'] 
     } 
    } 
} 
''' 

私は私は私はすでに試したものをここで共有することになってるけど、真実は、私もどこから始めかわからないんです。何か案は?

EDIT:

関数は以下find_related(KW)の機能をシミュレートします。質問がappropiate方法で提示されていない場合、私の謝罪は、私が与えられた例に一致する合計noobの

import string 
import random 

def find_related(kw): 
    # A lot of magic happens, the list comprehension 
    # below simulates the magic 
    related_kws = [ 
     kw + ' ' + ''.join(
      random.choice(string.ascii_lowercase) for 
      _ in range(4)) for i in range(3) 
    ] 

    results = { 
     'base_kw': kw, 
     'related_kws': related_kws 
    } 

    return results 

モック機能です。

def find_related(kw): 
    '''mock function''' 
    # A lot of magic happens, this simulates the magic 
    d = {'eat': ['eat pasta', 'eat meat', 'eat fish'], 
     'eat pasta': ['eat cold pasta', 'eat italian pasta', 'eat instant pasta'], 
     'eat meat': ['eat raw meat', 'eat cow meat', 'eat roasted meat'], 
     'eat fish': ['eat raw fish', 'eat rotten fish', 'eat fresh fish'], 
     'eat cold pasta': ['eat cold pasta with sauce', 'eat cold pasta and wine', 'eat cold pasta at night'], 
     'eat italian pasta': ['eat italian cheap pasta', 'eat best italian pasta', 'eat italian pasta and pesto'], 
     'eat instant pasta': ['eat instant pasta snack', 'eat instant cheese pasta', 'eat healthy instant pasta'], 
     'eat raw meat': ['eat raw meat dangerous', 'eat raw chicken meat', 'eat raw meat with lemon'], 
     'eat cow meat': ['eat cow meat and salad', 'eat cow meat and rice', 'eat cow meat benefits'], 
     'eat roasted meat': ['eat roasted meat sandwich', 'eat cold roasted meat', 'don\'t eat roasted meat'], 
     'eat raw fish': ['eat raw fish sushi', 'eat raw fish health', 'eat raw fish japanese'], 
     'eat rotten fish': ['eat rotten fish bacteria', 'eat rotten fish death', 'eat rotten fish stomach'], 
     'eat fresh fish': ['eat fresh fish restaurant', 'eat fresh fish with lemon', 'eat fresh fish at home'] 

     } 


    results = { 
     'base_kw': kw, 
     'related_kws': d[kw] 
     } 
+0

解決策につながるためには、さらに完全な問題仕様が必要になると思います。追加された単語はどこから来ますか? 「冷たい」、「イタリアン」、「インスタント」の参照がどこかにあるべきです、挿入が必要な情報などがあります。 – Prune

+0

返信いただきありがとうございます。それは、スクレイピングや内部データベースなどに基づいて、関連するキーワードが何であるかを決定する非常に大きなスクリプトです。基本的に、それをkwに渡し、関連するkwのリストを返します。私は現在の関数の動作をシミュレートする関数を追加する質問を編集中です – galatron

+0

また、コードの完全な欠如は、データ構造の反復処理、文字列の操作などがわからないことを意味します。これは役に立ちません助けを得るためのあなたのケース。 – Prune

答えて

1

ここで誰かが似た何かを探している場合の答えがあります。質問がうまく提示されなかった場合には、私の謝罪。

import pprint 
import string 
import random 

def find_related(kw): 
    # A lot of magic happens, the list comprehension 
    # below simulates the magic 
    related_kws = [ 
     kw + ' ' + ''.join(
      random.choice(string.ascii_lowercase) for 
      _ in range(4)) for i in range(3) 
    ] 
    results = { 
     'base_kw': kw, 
     'related_kws': related_kws 
    } 
    return results 

def difficult_function(kw, cycles):  
    return { 
     'base_kw': kw, 
     'related_kws': rec_kw(kw, cycles) 
    } 

def rec_kw(kw, cycles): 
    if cycles == 1: 
     return find_related(kw) 
    else: 
     result = {} 
     for k in find_related(kw)['related_kws']: 
      result[k] = rec_kw(k, cycles-1) 
     return result 

pprint.pprint(difficult_function('eat', 3)) 
0

このコードは必要な処理を行います。結果を見るために、私はグローバルリストINPと連携するように書いたが、原則があなたのために働くだろう。

INP = ["Lorem", "Ipsum", "dolor", "atea"] 

def recursive (kw, max, ref=None): 

    ret = None 
    if ref is None: 
     ret = {'base_kw' : kw, 'related_kws' : {}} 
     ref = ret ['related_kws'] 

    if max != 1: 
     words = [' '.join (INP [0: len (INP) - max + 1]), ] 
     for kw in words: 
      ref [kw] = {} 
      ref = ref [kw] 
      recursive (kw, max -1, ref) 
    else: 
     ref [kw] = [' '.join (INP)] 

    return ret 

print (recursive ("Lorem", 3)) 

これが出力されます:

{'related_kws': {'Lorem Ipsum': {'Lorem Ipsum dolor': {'Lorem Ipsum dolor': ['Lorem Ipsum dolor atea']}}}, 'base_kw': 'Lorem'} 
関連する問題