提取 Xquery 上两个节点之间的节点列表

extract nodes list between two nodes on Xquery

我从事 NLP 项目,我需要从 XML 文档中提取一些信息。这是它的一部分。每个节点项都是一个带有词性、标签、引理的标记...

<basetalismane>
<file type="titre" name="2017/01/01/19-00-00/0,2-3208,1-0,0.xml">
<p type="description">
<item><a>1</a><a>Le</a><a>le</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>2</a><a>det</a><a>2</a><a>det</a></item>
<item><a>2</a><a>bateau</a><a>bateau</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>4</a><a>suj</a><a>4</a><a>suj</a></item>
<item><a>3</a><a>se</a><a>se</a><a>CLR</a><a>CLR</a><a>n=p,s|p=3</a><a>4</a><a>aff</a><a>4</a><a>aff</a></item>
<item><a>4</a><a>rendait</a><a>rendre</a><a>V</a><a>V</a><a>n=s|t=I|p=3</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>5</a><a>sur</a><a>sur</a><a>P</a><a>P</a><a></a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>6</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>7</a><a>det</a><a>7</a><a>det</a></item>
<item><a>7</a><a>île</a><a>île</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>5</a><a>prep</a><a>5</a><a>prep</a></item>
<item><a>8</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>9</a><a>Tidung</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>8</a><a>prep</a><a>8</a><a>prep</a></item>
<item><a>10</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>9</a><a>ponct</a><a>9</a><a>ponct</a></item>
<item><a>11</a><a>destination</a><a>destination</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>12</a><a>touristique</a><a>touristique</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>13</a><a>à</a><a>à</a><a>P</a><a>P</a><a></a><a>11</a><a>dep</a><a>11</a><a>dep</a></item>
<item><a>14</a><a>50</a><a>50</a><a>ADJ</a><a>ADJ</a><a></a><a>15</a><a>mod</a><a>15</a><a>mod</a></item>
<item><a>15</a><a>km</a><a>kilomètre</a><a>NC</a><a>NC</a><a>g=m</a><a>13</a><a>prep</a><a>13</a><a>prep</a></item>
<item><a>16</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>17</a><a>Jakarta</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>16</a><a>prep</a><a>16</a><a>prep</a></item>
<item><a>18</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>17</a><a>ponct</a><a>17</a><a>ponct</a></item>
<item><a>19</a><a>quand</a><a>quand</a><a>CS</a><a>CS</a><a></a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>20</a><a>le</a><a>le</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>21</a><a>det</a><a>21</a><a>det</a></item>
<item><a>21</a><a>moteur</a><a>moteur</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>23</a><a>suj</a><a>23</a><a>suj</a></item>
<item><a>22</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>23</a><a>aux_tps</a><a>23</a><a>aux_tps</a></item>
<item><a>23</a><a>eu</a><a>avoir</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>19</a><a>sub</a><a>19</a><a>sub</a></item>
<item><a>24</a><a>des</a><a>des</a><a>DET</a><a>DET</a><a>n=p</a><a>25</a><a>det</a><a>25</a><a>det</a></item>
<item><a>25</a><a>problèmes</a><a>problème</a><a>NC</a><a>NC</a><a>n=p|g=m</a><a>23</a><a>obj</a><a>23</a><a>obj</a></item>
<item><a>26</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>25</a><a>ponct</a><a>25</a><a>ponct</a></item>
<item><a>27</a><a>puis</a><a>puis</a><a>CC</a><a>CC</a><a></a><a>23</a><a>coord</a><a>23</a><a>coord</a></item>
<item><a>28</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>29</a><a>aux_tps</a><a>29</a><a>aux_tps</a></item>
<item><a>29</a><a>explosé</a><a>exploser</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>27</a><a>dep_coord</a><a>27</a><a>dep_coord</a></item>
<item><a>30</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>29</a><a>ponct</a><a>29</a><a>ponct</a></item>
</p>
<p type="description">
<item><a>1</a><a>Il</a><a>il</a><a>CLS</a><a>CLS</a><a>n=s|g=m|p=3</a><a>3</a><a>suj</a><a>3</a><a>suj</a></item>
<item><a>2</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>3</a><a>aux_tps</a><a>3</a><a>aux_tps</a></item>
<item><a>3</a><a>annoncé</a><a>annoncer</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>4</a><a>que</a><a>que</a><a>CS</a><a>CS</a><a></a><a>3</a><a>obj</a><a>3</a><a>obj</a></item>
<item><a>5</a><a>la</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>6</a><a>det</a><a>6</a><a>det</a></item>
<item><a>6</a><a>reconquête</a><a>reconquête</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>16</a><a>suj</a><a>16</a><a>suj</a></item>
<item><a>7</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>6</a><a>dep</a><a>6</a><a>dep</a></item>
<item><a>8</a><a>la</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>10</a><a>det</a><a>10</a><a>det</a></item>
<item><a>9</a><a>"</a><a>"</a><a>PONCT</a><a>PONCT</a><a></a><a>8</a><a>ponct</a><a>8</a><a>ponct</a></item>
<item><a>10</a><a>capitale</a><a>capitale</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>7</a><a>prep</a><a>7</a><a>prep</a></item>
<item><a>11</a><a>"</a><a>"</a><a>PONCT</a><a>PONCT</a><a></a><a>10</a><a>ponct</a><a>10</a><a>ponct</a></item>
<item><a>12</a><a>autoproclamée</a><a>autoproclamer</a><a>VPP</a><a>VPP</a><a>n=s|g=f|t=K</a><a>10</a><a>mod</a><a>10</a><a>mod</a></item>
<item><a>13</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>12</a><a>mod</a><a>12</a><a>mod</a></item>
<item><a>14</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>15</a><a>det</a><a>15</a><a>det</a></item>
<item><a>15</a><a>EI</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>13</a><a>prep</a><a>13</a><a>prep</a></item>
<item><a>16</a><a>était</a><a>être</a><a>V</a><a>V</a><a>n=s|t=I|p=3</a><a>4</a><a>sub</a><a>4</a><a>sub</a></item>
<item><a>17</a><a>"</a><a>"</a><a>PONCT</a><a>PONCT</a><a></a><a>16</a><a>ponct</a><a>16</a><a>ponct</a></item>
<item><a>18</a><a>une</a><a>une</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>19</a><a>det</a><a>19</a><a>det</a></item>
<item><a>19</a><a>question</a><a>question</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>16</a><a>obj</a><a>16</a><a>obj</a></item>
<item><a>20</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>19</a><a>dep</a><a>19</a><a>dep</a></item>
<item><a>21</a><a>semaines</a><a>semaine</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>20</a><a>prep</a><a>20</a><a>prep</a></item>
<item><a>22</a><a>"</a><a>"</a><a>PONCT</a><a>PONCT</a><a></a><a>21</a><a>ponct</a><a>21</a><a>ponct</a></item>
<item><a>23</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>21</a><a>ponct</a><a>21</a><a>ponct</a></item>
<item><a>24</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>21</a><a>ponct</a><a>21</a><a>ponct</a></item>
</p>
</description>

我致力于句法依赖。在这里你可以看到节点项目是标记(带有词性标记等......我的任务是用[8] = 'sub'定位项目。之后,我需要提取之间相关的词。是a[9],是句法依赖开始的索引,第一个句子(描述节点),子项是

<item><a>23</a><a>eu</a><a>avoir</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>19</a><a>sub</a><a>19</a><a>sub</a></item>

我需要提取他的a[9](这里是19)。事实上,它是我句法依赖的第一个词的索引。这是这个项目(基于索引 a[1])

<item><a>19</a><a>quand</a><a>quand</a><a>CS</a><a>CS</a><a></a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>

我必须做什么?获取所有项目(实际上是这个词的索引和我的项目之间的 [2] 值 'sub'。在第一句话中,以下输出将是

quand le moteur a eu

它是在具有索引的两个节点之间提取节点。但这是我的以下代码。我无法在每个项目之间获取项目节点。小心,它可能有多个子项目,所以我需要添加一个 for 循环

for $p in /basetalismane/file/*//p
let $items := /$p//item[a[8]='sub']
for $p in /basetalismane/file/*//p
let $items := /$p//item[a[8]='sub']
for $item in $items
let $target := /$item/a[9]
let $source := /$item/a[1]
return (
for $i in ($target to $source)
return string-join( $p/item[$i]/a[2]  , ' '))

我只得到每个单词,但没有得到序列。我不能一个一个地连接字符串。 我已经完成了 return $nodes 以查看我抓到了什么。这只是子项目。我想要介于两者之间的项目。我想要一个项目列表或一个带有 a[2] 的字符串来包含这些词。在第二句中,以下输出将是

que la reconquete autoproclamée de la "capitale" de l'EI était

感谢您的帮助。我希望你们清楚,但很难解释(我是法国人)

我觉得

declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";

declare option output:method 'text';
declare option output:item-separator '&#10;';

for $item in //p[@type = 'description']/item[a[8] = 'sub']
return 
    string-join(
      $item/parent::p/item[a[1] = $item/a[9]]/
        (., 
        let $next := following-sibling::item[a[8] = 'sub'][1] 
        return (following-sibling::item[. << $next], $next))/a[2],
      ' '
    )

给予

quand le moteur a eu
que la reconquête de la " capitale " autoproclamée de l' EI était

或许开窗或右折叠也可以帮助表达。