0

自然言語ツールからの一連の XML 文字列出力があり、それらから値を取得する必要があります。また、出力文字列に表示されないタグに null 値を提供する必要があります。Java を使用したXML からのデータの抽出で提供されている Java コードを使用しようとしましたが、うまくいかないようです。

現在のサンプル タグの在庫は次のとおりです。

<TimeStamp>, <Role>, <SpeakerId>, <Person>, <Location>, <Organization> 

XML 出力文字列の例:

<TimeStamp>00.00.00</TimeStamp> <Role>Speaker1</Role><SpeakerId>1234</SpeakerId>Blah, blah, blah. 

欲望の出力:

TimeStamp: 00.00.00
Role: Speaker1
SpeakerId: 1234
Person: null
Place: null
Organization: null

上記のリンク (更新されたコード) で提供されている Java コードを使用するために、次のように挿入<Dummy>しました。</Dummy>

<Dummy><TimeStamp>00.00.00</TimeStamp><Role>Speaker1</Role><SpeakerId>1234</SpeakerId>Blah, blah, blah.</Dummy>

ただし、ダミーと null のみを返します。私はまだJavaの初心者なので、詳細な説明をいただければ幸いです。

4

2 に答える 2

0

これは、Javaラッパーで最終的に行ったことです(TimeStampのみを表示)

  public class NERPost {

      public String convertXML (String input) {
      String nerOutput = input;
      try {
           DocumentBuilderFactory docBuilderFactory = 
           DocumentBuilderFactory.newInstance();
           DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
           InputSource is = new InputSource();            
           is.setCharacterStream(new StringReader(nerOutput));       
           Document doc = docBuilder.parse(is);

        // normalize text representation
        doc.getDocumentElement ().normalize ();
        NodeList listOfDummies = doc.getElementsByTagName("dummy");


        for(int s=0; s<listOfDummies.getLength() ; s++){
            Node firstDummyNode = listOfDummies.item(s);
            if(firstDummyNode.getNodeType() == Node.ELEMENT_NODE){
               Element firstDummyElement = (Element)firstDummyNode;

         //Convert each entity label --------------------------------

          //TimeStamp
               String ts = "<TimeStamp>";
               Boolean foundTs;

               if (foundTs = nerOutput.contains(ts)) {                    
           NodeList timeStampList = firstDummyElement.getElementsByTagName("TimeStamp");

          //do it recursively  
                for (int i=0; i<timeStampList.getLength(); i++) {       
                Node firstTimeStampNode = timeStampList.item(i);
                Element timeStampElement = (Element)firstTimeStampNode;
                NodeList textTSList = timeStampElement.getChildNodes();
                String timeStampOutput = ((Node)textTSList.item(0)).getNodeValue().trim();
                System.out.println ("<TimeStamp>" + timeStampOutput + "</TimeStamp>\n")
                   } //end for
                }//end if
             //other XML tags
              //.....
               }//end if
              }//end for
           }
            catch...
              }//end try
                }}
于 2013-08-03T22:24:16.883 に答える