2016-10-06 4 views
-1

사용하여 두 단어 길이의 텍스트를 가지고있는 ID와 요소를 추출하는 방법 :다음과 같이 내가 XML 파일이 노코 기리

@verbs = ["is", "will", "write", "are", "should", "be", "will", "add", "see", "adding", "is", "should", "be", "inserted", "will", "delete", "view", "deleting", "works", "should", "be", "deleted", "tests", "adding", "should", "be", "was", "will", "make", "is", "should", "be", "will", "adding", "should", "be", "inserted", "will", "delete", "remove", "see", "deleting", "works", "working", "should", "be", "deleted", "test", "adding", "should", "be"] 

내가 할 수있는 :

<w:p w14:paraId="646BED8B" w14:textId="30F19BEA" w:rsidR="00CA7979" w:rsidRDefault="00197F7D"> 
    <w:r> 
     <w:t xml:space="preserve">This </w:t> 
    </w:r> 
    <w:r w:rsidR="00656E17"> 
     <w:t xml:space="preserve">first sentence </w:t> 
    </w:r> 
    <w:ins w:author="Mitchell Gould" w:date="2016-10-04T16:15:00Z" w:id="0"> 
     <w:r w:rsidR="00E24CA3"> 
      <w:t>is</w:t> 
     </w:r> 
    </w:ins> 
    <w:del w:author="Mitchell Gould" w:date="2016-10-04T16:15:00Z" w:id="1"> 
     <w:r w:rsidDel="00E24CA3" w:rsidR="00656E17"> 
      <w:delText>was</w:delText> 
     </w:r> 
    </w:del> 
    <w:r> 
     <w:t xml:space="preserve">for checking the verb usage errors. I will</w:t> 
    </w:r> 
    <w:ins w:author="Mitchell Gould" w:date="2016-10-04T16:18:00Z" w:id="2"> 
     <w:r w:rsidR="00BF77BA"> 
      <w:t xml:space="preserve">write</w:t> 
     </w:r> 
    </w:ins> 
    <w:del w:author="Mitchell Gould" w:date="2016-10-04T16:18:00Z" w:id="3"> 
     <w:r w:rsidDel="00BF77BA"> 
      <w:delText xml:space="preserve">make</w:delText> 
     </w:r> 
    </w:del> 
    <w:r> 
     <w:t xml:space="preserve">some </w:t> 
    </w:r> 
    <w:r w:rsidR="00BF77BA"> 
     <w:t xml:space="preserve"/> 
    </w:r> 
    <w:r> 
     <w:t>changes</w:t> 
    </w:r> 
    <w:r> 
     <w:t xml:space="preserve">to the verbs and check it if the verbs </w:t> 
    </w:r> 
    <w:ins w:author="Mitchell Gould" w:date="2016-10-04T16:15:00Z" w:id="4"> 
     <w:r w:rsidR="00E24CA3"> 
      <w:t>are</w:t> 
     </w:r> 
    </w:ins> 
    <w:del w:author="Mitchell Gould" w:date="2016-10-04T16:15:00Z" w:id="5"> 
     <w:r w:rsidDel="00E24CA3"> 
      <w:delText>is</w:delText> 
     </w:r> 
    </w:del> 
    <w:r> 
     <w:t xml:space="preserve">fixed.</w:t> 
    </w:r> 
</w:p> 

나는 동사의 배열을 가지고 다음과 같이 ID :

@elements = @file.xpath('//*[@w:id]') 

을하지만 제가하고 싶은 것은 FOL 일치하는 파일의 요소만을 얻을 수있다, w와 모든 요소를 ​​얻을 lowing는 :

  1. 텍스트는이 개 단어 또는 단어의 적은
  2. 한 내 @verbs 배열에 포함되어 있습니다.

Nokogiri로 이것을 수행 할 수 있습니까?

+0

예제 XML의 크기를 줄이십시오. 코드에 문제가 있음을 입증하는 데 필요한 최소값이 필요합니다. 그 이상으로 공간과 시간이 낭비됩니다. "[ask]"는 링크 된 페이지와 함께, "[mcve]"는 도움이 될 것입니다. 또한 "[Stack Overflow 사용자에게 얼마나 많은 연구 노력이 필요합니까?] (http://meta.stackoverflow.com/q/261592)"는 중요한 읽기입니다. 문제를 설명하는 코드의 예를 보려고합니다. 문제를 해결하는 데 도움이되지 않는 단일 행뿐만 아니라 몇 가지 요구 사항을 보여줍니다. –

답변

1

가장 쉬운 방법은뿐만 아니라 루비의 비트에 혼합하는 것입니다

@file.xpath('//*[@w:id]').select { |node| 
    words = node.text.split 
    words.length <= 2 && words.any? { |word| @verbs.include?(word) } 
} 

그것은 당신이 확인 몇 단어 이상이있는 경우, 당신은 많은 것, 나에게 발생

require 'set' 
@verbset = Set.new(@verbs) 

을하고 배열 회원 테스트보다 훨씬 빠르기 때문이어서, @verbset.include?(word) 의하면 : 집합에 @verbs 변환하여 행복.

+0

그냥 시도하고 완벽하게 작동합니다! 굉장해. 루비 믹싱에 대해 알려 주셔서 감사합니다. – chell

+0

Amadan에게 감사드립니다. 나는 세트에 대해 몰랐다. 나는 당신을 두 번 투표 할 수 있기를 바랍니다. – chell

+0

# (NoMethodError)에 대해 정의되지 않은 메소드'include '를 얻고 있습니다. 내 나쁜 내가 잊어 버렸어? – chell