2016-06-21 2 views
-1

다음 문제로 인해 XSLT에 대한 지식이 한계에 다다 랐습니다.XSLT로 문장으로 토큰 화하는 방법

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
<p> 
    <w>This</w> 
    <w>is</w> 
    <w>a</w> 
    <w>sentence</w> 
    <w>with</w> 
    <w>a</w> 
    <entity type="name">Name</entity> 
    <w>and</w> 
    <w>a</w> 
    <entity type="place">Place</entity> 
    <w>etc</w>. <w>This</w> 
    <w>is</w> 
    <w>another</w> 
    <w>sentence</w> 
    <w>with</w> 
    <w>an</w> 
    <w>abbrev</w>. <w>before</w> 
    <w>its</w> 
    <w>end</w>. <w>Is</w> 
    <w>this</w> 
    <w>a</w> 
    <w>question</w>? <w>Sure</w> 
    <w>it</w> 
    <w>is</w>! </p> 
</root> 

텍스트가 이미 단어 토큰 화 :

나는이처럼 보이는 XML 파일, 단순화가 있습니다. 문장을 자동으로 마크 업해야합니다. 이를 위해, 나는 문장 끝 가능한 문자가 포함 된 변수가 :

  • 그룹 즉 각 단락 이상

    • 루프 : 그래서

      <xsl:variable name="SEnd">.!?</xsl:variable> 
      

      을 나는 것 XSLT 2.0 스타일 시트를 필요 (<w>)가 단락에서 첫 번째로 <w>으로 시작하여 즉시 형제 text() 노드가 변수 집합 "SEnd"의 멤버 중 하나로 시작하지만 following-sibling::w이 자본으로 시작하는 경우에만 <w> 요소로 끝납니다 편지 (여러 스크립트가 있기 때문에 REG \p{Lu}이어야하며 [A-Z]이 아님).

    • 상기 각 그룹을 <s></s>에 감싼다.

    이 경우 <w>abbrev</w>.은 문장의 마지막 단어로 인식되지 않습니다.이 단어의 뒤에는 소문자 단어가 있기 때문입니다.

    결과는 다음과 같아야합니다

    <?xml version="1.0" encoding="UTF-8"?> 
    <root> 
    <p> 
        <s><w>This</w> 
         <w>is</w> 
         <w>a</w> 
         <w>sentence</w> 
         <w>with</w> 
         <w>a</w> 
         <entity type="name">Name</entity> 
         <w>and</w> 
         <w>a</w> 
         <entity type="place">Place</entity> 
         <w>etc</w>.</s> 
        <s><w>This</w> 
         <w>is</w> 
         <w>another</w> 
         <w>sentence</w> 
         <w>with</w> 
         <w>an</w> 
         <w>abbrev</w>. <w>before</w> 
         <w>its</w> 
         <w>end</w>.</s> 
        <s><w>Is</w> 
         <w>this</w> 
         <w>a</w> 
         <w>question</w>?</s> 
        <s><w>Sure</w>, 
         <w>it</w> 
         <w>is</w>!</s> 
    </p> 
    </root> 
    

    나는이 방탄 아니라는 것을 알고, 예외가있을 것입니다,하지만이 특정 작업에 대한 중요하지 않습니다. 나는 개념적으로 문제를 이해하고, 나는 하나를 사용해야한다고 생각한다. 그러나 실제로 그것을 함께 모으는 방법을 잃어 버렸다.

    귀하의 도움에 감사드립니다.

    모든 최선을

    , Tench입니다

  • 답변

    1

    방법에 대해 :

    <xsl:template match="p"> 
        <xsl:copy> 
         <xsl:for-each-group select="node()" group-ending-with="text()[matches(., $SEnd)][matches(following-sibling::w[1], '^\p{Lu}')]"> 
          <s> 
           <xsl:apply-templates select="current-group()" /> 
          </s> 
         </xsl:for-each-group> 
        </xsl:copy> 
    </xsl:template> 
    
    +0

    예. 예. 예. 정말 고맙습니다! 이제 나는 마침내 그룹 결말을 이해합니다. – Tench

    관련 문제