如何将单词转换为链接?

时间:2012-01-09 19:46:59

标签: c# asp.net hyperlink words

我有一个带有两个属性的xml:word和link。 如何使用xml信息将文本上的单词替换为链接。 例: XML

<word>dog</word>
<link>http://www.dog.com</link>

文字:狗很好。

结果:dog很不错。

结果确定。

问题:

1-如果文字中包含这个单词,结果就会因为“s”而变得不合适。

2-我已经测试了在文本上按空格分割以修复它,但是如果这个单词组成了新年,则结果会再次出现。

有没有人有任何建议去解决这些问题(复数和复合词)?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

您可以使用Lucene.Net的贡献包Snowball来阻止(words - &gt; wordcame - &gt; come,{{1 }} - &gt; having等)。但你仍然会遇到复合词的麻烦

答案 1 :(得分:0)

如果您推出自己的解决方案,我在.NET复数功能方面取得了很大的成功:

http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice.aspx

基本上,你可以用复数形式传递一个单词并接收单数形式,反之亦然。

这可能是相当密集的,取决于内容的变化频率,即这不是一个实时搜索数千个单词的好选择。

假设您可以预处理/缓存结果或源文件很小,您可以:

运行一次

  • 识别源文件中的所有候选词。

  • 解析/拆分短语并将它们传递给复数库以确定它们的复数对应物。

  • 生成(并预编译)简单的正则表达式,以找到执行要匹配的单词。例如,如果你想匹配“狗”但不匹配“狗”,你可以创建一个像dog[^s]这样的正则表达式,然后可以对文本执行。

每当需要搜索/替换时运行

  • 针对相关文字运行源表达式列表。我建议将表达式从最短到最长排序(否则短表达​​式可能会替换刚用较长表达式解析的单词)。

同样,这将是处理器密集型以实时运行(大多数解决方案将是)。与往常一样,如果要解析HTML,则应使用HTML解析器,而不是正则表达式。在这种情况下,您可以使用适当的解析器来定位所有文本节点,然后对它们执行搜索/替换。

另一种解决方案是将文本和关键字列表放入数据库并使用SQL Server全文索引,这对于这些事情往往非常聪明,并支持智能匹配谓词。你甚至可以将它与CLR存储过程结合起来来处理.NET擅长的东西(比如字符串解析)。

无论采用何种方法,这都不是一门精确的科学。

答案 2 :(得分:-1)

你可能需要一本字典。创建一个文本文件/ XML文件,其中包含所需单词和复数形式的单词。在运行时,将它们加载到Dictionary<String, String>。然后在字典中查找<word/>的值并提取其奇异值。