2016-08-24 6 views
0

循環的複雑度を減らす:Pythonの:私は次のコードの循環的複雑度を減らすのに助けを必要と

def avg_title_vec(record, lookup): 
    avg_vec = [] 
    word_vectors = [] 
    for tag in record['all_titles']: 
     titles = clean_token(tag).split() 
     for word in titles: 
      if word in lookup.value: 
       word_vectors.append(lookup.value[word]) 
    if len(word_vectors): 
     avg_vec = [ 
      float(val) for val in numpy.mean(
       numpy.array(word_vectors), 
       axis=0)] 

    output = (record['id'], 
       ','.join([str(a) for a in avg_vec])) 
    return output 

例入力:lookup.valueに存在している

record ={'all_titles': ['hello world', 'hi world', 'bye world']} 

lookup.value = {'hello': [0.1, 0.2], 'world': [0.2, 0.3], 'bye': [0.9, -0.1]} 

def clean_token(input_string): 
    return input_string.replace("-", " ").replace("/", " ").replace(
    ":", " ").replace(",", " ").replace(";", " ").replace(
    ".", " ").replace("(", " ").replace(")", " ").lower() 

だから、すべての単語私はそのベクトル形式の平均を取っています。

+1

まず、コードが何をしようとしているのかを説明してください。 –

+0

いくつかの詳細を追加しました – futurenext110

+0

私は最初からこのコードを試してみましたが、私は同じコードで終了しました:) –

答えて

0

最終的にサイクロマティックな複雑さが軽減されないため、おそらく正しい答えとはみなされません。

この亜種はもう少し短いですが、私はそれを一般化することはできません。あなたが持っているものはifです。

def avg_title_vec(record, lookup): 
    word_vectors = [lookup.value[word] for tag in record['all_titles'] 
        for word in clean_token(tag).split() if word in lookup.value] 
    if not word_vectors: 
     return (record['id'], None) 
    avg_vec = [float(val) for val in numpy.mean(
       numpy.array(word_vectors), 
       axis=0)] 

    output = (record['id'], 
       ','.join([str(a) for a in avg_vec])) 
    return output 

あなたのCCはthisによると、すでに良いである、6です。

などのヘルパ関数を使用して関数のCCを減らすことができますが、平均CCは削除されますが、全体的なCCは同じまままたは増加します。単語がlookup.valueであるかどうかをチェックするか、または作業するベクトルがあるかどうかを確認するには、どうすればそれらを取り除くことができません。

関連する問題