2016-10-08 2 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