我会用下面的兄弟做一个递归模板
I would to do a recursive template with following sibling
我从事 NLP 项目,我需要做一些事情。首先,我处理这样的 xml 文件。我准确地说我一周前开始学习 XSLT,所以请理解我。我迷路了,但我在 Whosebug 上阅读了大量关于递归的帖子,并在 XSLT 中阅读了兄弟递归,但我没有找到问题的答案:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="duchn_question2.xsl"?>
<cordial2xml>
<w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>grande</forme><lemme>grand</lemme><categorie>ADJFS</categorie></w><w><forme>douleur</forme><lemme>douleur</lemme><categorie>NCFS</categorie></w><w><forme>du</forme><lemme>du</lemme><categorie>DETDMS</categorie></w><w><forme>père</forme><lemme>père</lemme><categorie>NCMS</categorie></w><w><forme>duchesne</forme><lemme>duchesne</lemme><categorie>NCMS</categorie></w>
<w><forme>au sujet de</forme><lemme>au sujet de</lemme><categorie>PREP</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>mort</forme><lemme>mort</lemme><categorie>NCFS</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>marat</forme><lemme>marat</lemme><categorie>NPMS</categorie></w><w><forme>assassiné</forme><lemme>assassiner</lemme><categorie>VPARPMS</categorie></w><w><forme>à</forme><lemme>à</lemme><categorie>PREP</categorie></w>
<w><forme>coups</forme><lemme>coup</lemme><categorie>NCMP</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>couteau</forme><lemme>couteau</lemme><categorie>NCMS</categorie></w><w><forme>par</forme><lemme>par</lemme><categorie>PREP</categorie></w><w><forme>une</forme><lemme>un</lemme><categorie>DETIFS</categorie></w><w><forme>garce</forme><lemme>gars</lemme><categorie>NCFS</categorie></w><w><forme>du</forme><lemme>du</lemme><categorie>DETDMS</categorie></w><w><forme>calvados</forme><lemme>calvados</lemme><categorie>NCMIN</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
<w><forme>dont</forme><lemme>dont</lemme><categorie>PRI</categorie></w><w><forme>l'</forme><lemme>le</lemme><categorie>DETDMS</categorie></w><w><forme>évêque</forme><lemme>évêque</lemme><categorie>NCMS</categorie></w><w><forme>fauchet</forme><lemme>fauchet</lemme><categorie>NCMS</categorie></w><w><forme>était</forme><lemme>être</lemme><categorie>VINDI3S</categorie></w><w><forme>le</forme><lemme>le</lemme><categorie>DETDMS</categorie></w><w><forme>directeur.ses</forme><lemme>directeur.ses</lemme><categorie>NCI</categorie></w>
<w><forme>bons</forme><lemme>bon</lemme><categorie>ADJMP</categorie></w><w><forme>avis</forme><lemme>avis</lemme><categorie>NCMIN</categorie></w><w><forme>aux</forme><lemme>au</lemme><categorie>DETDPIG</categorie></w><w><forme>braves</forme><lemme>brave</lemme><categorie>NCPIG</categorie></w><w><forme>sans</forme><lemme>sans</lemme><categorie>PREP</categorie></w><w><forme>-culottes</forme><lemme>culotte</lemme><categorie>NCFP</categorie></w><w><forme>pour</forme><lemme>pour</lemme><categorie>PREP</categorie></w>
<w><forme>qu'</forme><lemme>que</lemme><categorie>SUB</categorie></w><w><forme>ils</forme><lemme>il</lemme><categorie>PPER3P</categorie></w><w><forme>se</forme><lemme>se</lemme><categorie>PPER3S</categorie></w><w><forme>tiennent</forme><lemme>tenir</lemme><categorie>VINDP3P</categorie></w><w><forme>sur</forme><lemme>sur</lemme><categorie>PREP</categorie></w><w><forme>leurs</forme><lemme>leur</lemme><categorie>DETPOSS</categorie></w><w><forme>gardes</forme><lemme>garde</lemme><categorie>NCFP</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
<w><forme>attendu qu'</forme><lemme>attendu que</lemme><categorie>SUB</categorie></w><w><forme>il</forme><lemme>il</lemme><categorie>PPER3S</categorie></w><w><forme>y</forme><lemme>y</lemme><categorie>PPER3S</categorie></w><w><forme>a</forme><lemme>avoir</lemme><categorie>VINDP3S</categorie></w><w><forme>dans</forme><lemme>dans</lemme><categorie>PREP</categorie></w><w><forme>paris</forme><lemme>pari</lemme><categorie>NCMP</categorie></w><w><forme>plusieurs</forme><lemme>plusieurs</lemme><categorie>ADJIND</categorie></w><w><forme>milliers</forme><lemme>millier</lemme><categorie>NCMP</categorie></w>
<w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>tondus</forme><lemme>tondu</lemme><categorie>ADJMP</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>vendée</forme><lemme>vendée</lemme><categorie>NPFS</categorie></w><w><forme>qui</forme><lemme>qui</lemme><categorie>PRI</categorie></w><w><forme>ont</forme><lemme>avoir</lemme><categorie>VINDP3P</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>patte</forme><lemme>patte</lemme><categorie>NCFS</categorie></w>
<w><forme>graissée</forme><lemme>graisser</lemme><categorie>VPARPFS</categorie></w><w><forme>pour</forme><lemme>pour</lemme><categorie>PREP</categorie></w><w><forme>égorger</forme><lemme>égorger</lemme><categorie>VINF</categorie></w><w><forme>tous</forme><lemme>tout</lemme><categorie>ADJMP</categorie></w><w><forme>les</forme><lemme>le</lemme><categorie>DETDPIG</categorie></w><w><forme>bons</forme><lemme>bon</lemme><categorie>ADJMP</categorie></w><w><forme>citoyens</forme><lemme>citoyen</lemme><categorie>NCMP</categorie></w><w><forme>.</forme><lemme>.</lemme><categorie>PCTFORTE</categorie></w>
<w><forme>marat</forme><lemme>marat</lemme><categorie>NPMS</categorie></w><w><forme>n'</forme><lemme>ne</lemme><categorie>ADV</categorie></w><w><forme>est</forme><lemme>être</lemme><categorie>VINDP3S</categorie></w><w><forme>plus</forme><lemme>plus</lemme><categorie>ADV</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w><w><forme>foutre.peuple</forme><lemme>foutre.peuple</lemme><categorie>NCI</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w><w><forme>gémis</forme><lemme>gémir</lemme><categorie>VPARPMP</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
我想获取从句子开头的每个 w 个节点,直到子表单包含 '.' 的 w 个节点。 (句子结束)。我想对我的 xml 文档中的每个句子都这样做。
我知道如何从头到尾抓取前 w 个节点。顺便说一句,我想必须跟随我的 xpath 请求中最后一个节点的同级 w 节点,才能让 w 节点与 forme 一起使用“。”英寸
//w[not(contains(./forme, '.'))][following-sibling::*[1][contains(./forme, '.')]]
如果我有以下兄弟姐妹,第一个,在 [contains(./forme, '.')] 之后,我有一个完整的句子和我的 w 节点。我有这个代码:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<xsl:text>
</xsl:text>
<html>
<h1>Poème du Père Duchesne</h1>
<body>
<p><xsl:value-of select="//w[not(contains(./forme, '.'))][following-sibling::*[1][contains(./forme, '.')]]"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
问题是我只捕获了前 w 个节点。我需要找到一个递归应用的方法。现在我只有这个输出:
<!DOCTYPE html>
<html>
<h1>Poème du Père Duchesne</h1>
<body>
<p>leleDETDMS citoyenscitoyenNCMP ,,PCTFAIB laleDETDFS dedePREP horriblehorribleADJSIG
parlerparlerVINF entendreentendreVINF secourssecoursNCMIN alorsalorsADV obtenirobtenirVINF
fersferNCMP sonsonDETPOSS aussiaussiADV estêtreVINDP3S guerreguerreNCFS respectéerespecterVPARPFS
populairepopulaireADJSIG quelquesquelqueADJIND criminelscriminelADJMP guillotineguillotineNCFS
dedePREP ttePPER2S aitavoirVSUBP3S laleDETDFS laleDETDFS canonscanonNCMP touttoutADV
véritablevéritableADJSIG laleDETDFS meilleuremeilleurADJFS égorgéégorgerVPARPMS gloiregloireNCFS
tontonNCMS pitiépitiéNCFS cetteceDETDEM assignatsassignatNCMP auauDETDMS auxauDETDPIG
citoyenscitoyenNCMP leursleurDETPOSS roiroiNCMS foutrefoutreVINF</p>
</body>
</html
所以,只有第一句话,我没有最后一个 w 节点。
我想得到每个句子的输出结果,而不是第一个句子。怎么做?使用递归模板?
谢谢
用同级递归确实可以做到这一点,但使用 <xsl:for-each-group>
更容易做到。类似于:
<xsl:for-each-group select="w" group-ending-with="w[forme='.']">
<p><xsl:value-of select="current-group()/forme" separator=" "/></p>
</xsl:for-each-group>
我从事 NLP 项目,我需要做一些事情。首先,我处理这样的 xml 文件。我准确地说我一周前开始学习 XSLT,所以请理解我。我迷路了,但我在 Whosebug 上阅读了大量关于递归的帖子,并在 XSLT 中阅读了兄弟递归,但我没有找到问题的答案:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="duchn_question2.xsl"?>
<cordial2xml>
<w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>grande</forme><lemme>grand</lemme><categorie>ADJFS</categorie></w><w><forme>douleur</forme><lemme>douleur</lemme><categorie>NCFS</categorie></w><w><forme>du</forme><lemme>du</lemme><categorie>DETDMS</categorie></w><w><forme>père</forme><lemme>père</lemme><categorie>NCMS</categorie></w><w><forme>duchesne</forme><lemme>duchesne</lemme><categorie>NCMS</categorie></w>
<w><forme>au sujet de</forme><lemme>au sujet de</lemme><categorie>PREP</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>mort</forme><lemme>mort</lemme><categorie>NCFS</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>marat</forme><lemme>marat</lemme><categorie>NPMS</categorie></w><w><forme>assassiné</forme><lemme>assassiner</lemme><categorie>VPARPMS</categorie></w><w><forme>à</forme><lemme>à</lemme><categorie>PREP</categorie></w>
<w><forme>coups</forme><lemme>coup</lemme><categorie>NCMP</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>couteau</forme><lemme>couteau</lemme><categorie>NCMS</categorie></w><w><forme>par</forme><lemme>par</lemme><categorie>PREP</categorie></w><w><forme>une</forme><lemme>un</lemme><categorie>DETIFS</categorie></w><w><forme>garce</forme><lemme>gars</lemme><categorie>NCFS</categorie></w><w><forme>du</forme><lemme>du</lemme><categorie>DETDMS</categorie></w><w><forme>calvados</forme><lemme>calvados</lemme><categorie>NCMIN</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
<w><forme>dont</forme><lemme>dont</lemme><categorie>PRI</categorie></w><w><forme>l'</forme><lemme>le</lemme><categorie>DETDMS</categorie></w><w><forme>évêque</forme><lemme>évêque</lemme><categorie>NCMS</categorie></w><w><forme>fauchet</forme><lemme>fauchet</lemme><categorie>NCMS</categorie></w><w><forme>était</forme><lemme>être</lemme><categorie>VINDI3S</categorie></w><w><forme>le</forme><lemme>le</lemme><categorie>DETDMS</categorie></w><w><forme>directeur.ses</forme><lemme>directeur.ses</lemme><categorie>NCI</categorie></w>
<w><forme>bons</forme><lemme>bon</lemme><categorie>ADJMP</categorie></w><w><forme>avis</forme><lemme>avis</lemme><categorie>NCMIN</categorie></w><w><forme>aux</forme><lemme>au</lemme><categorie>DETDPIG</categorie></w><w><forme>braves</forme><lemme>brave</lemme><categorie>NCPIG</categorie></w><w><forme>sans</forme><lemme>sans</lemme><categorie>PREP</categorie></w><w><forme>-culottes</forme><lemme>culotte</lemme><categorie>NCFP</categorie></w><w><forme>pour</forme><lemme>pour</lemme><categorie>PREP</categorie></w>
<w><forme>qu'</forme><lemme>que</lemme><categorie>SUB</categorie></w><w><forme>ils</forme><lemme>il</lemme><categorie>PPER3P</categorie></w><w><forme>se</forme><lemme>se</lemme><categorie>PPER3S</categorie></w><w><forme>tiennent</forme><lemme>tenir</lemme><categorie>VINDP3P</categorie></w><w><forme>sur</forme><lemme>sur</lemme><categorie>PREP</categorie></w><w><forme>leurs</forme><lemme>leur</lemme><categorie>DETPOSS</categorie></w><w><forme>gardes</forme><lemme>garde</lemme><categorie>NCFP</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
<w><forme>attendu qu'</forme><lemme>attendu que</lemme><categorie>SUB</categorie></w><w><forme>il</forme><lemme>il</lemme><categorie>PPER3S</categorie></w><w><forme>y</forme><lemme>y</lemme><categorie>PPER3S</categorie></w><w><forme>a</forme><lemme>avoir</lemme><categorie>VINDP3S</categorie></w><w><forme>dans</forme><lemme>dans</lemme><categorie>PREP</categorie></w><w><forme>paris</forme><lemme>pari</lemme><categorie>NCMP</categorie></w><w><forme>plusieurs</forme><lemme>plusieurs</lemme><categorie>ADJIND</categorie></w><w><forme>milliers</forme><lemme>millier</lemme><categorie>NCMP</categorie></w>
<w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>tondus</forme><lemme>tondu</lemme><categorie>ADJMP</categorie></w><w><forme>de</forme><lemme>de</lemme><categorie>PREP</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>vendée</forme><lemme>vendée</lemme><categorie>NPFS</categorie></w><w><forme>qui</forme><lemme>qui</lemme><categorie>PRI</categorie></w><w><forme>ont</forme><lemme>avoir</lemme><categorie>VINDP3P</categorie></w><w><forme>la</forme><lemme>le</lemme><categorie>DETDFS</categorie></w><w><forme>patte</forme><lemme>patte</lemme><categorie>NCFS</categorie></w>
<w><forme>graissée</forme><lemme>graisser</lemme><categorie>VPARPFS</categorie></w><w><forme>pour</forme><lemme>pour</lemme><categorie>PREP</categorie></w><w><forme>égorger</forme><lemme>égorger</lemme><categorie>VINF</categorie></w><w><forme>tous</forme><lemme>tout</lemme><categorie>ADJMP</categorie></w><w><forme>les</forme><lemme>le</lemme><categorie>DETDPIG</categorie></w><w><forme>bons</forme><lemme>bon</lemme><categorie>ADJMP</categorie></w><w><forme>citoyens</forme><lemme>citoyen</lemme><categorie>NCMP</categorie></w><w><forme>.</forme><lemme>.</lemme><categorie>PCTFORTE</categorie></w>
<w><forme>marat</forme><lemme>marat</lemme><categorie>NPMS</categorie></w><w><forme>n'</forme><lemme>ne</lemme><categorie>ADV</categorie></w><w><forme>est</forme><lemme>être</lemme><categorie>VINDP3S</categorie></w><w><forme>plus</forme><lemme>plus</lemme><categorie>ADV</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w><w><forme>foutre.peuple</forme><lemme>foutre.peuple</lemme><categorie>NCI</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w><w><forme>gémis</forme><lemme>gémir</lemme><categorie>VPARPMP</categorie></w><w><forme>,</forme><lemme>,</lemme><categorie>PCTFAIB</categorie></w>
我想获取从句子开头的每个 w 个节点,直到子表单包含 '.' 的 w 个节点。 (句子结束)。我想对我的 xml 文档中的每个句子都这样做。 我知道如何从头到尾抓取前 w 个节点。顺便说一句,我想必须跟随我的 xpath 请求中最后一个节点的同级 w 节点,才能让 w 节点与 forme 一起使用“。”英寸
//w[not(contains(./forme, '.'))][following-sibling::*[1][contains(./forme, '.')]]
如果我有以下兄弟姐妹,第一个,在 [contains(./forme, '.')] 之后,我有一个完整的句子和我的 w 节点。我有这个代码:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>
<xsl:template match="/">
<xsl:text disable-output-escaping='yes'><!DOCTYPE html></xsl:text>
<xsl:text>
</xsl:text>
<html>
<h1>Poème du Père Duchesne</h1>
<body>
<p><xsl:value-of select="//w[not(contains(./forme, '.'))][following-sibling::*[1][contains(./forme, '.')]]"/></p>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
问题是我只捕获了前 w 个节点。我需要找到一个递归应用的方法。现在我只有这个输出:
<!DOCTYPE html>
<html>
<h1>Poème du Père Duchesne</h1>
<body>
<p>leleDETDMS citoyenscitoyenNCMP ,,PCTFAIB laleDETDFS dedePREP horriblehorribleADJSIG
parlerparlerVINF entendreentendreVINF secourssecoursNCMIN alorsalorsADV obtenirobtenirVINF
fersferNCMP sonsonDETPOSS aussiaussiADV estêtreVINDP3S guerreguerreNCFS respectéerespecterVPARPFS
populairepopulaireADJSIG quelquesquelqueADJIND criminelscriminelADJMP guillotineguillotineNCFS
dedePREP ttePPER2S aitavoirVSUBP3S laleDETDFS laleDETDFS canonscanonNCMP touttoutADV
véritablevéritableADJSIG laleDETDFS meilleuremeilleurADJFS égorgéégorgerVPARPMS gloiregloireNCFS
tontonNCMS pitiépitiéNCFS cetteceDETDEM assignatsassignatNCMP auauDETDMS auxauDETDPIG
citoyenscitoyenNCMP leursleurDETPOSS roiroiNCMS foutrefoutreVINF</p>
</body>
</html
所以,只有第一句话,我没有最后一个 w 节点。 我想得到每个句子的输出结果,而不是第一个句子。怎么做?使用递归模板? 谢谢
用同级递归确实可以做到这一点,但使用 <xsl:for-each-group>
更容易做到。类似于:
<xsl:for-each-group select="w" group-ending-with="w[forme='.']">
<p><xsl:value-of select="current-group()/forme" separator=" "/></p>
</xsl:for-each-group>