从xml文件中提取特定语言的单词

时间:2018-11-07 10:01:36

标签: xslt-3.0

给出以下xml(当然它包含许多记录),

我想从中输出唯一的值,并生成报告,该报告将包含找到每个单词的记录。

    <collection>
<record>
  <controlfield tag="001">1</controlfield>
  <datafield tag="200" ind1="1" ind2=" ">
    <subfield code="a">Metafore po</subfield>
    <subfield code="e">Δοκίμια</subfield>
    <subfield code="f">Περικλής αρχαία Ελλάδα</subfield>
  </datafield>
  <datafield tag="210" ind1="|" ind2="|">
    <subfield code="a">Η Αθήνα</subfield>
    <subfield code="c">Νοέμβριος</subfield>
    <subfield code="d">1999</subfield>
  </datafield>
  <datafield tag="215" ind1=" " ind2=" ">
    <subfield code="a">263 s.</subfield>
  </datafield>
  <datafield tag="606" ind1="|" ind2=" ">
    <subfield code="3">250000087120140311174609</subfield>
    <subfield code="a">Πλάτων ιστορία</subfield>
  </datafield>
  <datafield tag="700" ind1=" " ind2="1">
    <subfield code="3">200000000120140228092156</subfield>
    <subfield code="4">070</subfield>
    <subfield code="a">Liper</subfield>
    <subfield code="b">Berit von der</subfield>
  </datafield>
</record>
<record>
  <controlfield tag="001">here text may also exist</controlfield>
  <datafield tag="200" ind1="1" ind2=" ">
    <subfield code="a">Metafore po</subfield>
    <subfield code="e">Δοκίμια</subfield>
    <subfield code="f">Περικλής</subfield>
  </datafield>
</collection>

所需的输出(xml格式,或者更容易实现的输出)

Δοκίμια: 1, here text may also exist
Περικλής: 1, here text may also exist
αρχαία: 1
Η: 1

等... 我尝试过的正则表达式: / [Α-Ωα-ω] {1,} /

1 个答案:

答案 0 :(得分:0)

看来您可以将其视为分组问题:

  <xsl:template match="collection">
      <xsl:where-populated>
          <ul>
              <xsl:for-each-group select="record" group-by="datafield/subfield!tokenize(., '\s')[matches(., '\p{IsGreek}')]">
                  <li>
                      {current-grouping-key()} : <xsl:value-of select="current-group()/controlfield" separator=", "/>
                  </li>

              </xsl:for-each-group>
          </ul>
      </xsl:where-populated>
  </xsl:template>

https://xsltfiddle.liberty-development.net/gWmuiKi/1输出

  <ul>
     <li>
        Δοκίμια : 1, here text may also exist
     </li>
     <li>
        Περικλής : 1, here text may also exist
     </li>
     <li>
        αρχαία : 1
     </li>
     <li>
        Ελλάδα : 1
     </li>
     <li>
        Η : 1
     </li>
     <li>
        Αθήνα : 1
     </li>
     <li>
        Νοέμβριος : 1
     </li>
     <li>
        Πλάτων : 1
     </li>
     <li>
        ιστορία : 1
     </li>
  </ul>

那样。

当然,由于标点符号和特定语言的规则,在大多数文本和语言中,仅通过在空白处进行标记来识别“单词”将失败。但是XSLT / XPath / XQuery正则表达式无论如何都没有断字元字符,因此必须以某种方式使用标记化或分析字符串。