【问题标题】:extract words of a certain language out of an xml file从 xml 文件中提取某种语言的单词
【发布时间】:2018-11-07 10:01:35
【问题描述】:

给定以下 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,}/

【问题讨论】:

    标签: xslt-3.0


    【解决方案1】:

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

      <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 正则表达式无论如何都没有分词元字符,因此必须以某种方式使用标记化或分析字符串。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多