我将为您提供一个查看我的示例:
这是我的xml:
<object>
<name>T3-A-blablabla</name>
</object>
<object>
<name>T3-A-blablabla</name>
</object>
<object>
<name>T3-B-blablabla</name>
</object>
<object>
<name>T2-A-blablabla</name>
</object>
<object>
<name>T2-A-blablabla</name>
</object>
这是我的for-each循环:
<xsl:for-each select="object[not(substring(name, '0', '6') = substring(preceding::object/name, '0', '6'))]">
<tr><td><xsl:value-of select="name"/></td></tr>
</xsl:for-each>
所以我只想查找具有不同“类型”(T3-A-,T3-B-,T2-A-等..)的对象。
我的实际循环给了我这个:
T3-A-blablabla
T3-B-blablabla
T2-A-blablabla
T2-A-blablabla
但是我想要这样:
T3-A-blablabla
T3-B-blablabla
T2-A-blablabla
但是我的循环只排除了第一个对象,就好像前面没有检查所有可能与子字符串函数冲突的先前对象一样。 希望您能帮助我,谢谢。
答案 0 :(得分:0)
对于此任务,您必须使用一种称为Muenchian Grouping
的技术。
应用于您的特定问题设置后,将使用复合键(在您的情况下为concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-'))
)生成以下样式表/模板。
此组合键将类似T3-A-blablabla
的字符串还原为T3-A
,然后在xsl:key
中将其用作<xsl:stylesheet version="1.0" ...
<xsl:key name="type" match="object" use="concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-'))"/>
...
<xsl:template match="/root">
<xsl:for-each select="object[generate-id() = generate-id(key('type',concat(substring-before(.,'-'),'-',substring-before(substring-after(.,'-'),'-')))[1])]">
<tr><td><xsl:value-of select="."/></td></tr>
</xsl:for-each>
</xsl:template>
...
</xsl:stylesheet>
的 key Muenchian 设置。
match="/root"
当然,您必须用object
节点的实际上下文替换<?xml version="1.0"?>
<tr>
<td>
T3-A-blablabla
</td>
</tr><tr>
<td>
T3-B-blablabla
</td>
</tr><tr>
<td>
T2-A-blablabla
</td>
</tr>
。
输出是
def corr_df(x, corr_val):
'''
Obj: Drops features that are strongly correlated to other features.
This lowers model complexity, and aids in generalizing the model.
Inputs:
df: features df (x)
corr_val: Columns are dropped relative to the corr_val input (e.g. 0.8)
Output: df that only includes uncorrelated features
'''
# Creates Correlation Matrix and Instantiates
corr_matrix = x.corr()
iters = range(len(corr_matrix.columns) - 1)
drop_cols = []
# Iterates through Correlation Matrix Table to find correlated columns
for i in iters:
for j in range(i):
item = corr_matrix.iloc[j:(j+1), (i+1):(i+2)]
col = item.columns
row = item.index
val = item.values
if abs(val) >= corr_val:
# Prints the correlated feature set and the corr val
print(col.values[0], "|", row.values[0], "|", round(val[0][0], 2))
drop_cols.append(i)
drops = sorted(set(drop_cols))[::-1]
# Drops the correlated columns
for i in drops:
col = x.iloc[:, (i+1):(i+2)].columns.values
x = x.drop(col, axis=1)
return x