从 xml 文件中提取某种语言的单词
extract words of a certain language out of an xml file
给定以下 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,}/
看来您可以将其视为分组问题:
<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>
那样。
当然,由于标点符号和特定于语言的规则,通过简单地标记白色 space 来识别 "word" 在大多数文本和语言中都是失败的。但是 XSLT/XPath/XQuery 正则表达式无论如何都没有断字元字符,因此必须以某种方式使用标记化或分析字符串。
给定以下 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,}/
看来您可以将其视为分组问题:
<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>
那样。
当然,由于标点符号和特定于语言的规则,通过简单地标记白色 space 来识别 "word" 在大多数文本和语言中都是失败的。但是 XSLT/XPath/XQuery 正则表达式无论如何都没有断字元字符,因此必须以某种方式使用标记化或分析字符串。