groupy-by avec for-each-group
Bonjour à tous, j’espère que vous allez bien.
Me concernant, j'ai une petit souci. Je travaille actuellement sur un projet de NLP et je dois récupérer les mots qui ont une dépendance syntaxique de type 'obj'. Mais d'abord, je vous montre un exemple du fichier xml en question
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="exo14_talismane5xsl.xsl"?>
<basetalismane>
<file type="titre" name="2017/01/01/19-00-00/0,2-3208,1-0,0.xml">
<titre>
<p type="titre">
<item><a>1</a><a>Ce</a><a>ce</a><a>PRO</a><a>PRO</a><a>n=s</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>que</a><a>que</a><a>PROREL</a><a>PROREL</a><a></a><a>5</a><a>obj</a><a>5</a><a>obj</a></item>
<item><a>3</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>4</a><a>det</a><a>4</a><a>det</a></item>
<item><a>4</a><a>on</a><a>on</a><a>CLS</a><a>CLS</a><a>n=s|p=3</a><a>5</a><a>suj</a><a>5</a><a>suj</a></item>
<item><a>5</a><a>sait</a><a>savoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>1</a><a>mod_rel</a><a>1</a><a>mod_rel</a></item>
<item><a>6</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>7</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>8</a><a>det</a><a>8</a><a>det</a></item>
<item><a>8</a><a>attentat</a><a>attentat</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>6</a><a>prep</a><a>6</a><a>prep</a></item>
<item><a>9</a><a>du</a><a>de</a><a>P+D</a><a>P+D</a><a>n=s|g=m</a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>10</a><a>Nouvel</a><a>_</a><a>ADJ</a><a>ADJ</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>11</a><a>An</a><a>An</a><a>NPP</a><a>NPP</a><a>n=s</a><a>9</a><a>prep</a><a>9</a><a>prep</a></item>
<item><a>12</a><a>dans</a><a>dans</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>13</a><a>un</a><a>un</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>14</a><a>det</a><a>14</a><a>det</a></item>
<item><a>14</a><a>club</a><a>club</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>12</a><a>prep</a><a>12</a><a>prep</a></item>
<item><a>15</a><a>d'</a><a>de</a><a>P</a><a>P</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>16</a><a>Istanbul</a><a>_</a><a>NPP</a><a>NPP</a><a></a><a>15</a><a>prep</a><a>15</a><a>prep</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>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>16</a><a>ponct</a><a>16</a><a>ponct</a></item>
</p>
</titre>
<titre>
<p type="titre">
<item><a>1</a><a>Tiers</a><a>tiers</a><a>NC</a><a>NC</a><a>g=m</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>payant</a><a>payant</a><a>ADJ</a><a>ADJ</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>3</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>2</a><a>ponct</a><a>2</a><a>ponct</a></item>
<item><a>4</a><a>paquet</a><a>paquet</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>5</a><a>neutre</a><a>neutre</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>4</a><a>mod</a><a>4</a><a>mod</a></item>
<item><a>6</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>5</a><a>ponct</a><a>5</a><a>ponct</a></item>
<item><a>7</a><a>divorce</a><a>divorce</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>8</a><a>
</a><a>
</a><a>PONCT</a><a>PONCT</a><a></a><a>7</a><a>ponct</a><a>7</a><a>ponct</a></item>
<item><a>9</a><a>ce</a><a>ce</a><a>PRO</a><a>PRO</a><a>n=s</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>10</a><a>qui</a><a>qui</a><a>PROREL</a><a>PROREL</a><a>n=s</a><a>11</a><a>suj</a><a>11</a><a>suj</a></item>
<item><a>11</a><a>change</a><a>changer</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>9</a><a>mod_rel</a><a>9</a><a>mod_rel</a></item>
<item><a>12</a><a>en</a><a>en</a><a>P</a><a>P</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>13</a><a>janvier</a><a>janvier</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>12</a><a>prep</a><a>12</a><a>prep</a></item>
<item><a>14</a><a>2017</a><a>2017</a><a>NC</a><a>NC</a><a></a><a>13</a><a>mod</a><a>13</a><a>mod</a></item>
<item><a>15</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>14</a><a>ponct</a><a>14</a><a>ponct</a></item>
<item><a>16</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>14</a><a>ponct</a><a>14</a><a>ponct</a></item>
</p>
</titre>
<titre>
<p type="titre">
<item><a>1</a><a>2016</a><a>2016</a><a>NC</a><a>NC</a><a></a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>:</a><a>:</a><a>PONCT</a><a>PONCT</a><a></a><a>1</a><a>ponct</a><a>1</a><a>ponct</a></item>
<item><a>3</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>4</a><a>det</a><a>4</a><a>det</a></item>
<item><a>4</a><a>année</a><a>année</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>5</a><a>où</a><a>où</a><a>PROREL</a><a>PROREL</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>6</a><a>le</a><a>le</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>7</a><a>det</a><a>7</a><a>det</a></item>
<item><a>7</a><a>libre</a><a>libre</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>9</a><a>mod</a><a>9</a><a>mod</a></item>
<item><a>8</a><a>-</a><a>-</a><a>PONCT</a><a>PONCT</a><a></a><a>7</a><a>ponct</a><a>7</a><a>ponct</a></item>
<item><a>9</a><a>échange</a><a>échange</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>11</a><a>suj</a><a>11</a><a>suj</a></item>
<item><a>10</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>11</a><a>aux_tps</a><a>11</a><a>aux_tps</a></item>
<item><a>11</a><a>vacillé</a><a>vaciller</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>4</a><a>mod_rel</a><a>4</a><a>mod_rel</a></item>
<item><a>12</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>11</a><a>ponct</a><a>11</a><a>ponct</a></item>
<item><a>13</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>11</a><a>ponct</a><a>11</a><a>ponct</a></item>
</p>
</titre>
<titre>
<p type="titre">
<item><a>1</a><a>La</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>2</a><a>det</a><a>2</a><a>det</a></item>
<item><a>2</a><a>Finlande</a><a>Finlande</a><a>NPP</a><a>NPP</a><a>n=s|g=f</a><a>3</a><a>suj</a><a>3</a><a>suj</a></item>
<item><a>3</a><a>commence</a><a>commencer</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>4</a><a>à</a><a>à</a><a>P</a><a>P</a><a></a><a>3</a><a>obj</a><a>3</a><a>obj</a></item>
<item><a>5</a><a>expérimenter</a><a>expérimenter</a><a>VINF</a><a>VINF</a><a>t=W</a><a>4</a><a>prep</a><a>4</a><a>prep</a></item>
<item><a>6</a><a>le</a><a>le</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>7</a><a>det</a><a>7</a><a>det</a></item>
<item><a>7</a><a>revenu</a><a>revenu</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>5</a><a>obj</a><a>5</a><a>obj</a></item>
<item><a>8</a><a>universel</a><a>universel</a><a>ADJ</a><a>ADJ</a><a>n=s|g=m</a><a>7</a><a>mod</a><a>7</a><a>mod</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>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>8</a><a>ponct</a><a>8</a><a>ponct</a></item>
</p>
</titre>
<description>
<p type="description">
<item><a>1</a><a>En</a><a>en</a><a>P</a><a>P</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>2</a><a>Turquie</a><a>Turquie</a><a>NPP</a><a>NPP</a><a>n=s|g=f</a><a>1</a><a>prep</a><a>1</a><a>prep</a></item>
<item><a>3</a><a>,</a><a>,</a><a>PONCT</a><a>PONCT</a><a></a><a>2</a><a>ponct</a><a>2</a><a>ponct</a></item>
<item><a>4</a><a>une</a><a>une</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>5</a><a>célèbre</a><a>célèbre</a><a>ADJ</a><a>ADJ</a><a>n=s</a><a>6</a><a>mod</a><a>6</a><a>mod</a></item>
<item><a>6</a><a>boîte</a><a>boîte</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>11</a><a>suj</a><a>11</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>nuit</a><a>nuit</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>9</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>11</a><a>aux_tps</a><a>11</a><a>aux_tps</a></item>
<item><a>10</a><a>été</a><a>être</a><a>VPP</a><a>VPP</a><a>t=K</a><a>11</a><a>aux_pass</a><a>11</a><a>aux_pass</a></item>
<item><a>11</a><a>visée</a><a>viser</a><a>VPP</a><a>VPP</a><a>n=s|g=f|t=K</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>12</a><a>dans</a><a>dans</a><a>P</a><a>P</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>13</a><a>la</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>14</a><a>det</a><a>14</a><a>det</a></item>
<item><a>14</a><a>nuit</a><a>nuit</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>12</a><a>prep</a><a>12</a><a>prep</a></item>
<item><a>15</a><a>par</a><a>par</a><a>P</a><a>P</a><a></a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>16</a><a>un</a><a>un</a><a>DET</a><a>DET</a><a>n=s|g=m</a><a>17</a><a>det</a><a>17</a><a>det</a></item>
<item><a>17</a><a>attentat</a><a>attentat</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>15</a><a>prep</a><a>15</a><a>prep</a></item>
<item><a>18</a><a>qui</a><a>qui</a><a>PROREL</a><a>PROREL</a><a>n=s</a><a>20</a><a>suj</a><a>20</a><a>suj</a></item>
<item><a>19</a><a>a</a><a>avoir</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>20</a><a>aux_tps</a><a>20</a><a>aux_tps</a></item>
<item><a>20</a><a>fait</a><a>faire</a><a>VPP</a><a>VPP</a><a>n=s|g=m|t=K</a><a>17</a><a>mod_rel</a><a>17</a><a>mod_rel</a></item>
<item><a>21</a><a>au</a><a>à</a><a>P+D</a><a>P+D</a><a>n=s|g=m</a><a>20</a><a>mod</a><a>20</a><a>mod</a></item>
<item><a>22</a><a>moins</a><a>moins</a><a>ADV</a><a>ADV</a><a></a><a>23</a><a>mod</a><a>23</a><a>mod</a></item>
<item><a>23</a><a>39</a><a>39</a><a>ADJ</a><a>ADJ</a><a></a><a>24</a><a>mod</a><a>24</a><a>mod</a></item>
<item><a>24</a><a>morts</a><a>mort</a><a>NC</a><a>NC</a><a>n=p|g=f,m</a><a>21</a><a>prep</a><a>21</a><a>prep</a></item>
<item><a>25</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>24</a><a>ponct</a><a>24</a><a>ponct</a></item>
</p>
<p type="description">
<item><a>1</a><a>L'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>2</a><a>det</a><a>2</a><a>det</a></item>
<item><a>2</a><a>assaillant</a><a>assaillant</a><a>NC</a><a>NC</a><a>n=s|g=m</a><a>5</a><a>suj</a><a>5</a><a>suj</a></item>
<item><a>3</a><a>est</a><a>être</a><a>V</a><a>V</a><a>n=s|t=P|p=3</a><a>5</a><a>aux_tps</a><a>5</a><a>aux_tps</a></item>
<item><a>4</a><a>toujours</a><a>toujours</a><a>ADV</a><a>ADV</a><a></a><a>5</a><a>mod</a><a>5</a><a>mod</a></item>
<item><a>5</a><a>recherché</a><a>rechercher</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>6</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>5</a><a>ponct</a><a>5</a><a>ponct</a></item>
<item><a>7</a><a>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>5</a><a>ponct</a><a>5</a><a>ponct</a></item>
</p>
</description>
<description>
<p type="description">
<item><a>1</a><a>La</a><a>la</a><a>DET</a><a>DET</a><a>n=s|g=f</a><a>3</a><a>det</a><a>3</a><a>det</a></item>
<item><a>2</a><a>nouvelle</a><a>nouveau</a><a>ADJ</a><a>ADJ</a><a>n=s|g=f</a><a>3</a><a>mod</a><a>3</a><a>mod</a></item>
<item><a>3</a><a>année</a><a>année</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>4</a><a>suj</a><a>4</a><a>suj</a></item>
<item><a>4</a><a>annonce</a><a>annoncer</a><a>V</a><a>V</a><a>n=s|t=P,S|p=1,3</a><a>0</a><a>root</a><a>0</a><a>root</a></item>
<item><a>5</a><a>l'</a><a>le</a><a>DET</a><a>DET</a><a>n=s</a><a>6</a><a>det</a><a>6</a><a>det</a></item>
<item><a>6</a><a>entrée</a><a>entrée</a><a>NC</a><a>NC</a><a>n=s|g=f</a><a>4</a><a>obj</a><a>4</a><a>obj</a></item>
<item><a>7</a><a>en</a><a>en</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>vigueur</a><a>vigueur</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>9</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>10</a><a>nouvelles</a><a>nouveau</a><a>ADJ</a><a>ADJ</a><a>n=p|g=f</a><a>11</a><a>mod</a><a>11</a><a>mod</a></item>
<item><a>11</a><a>réformes</a><a>réforme</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>9</a><a>prep</a><a>9</a><a>prep</a></item>
<item><a>12</a><a>.</a><a>.</a><a>PONCT</a><a>PONCT</a><a></a><a>11</a><a>ponct</a><a>11</a><a>ponct</a></item>
</p>
<p type="description">
<item><a>1</a><a>Précisions</a><a>précision</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>0</a><a>_</a><a>0</a><a>_</a></item>
<item><a>2</a><a>sur</a><a>sur</a><a>P</a><a>P</a><a></a><a>1</a><a>dep</a><a>1</a><a>dep</a></item>
<item><a>3</a><a>les</a><a>les</a><a>DET</a><a>DET</a><a>n=p</a><a>4</a><a>det</a><a>4</a><a>det</a></item>
<item><a>4</a><a>mesures</a><a>mesure</a><a>NC</a><a>NC</a><a>n=p|g=f</a><a>2</a><a>prep</a><a>2</a><a>prep</a></item>
<item><a>5</a><a>les</a><a>les</a><a>DET</a><a>DET</a><a>n=p</a><a>7</a><a>det</a><a>7</a><a>det</a></item>
<item><a>6</a><a>plus</a><a>plus</a><a>ADV</a><a>ADV</a><a></a><a>7</a><a>mod</a><a>7</a><a>mod</a></item>
<item><a>7</a><a>importantes</a><a>important</a><a>ADJ</a><a>ADJ</a><a>n=p|g=f</a><a>1</a><a>mod</a><a>1</a><a>mod</a></item>
<item><a>8</a><a>de</a><a>de</a><a>P</a><a>P</a><a></a><a>1</a><a>dep</a><a>1</a><a>dep</a></item>
<item><a>9</a><a>2017</a><a>2017</a><a>NC</a><a>NC</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>§</a><a>§</a><a>PONCT</a><a>PONCT</a><a></a><a>9</a><a>ponct</a><a>9</a><a>ponct</a></item>
</p>
</description> |
Donc dans ce fichier xml la, je veux récupérer les nœuds item dont la dépendance syntaxique est a[8] = 'obj'. Les noeuds items representent des tokens pour ceux qui connaissent un peu le Traitement Automatique des Langues. Jusque là je n'ai pas de souci. Sauf que j'aimerais grouper et trier mes items selon leur catégorie grammaticale (leur POS) et là c'est a[4] de sorte à avoir avoir tous les item avec a[4]='NC' ensemble par exemple et je souhaite afficher pour chaque item le mot a[2] avec son a[4]. Je prends cet exemple de NC parce que c'est le plus courant pour 'obj'. J'ai donc pensé à une structure for-each-group avec grouping-by=a[4] mais le résultat n'est pas terrible. Voila ce que j'obtiens avec le code que je vais vous montrer.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
que PROREL
faire VINF
année NC
pays NC
l' CLO
à P
revenu NC
vux NC
retenir VINF
An NPP
ans NC
amuser VINF
relance NC
soutien NC
objet NC
identité NC
débat NC
être VINF
artiste NC
cours NC
hausse NC
zone NC |
Et ça, c'est mon code. Vous sauriez me dire où est le problème ? Enfin je sais, il y au plus 2 obj par titre, donc mon grouping by ne s'effectue que sur ces deux items. Mais lorsque je change ma template titre de sorte à matcher tous les titres, le processeur XSLT m'affiche le contenu textuel du noeud de tous les items.
Ca c'est mon code pour l'instant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>
<xsl:template match="/">
<xsl:apply-templates select="//titre"/>
</xsl:template>
<xsl:template match="titre">
<xsl:for-each-group select="p//item[a[8]='obj']" group-by="a[4]">
<xsl:for-each select="current-group()">
<xsl:value-of select="concat(current()/a[2], ' ', current()/a[4])"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet> |
Merci pour votre aide.