2016-10-06 13 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:wを持つすべての要素を取得

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

しかし、私がやりたいことはFOLに一致するファイルに入る唯一の要素でありますlowing:

  1. テキストが2語以下
  2. 言葉の一つは、私の@verbs配列に含まれています。

ノコギリでこれを行うことはできますか?

+0

サンプルXMLのサイズを小さくしてください。コードの問題を示すために必要な最小限のものが必要です。それ以上のものは、スペースと時間を無駄にします。 "[ask]"とリンク先のページ、 "[mcve]"が役立ちます。また、「どのくらいの研究努力がStack Overflowユーザーに期待されていますか?」(http://meta.stackoverflow.com/q/261592) "は重要な読書です。あなたが書いたコードの例を見てみましょう。問題を示すコードは、解決に手が届かない単一行だけでなく、いくつかの要件を示しています。 –

答えて

1

最も簡単な方法は、同様のRubyのビットで混合することである。

@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

ちょうどそれを試して、それは完全に動作します!驚くばかり。 Rubyでのミキシングについて教えてくれてありがとうございました。 – chell

+0

アマダンに感謝します。私はセットについて知らなかった。私はあなたに二倍の投票をして欲しいです。 – chell

+0

私はそれを試して、#(NoMethodError)に対して未定義のメソッド 'include 'を取得しています。私の悪い私は忘れた? – chell

関連する問題