2016-10-08 55 views
1

我想幹這個代碼。我似乎無法弄清楚如何。如何幹這個紅寶石代碼

def get_all_verb_nodes 
    all_verb_nodes = @all_nodes_ins_del_nodes.select { |node| 
    previous_node = node.xpath('preceding-sibling::w:r').last 
    base_word = previous_node.text.split.last.strip.delete('.!?,:') if previous_node 
    words = get_node_text(node) 
    next_node = node.next_element 
    next_node_is_insert_or_delete = is_insert_or_delete?(next_node.name) if next_node 
    next_node_word = next_node.text.strip if next_node 
    words.length <= 2 && words.any? { |word| is_a_verb?(base_word+word) || is_a_verb?(word) && !is_pluralized?(base_word+word, base_word+next_node_word) } && !next_node_is_insert_or_delete 
    } 
end 


def get_all_article_nodes 
    all_article_nodes = @all_nodes_ins_del_nodes.select { |node| 
    previous_node = node.xpath('preceding-sibling::w:r').last 
    base_word = previous_node.text.split.last.strip.delete('.!?,:') if previous_node 
    words = get_node_text(node) 
    next_node = node.next_element 
    next_node_is_insert_or_delete = is_insert_or_delete?(next_node.name) if next_node 
    next_node_word = next_node.text.strip if next_node 
    words.length <= 2 && words.any? { |word| @articleset.include?(word) || (@articleset.include?(base_word) if word == 'n') } && [email protected]?(next_node_word) && !next_node_is_insert_or_delete 
    } 
end 

兩者幾乎相同,只是最後一行定義了函數的具體要求。

任何想法讚賞。

+0

它看起來相當程序化,很難閱讀評論,但塊和調用'yield'可能是你在這裏需要的。 –

回答

2

這是對它的第一次剪裁。我移動了所有東西,所以它們按邏輯分組,並促進收益率。

def get_all_nodes 
    @all_nodes_ins_del_nodes.select do |node| 
    previous_node = node.xpath('preceding-sibling::w:r').last 
    base_word = previous_node.text.split.last.strip.delete('.!?,:') if previous_node 

    next_node = node.next_element 
    next_node_is_insert_or_delete = is_insert_or_delete?(next_node.name) if next_node 
    next_node_word = next_node.text.strip if next_node 

    words = get_node_text(node) 
    words.length <= 2 && 
    !next_node_is_insert_or_delete && 
    yield(words, base_word, next_node_word) 
    end 
end 

all_verb_nodes = get_all_nodes do |words, base_word, next_node_word| 
    words.any? do |word| 
    is_a_verb?(base_word + word) || 
    is_a_verb?(word) && 
    !is_pluralized?(base_word + word, base_word + next_node_word) 
    end 
end 

all_article_nodes = get_all_nodes do |words, base_word, next_node_word| 
    [email protected]?(next_node_word) && 
    words.any? do |word| 
    @articleset.include?(word) || (@articleset.include?(base_word) if word == 'n') 
    end 
end 
+0

謝謝你的想法和代碼seph。我會盡力回覆你。從我所能看到的,它使我走上正確的道路並回答我的問題。 – chell