Revision 2398 tmp/org.txm.oriflamms.rcp/res/oriflamms-tokenize-words.xsl

oriflamms-tokenize-words.xsl (revision 2398)
1 1
<?xml version="1.0"?>
2
<xsl:stylesheet xmlns:edate="http://exslt.org/dates-and-times"
3
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0"
4
  xmlns:xd="http://www.pnp-software.com/XSLTdoc"
5
  xmlns:txm="http://textometrie.org/1.0"
6
  exclude-result-prefixes="tei edate xd txm" version="2.0">
2
<xsl:stylesheet
3
	xmlns:edate="http://exslt.org/dates-and-times"
4
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
5
	xmlns:tei="http://www.tei-c.org/ns/1.0"
6
	xmlns:xd="http://www.pnp-software.com/XSLTdoc"
7
	xmlns:txm="http://textometrie.org/1.0"
8
	exclude-result-prefixes="tei edate xd txm" version="2.0">
7 9

  
8
  <xsl:output method="xml" encoding="utf-8" omit-xml-declaration="no" indent="no"/>
9
  
10
  <xd:doc type="stylesheet">
11
    <xd:short>
12
      Cette feuille XSLT permet de pré-tokeniser par mot des fichiers au format
13
      XML-TEI Oriflamms brut
14
    </xd:short>
15
    <xd:detail>
16
      This stylesheet is free software; you can redistribute it and/or
17
      modify it under the terms of the GNU Lesser General Public
18
      License as published by the Free Software Foundation; either
19
      version 3 of the License, or (at your option) any later version.
20
      
21
      This stylesheet is distributed in the hope that it will be useful,
22
      but WITHOUT ANY WARRANTY; without even the implied warranty of
23
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
24
      Lesser General Public License for more details.
25
      
26
      You should have received a copy of GNU Lesser Public License with
27
      this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
28
    </xd:detail>
29
    <xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
30
    <xd:copyright>2014, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
31
  </xd:doc>
32
  
33
<!--  <xsl:template match="/">
34
    <xsl:apply-templates/>
35
  </xsl:template>
36
-->  
37
  
38
  <xsl:template match="*">
39
        <xsl:copy>
40
          <xsl:apply-templates select="*|@*|processing-instruction()|comment()|text()"/>
41
        </xsl:copy>
42
  </xsl:template>
10
	<xsl:output method="xml" encoding="utf-8"
11
		omit-xml-declaration="no" indent="no" />
43 12

  
44
  <xsl:template match="comment()|processing-instruction()|text()">
45
    <xsl:copy/>
46
  </xsl:template>
13
	<xd:doc type="stylesheet">
14
		<xd:short>
15
			Cette feuille XSLT permet de pré-tokeniser par mot des fichiers au format
16
			XML-TEI Oriflamms brut
17
		</xd:short>
18
		<xd:detail>
19
			This stylesheet is free software; you can redistribute it and/or
20
			modify it under the terms of the GNU Lesser General Public
21
			License as published by the Free Software Foundation; either
22
			version 3 of the License, or (at your option) any later version.
47 23

  
48
  <!-- On supprime les attributs par défaut de la DTD TEI -->
49
  
50
  <xsl:template match="@*">
51
    <xsl:choose>
52
      <xsl:when test="matches(name(.),'^(part|instant|anchored|full)$')"/>
53
      <xsl:otherwise><xsl:copy/></xsl:otherwise>
54
    </xsl:choose>
55
  </xsl:template>
24
			This stylesheet is distributed in the hope that it will be useful,
25
			but WITHOUT ANY WARRANTY; without even the implied warranty of
26
			MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
27
			Lesser General Public License for more details.
56 28

  
57
<!-- on on ajoute l'info sur la tokenisation par TXM dans le header -->
29
			You should have received a copy of GNU Lesser Public License with
30
			this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
31
		</xd:detail>
32
		<xd:author>Alexei Lavrentiev alexei.lavrentev@ens-lyon.fr</xd:author>
33
		<xd:copyright>2014, CNRS / ICAR (Équipe CACTUS)</xd:copyright>
34
	</xd:doc>
58 35

  
59
  <xsl:template match="/*/tei:teiHeader/tei:fileDesc/tei:titleStmt">
60
    <xsl:copy>
61
      <xsl:apply-templates select="@*|node()"/>
62
      <respStmt xmlns="http://www.tei-c.org/ns/1.0">
63
        <resp xmlns="http://www.tei-c.org/ns/1.0">Tokénisation des mots et/ou des caractères</resp>
64
        <name xmlns="http://www.tei-c.org/ns/1.0" xml:id="TXM">Logiciel TXM (http://textometrie.ens-lyon.fr)</name>
65
      </respStmt>
66
    </xsl:copy>
67
  </xsl:template>
36
	<!-- <xsl:template match="/"> <xsl:apply-templates/> </xsl:template> -->
68 37

  
38
	<xsl:template match="*">
39
		<xsl:copy>
40
			<xsl:apply-templates
41
				select="*|@*|processing-instruction()|comment()|text()" />
42
		</xsl:copy>
43
	</xsl:template>
69 44

  
70
  <xsl:template match="/*/tei:teiHeader">    
71
      <xsl:copy>
72
        <xsl:apply-templates select="@*|node()"/>
73
        <xsl:if test="not(tei:revisionDesc)">
74
          <revisionDesc xmlns="http://www.tei-c.org/ns/1.0">
75
            <xsl:call-template name="change-txm"></xsl:call-template>
76
          </revisionDesc>
77
        </xsl:if>
78
      </xsl:copy>    
79
  </xsl:template>
80
  
81
  <xsl:template match="/*/tei:teiHeader//tei:revisionDesc">
82
    <xsl:copy>
83
      <xsl:apply-templates select="@*|node()"/>
84
      <xsl:call-template name="change-txm"/>
85
    </xsl:copy>
86
  </xsl:template>
45
	<xsl:template
46
		match="comment()|processing-instruction()|text()">
47
		<xsl:copy />
48
	</xsl:template>
87 49

  
88
<xsl:template name="change-txm">
89
  <change when="{format-date(current-date(),'[Y]-[M01]-[D01]')}" who="#TXM" xmlns="http://www.tei-c.org/ns/1.0">Tokenisation des mots</change>
90
</xsl:template>
91
  
92
  <xsl:template match="tei:w|tei:pc">
93
    <xsl:copy-of select="."/>
94
  </xsl:template>
95
  
96
  <xsl:template match="tei:text//text()">
97
  <xsl:choose>
98
    <!--<xsl:when test="not(ancestor::tei:text/tei:body/tei:div1/tei:p)"><xsl:copy/></xsl:when>-->
99
    <xsl:when test="matches(.,'^\s*$')"><xsl:copy/></xsl:when>
100
    <xsl:when test="matches(local-name(parent::*),'^(abbr|expan|sic|corr)$')"><xsl:copy/></xsl:when>
101
    <xsl:when test="ancestor::*/@ana[contains(.,'ori:align-no')]"><xsl:copy/></xsl:when>
102
    <xsl:when test="ancestor::tei:note"><xsl:copy/></xsl:when>
103
    <xsl:when test="ancestor::tei:witDetail"><xsl:copy/></xsl:when>
104
    <xsl:when test="parent::tei:hi and matches(.,'\w+') and not(matches(.,'\s')) and not(preceding-sibling::* or following-sibling::*)"><xsl:copy/></xsl:when>
105
    <xsl:when test="parent::tei:am|parent::tei:ex"><xsl:copy/></xsl:when>
106
    <!--<xsl:when test="parent::tei:rdg[not(matches(@wit,'^#?A'))]"><xsl:copy/></xsl:when>-->
107
    <xsl:when test="ancestor::tei:pc|ancestor::tei:w"><xsl:copy/></xsl:when>
108
    <xsl:otherwise>
109
      <xsl:analyze-string select="." regex="\w+|\p{{P}}+|\s+">
110
        <xsl:matching-substring>
111
          <xsl:choose>
112
            <xsl:when test="matches(.,'^\w+$')"><w xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="."/></w></xsl:when>
113
<!--            <xsl:when test="matches(.,'^\p{P}+$')"><orig xmlns="http://www.tei-c.org/ns/1.0"><pc xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="."/></pc></orig></xsl:when>-->
114
            <xsl:when test="matches(.,'^\p{P}+$')"><pc xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="."/></pc></xsl:when>
115
            <xsl:otherwise><xsl:copy/></xsl:otherwise>
116
          </xsl:choose>
117
        </xsl:matching-substring>
118
        <xsl:non-matching-substring>
119
          <xsl:comment>Type de caractère non reconnu</xsl:comment><xsl:copy/>
120
        </xsl:non-matching-substring>
121
      </xsl:analyze-string>
122
    </xsl:otherwise>
123
  </xsl:choose>
124
</xsl:template>
50
	<!-- On supprime les attributs par défaut de la DTD TEI -->
125 51

  
126
<xsl:template match="tei:choice">
127
  <xsl:choose>
128
    <xsl:when test="descendant::tei:pc">
129
      <pc xmlns="http://www.tei-c.org/ns/1.0">
130
        <xsl:apply-templates select="descendant::tei:pc[1]/@*"/>
131
        <xsl:copy>
132
          <xsl:apply-templates/>
133
        </xsl:copy>
134
      </pc>
135
    </xsl:when>
136
    <xsl:when test="descendant::tei:w">
137
      <xsl:copy>
138
        <xsl:apply-templates select="@*"/>
139
        <xsl:apply-templates/>
140
      </xsl:copy>
141
    </xsl:when>
142
    <xsl:when test="ancestor::tei:pc|ancestor::tei:w">
143
      <xsl:copy-of select="."/>
144
    </xsl:when>
145
    <xsl:otherwise><w xmlns="http://www.tei-c.org/ns/1.0"><xsl:copy-of select="."/></w></xsl:otherwise>
146
  </xsl:choose>  
147
</xsl:template>
148
  
149
  
150
  
151
<!--  <xsl:template match="tei:pc[ancestor::tei:choice]">
152
    <xsl:apply-templates/>
153
  </xsl:template>
154
-->
155
  
156
  <xsl:template match="tei:choice/tei:orig[child::tei:pc]|tei:choice/tei:reg[child::tei:pc]">
157
    <xsl:copy>
158
      <xsl:apply-templates select="@*"/>
159
      <xsl:value-of select="normalize-space(.)"/>
160
    </xsl:copy>
161
  </xsl:template>
52
	<xsl:template match="@*">
53
		<xsl:choose>
54
			<xsl:when
55
				test="matches(name(.),'^(part|instant|anchored|full)$')" />
56
			<xsl:otherwise>
57
				<xsl:copy />
58
			</xsl:otherwise>
59
		</xsl:choose>
60
	</xsl:template>
162 61

  
62
	<!-- on on ajoute l'info sur la tokenisation par TXM dans le header -->
163 63

  
164
  <!-- <xsl:template match="tei:hi[matches(.,'\w+') and not(matches(.,'\s')) and not(descendant::tei:w) and not(ancestor::*/@ana[contains(.,'ori:align-no')])]|tei:am|tei:ex"> -->
165
  
166
  <!--<xsl:template match="*[ancestor::tei:text and descendant::text()[matches(.,'\w')] and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')])]">-->
167
  
64
	<xsl:template
65
		match="/*/tei:teiHeader/tei:fileDesc/tei:titleStmt">
66
		<xsl:copy>
67
			<xsl:apply-templates select="@*|node()" />
68
			<respStmt xmlns="http://www.tei-c.org/ns/1.0">
69
				<resp xmlns="http://www.tei-c.org/ns/1.0">Tokénisation des mots et/ou des caractères</resp>
70
				<name xmlns="http://www.tei-c.org/ns/1.0" xml:id="TXM">Logiciel TXM
71
					(http://textometrie.ens-lyon.fr)</name>
72
			</respStmt>
73
		</xsl:copy>
74
	</xsl:template>
168 75

  
169
  <xsl:template match="*[matches(.,'\w+') 
76

  
77
	<xsl:template match="/*/tei:teiHeader">
78
		<xsl:copy>
79
			<xsl:apply-templates select="@*|node()" />
80
			<xsl:if test="not(tei:revisionDesc)">
81
				<revisionDesc xmlns="http://www.tei-c.org/ns/1.0">
82
					<xsl:call-template name="change-txm"></xsl:call-template>
83
				</revisionDesc>
84
			</xsl:if>
85
		</xsl:copy>
86
	</xsl:template>
87

  
88
	<xsl:template match="/*/tei:teiHeader//tei:revisionDesc">
89
		<xsl:copy>
90
			<xsl:apply-templates select="@*|node()" />
91
			<xsl:call-template name="change-txm" />
92
		</xsl:copy>
93
	</xsl:template>
94

  
95
	<xsl:template name="change-txm">
96
		<change when="{format-date(current-date(),'[Y]-[M01]-[D01]')}"
97
			who="#TXM" xmlns="http://www.tei-c.org/ns/1.0">Tokenisation des mots</change>
98
	</xsl:template>
99

  
100
	<xsl:template match="tei:w|tei:pc">
101
		<xsl:copy-of select="." />
102
	</xsl:template>
103

  
104
	<xsl:template match="tei:text//text()">
105
		<xsl:choose>
106
			<!--<xsl:when test="not(ancestor::tei:text/tei:body/tei:div1/tei:p)"><xsl:copy/></xsl:when> -->
107
			<xsl:when test="matches(.,'^\s*$')">
108
				<xsl:copy />
109
			</xsl:when>
110
			<xsl:when
111
				test="matches(local-name(parent::*),'^(abbr|expan|sic|corr)$')">
112
				<xsl:copy />
113
			</xsl:when>
114
			<xsl:when
115
				test="ancestor::*/@ana[contains(.,'ori:align-no')]">
116
				<xsl:copy />
117
			</xsl:when>
118
			<xsl:when test="ancestor::tei:note">
119
				<xsl:copy />
120
			</xsl:when>
121
			<xsl:when test="ancestor::tei:witDetail">
122
				<xsl:copy />
123
			</xsl:when>
124
			<xsl:when
125
				test="parent::tei:hi and matches(.,'\w+') and not(matches(.,'\s')) and not(preceding-sibling::* or following-sibling::*)">
126
				<xsl:copy />
127
			</xsl:when>
128
			<xsl:when test="parent::tei:am|parent::tei:ex">
129
				<xsl:copy />
130
			</xsl:when>
131
			<!--<xsl:when test="parent::tei:rdg[not(matches(@wit,'^#?A'))]"><xsl:copy/></xsl:when> -->
132
			<xsl:when test="ancestor::tei:pc|ancestor::tei:w">
133
				<xsl:copy />
134
			</xsl:when>
135
			<xsl:otherwise>
136
				<xsl:analyze-string select="."
137
					regex="\w+|\p{{P}}+|\s+">
138
					<xsl:matching-substring>
139
						<xsl:choose>
140
							<xsl:when test="matches(.,'^\w+$')">
141
								<w xmlns="http://www.tei-c.org/ns/1.0">
142
									<xsl:value-of select="." />
143
								</w>
144
							</xsl:when>
145
							<!-- <xsl:when test="matches(.,'^\p{P}+$')"><orig xmlns="http://www.tei-c.org/ns/1.0"><pc 
146
								xmlns="http://www.tei-c.org/ns/1.0"><xsl:value-of select="."/></pc></orig></xsl:when> -->
147
							<xsl:when test="matches(.,'^\p{P}+$')">
148
								<pc xmlns="http://www.tei-c.org/ns/1.0">
149
									<xsl:value-of select="." />
150
								</pc>
151
							</xsl:when>
152
							<xsl:otherwise>
153
								<xsl:copy />
154
							</xsl:otherwise>
155
						</xsl:choose>
156
					</xsl:matching-substring>
157
					<xsl:non-matching-substring>
158
						<xsl:comment>
159
							Type de caractère non reconnu
160
						</xsl:comment>
161
						<xsl:copy />
162
					</xsl:non-matching-substring>
163
				</xsl:analyze-string>
164
			</xsl:otherwise>
165
		</xsl:choose>
166
	</xsl:template>
167

  
168
	<xsl:template match="tei:choice">
169
		<xsl:choose>
170
			<xsl:when test="descendant::tei:pc">
171
				<pc xmlns="http://www.tei-c.org/ns/1.0">
172
					<xsl:apply-templates
173
						select="descendant::tei:pc[1]/@*" />
174
					<xsl:copy>
175
						<xsl:apply-templates />
176
					</xsl:copy>
177
				</pc>
178
			</xsl:when>
179
			<xsl:when test="descendant::tei:w">
180
				<xsl:copy>
181
					<xsl:apply-templates select="@*" />
182
					<xsl:apply-templates />
183
				</xsl:copy>
184
			</xsl:when>
185
			<xsl:when test="ancestor::tei:pc|ancestor::tei:w">
186
				<xsl:copy-of select="." />
187
			</xsl:when>
188
			<xsl:otherwise>
189
				<w xmlns="http://www.tei-c.org/ns/1.0">
190
					<xsl:copy-of select="." />
191
				</w>
192
			</xsl:otherwise>
193
		</xsl:choose>
194
	</xsl:template>
195

  
196

  
197

  
198
	<!-- <xsl:template match="tei:pc[ancestor::tei:choice]"> <xsl:apply-templates/> 
199
		</xsl:template> -->
200

  
201
	<xsl:template
202
		match="tei:choice/tei:orig[child::tei:pc]|tei:choice/tei:reg[child::tei:pc]">
203
		<xsl:copy>
204
			<xsl:apply-templates select="@*" />
205
			<xsl:value-of select="normalize-space(.)" />
206
		</xsl:copy>
207
	</xsl:template>
208

  
209

  
210
	<!-- <xsl:template match="tei:hi[matches(.,'\w+') and not(matches(.,'\s')) 
211
		and not(descendant::tei:w) and not(ancestor::*/@ana[contains(.,'ori:align-no')])]|tei:am|tei:ex"> -->
212

  
213
	<!--<xsl:template match="*[ancestor::tei:text and descendant::text()[matches(.,'\w')] 
214
		and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')])]"> -->
215

  
216

  
217
	<xsl:template
218
		match="*[matches(.,'\w+') 
170 219
    and ancestor::tei:text 
171 220
    and not(matches(local-name(),'^(front|body|back|div.*|head|closer|p|ab|lg|l|.*[Nn]ame|num|cell|row|q|w|pc|title|term|emph|note|witDetail|foreign|ref|app|lem|rdg)$'))
172 221
    and not(matches(local-name(parent::*),'^(choice|subst|app)$'))
173 222
    and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')]) 
174 223
    and not(descendant::tei:w or descendant::tei:pc) 
175 224
    and not(ancestor::*/@ana[contains(.,'ori:align-no')])]|tei:am|tei:ex">
176
  <w xmlns="http://www.tei-c.org/ns/1.0"><xsl:copy-of select="."/></w>
177
</xsl:template>
178
 
179
  <!-- <xsl:template match="*[matches(local-name(),'[Nn]ame$') and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')])]"> -->
180
 
181
  
182
  <xsl:template match="*[matches(local-name(),'^.*[Nn]ame$') 
225
		<w xmlns="http://www.tei-c.org/ns/1.0">
226
			<xsl:copy-of select="." />
227
		</w>
228
	</xsl:template>
229

  
230
	<!-- <xsl:template match="*[matches(local-name(),'[Nn]ame$') and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')])]"> -->
231

  
232

  
233
	<xsl:template
234
		match="*[matches(local-name(),'^.*[Nn]ame$') 
183 235
    and ancestor::tei:text 
184 236
    and not(descendant::*[matches(local-name(),'^(.*[Nn]ame|w|pc|num|term|ref)$')]) 
185 237
    and not(descendant::text()[matches(.,'\S\s|\s\S|\p{P}')])]">
186
    <xsl:copy>
187
      <xsl:apply-templates select="@*"/>
188
<!--      <xsl:for-each select="child::text()">
189
        <xsl:value-of select="concat('[',.,']')"/>
190
      </xsl:for-each>-->
191
      <w xmlns="http://www.tei-c.org/ns/1.0">
192
        <xsl:for-each select="child::node()">
193
          <xsl:copy-of select="."/>
194
        </xsl:for-each>
195
      </w>
196
    </xsl:copy>
197
    
198
  </xsl:template>
199
  
238
		<xsl:copy>
239
			<xsl:apply-templates select="@*" />
240
			<!-- <xsl:for-each select="child::text()"> <xsl:value-of select="concat('[',.,']')"/> 
241
				</xsl:for-each> -->
242
			<w xmlns="http://www.tei-c.org/ns/1.0">
243
				<xsl:for-each select="child::node()">
244
					<xsl:copy-of select="." />
245
				</xsl:for-each>
246
			</w>
247
		</xsl:copy>
200 248

  
201
  <!--<xsl:template match="tei:sic[not(parent::tei:choice or descendant::tei:w or ancestor::*/@ana[contains(.,'ori:align-no')])]|tei:corr[not(parent::tei:choice or descendant::tei:w or ancestor::*/@ana[contains(.,'ori:align-no')])]">
202
  <w xmlns="http://www.tei-c.org/ns/1.0"><xsl:copy-of select="."/></w>
203
</xsl:template>-->
249
	</xsl:template>
204 250

  
251

  
252
	<!--<xsl:template match="tei:sic[not(parent::tei:choice or descendant::tei:w 
253
		or ancestor::*/@ana[contains(.,'ori:align-no')])]|tei:corr[not(parent::tei:choice 
254
		or descendant::tei:w or ancestor::*/@ana[contains(.,'ori:align-no')])]"> 
255
		<w xmlns="http://www.tei-c.org/ns/1.0"><xsl:copy-of select="."/></w> </xsl:template> -->
256

  
205 257
</xsl:stylesheet>

Also available in: Unified diff