XSLT 1.0 allows only immutable variables. You can use recursion on a variable that contains the data of your "value" attribute.
<xsl:template match="/*">
<root>
<xsl:variable name="data" select="td/input/@value"/>
<xsl:call-template name="find">
<xsl:with-param name="count" select="1"/>
<xsl:with-param name="data" select="substring-after($data,';')"/>
<xsl:with-param name="prevData" select="substring-before($data,';')"/>
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="find">
<xsl:param name="count"/>
<xsl:param name="data"/>
<xsl:param name="prevData"/>
<xsl:if test="$count=3">
<data>
<xsl:value-of select="$prevData"/>
</data>
</xsl:if>
<xsl:if test="$count < 3">
<xsl:call-template name="find">
<xsl:with-param name="count" select="$count+1"/>
<xsl:with-param name="data" select="substring-after($data,';')"/>
<xsl:with-param name="prevData" select="substring-before($data,';')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Hope this helps
If third is word isn't what you require everytime then you need the data that tells which word you need and accordingly change the number in find template to suit your need