如何将单词转换为链接?

问题描述:

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

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

文本:狗是很好的。

结果:dog很不错。

结果OK。

的问题:

1-如果文本有言结果是因为“S” incorret。

2-我测试过在文本上用空格分隔来修复它,但是如果这个词的构成像新年那么结果会再次发生。

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

感谢您的帮助。

+2

你想匹配狗,还是不?如果是的话,你就会陷入很大的麻烦,因为你很快就会发现单数和复数形式只是开始......然而,你能解释一下你当前的实现吗?你尝试使用正则表达式匹配吗? – Eilistraee 2012-01-09 19:54:02

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

您可以使用Lucene.Net的了contrib包Snowball的词干(words - >wordcame - >comehaving - >have等)。但是,你仍然有复合词

如果推出自己的解决方案的烦恼,我曾与.NET多元化功能良好的成功:

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

本质上讲,你可以通过文字的复数形式并接收单数版本,反之亦然。

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

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

运行一次

  • 从源文件确定所有候选词。

  • 解析/分割短语并将它们传递给多元化库以确定它们的复数对应词。

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

运行每当一个查找/替换为所需

  • 运行你对讨论的文字表述源的列表。我建议将表达式从最短到最长(否则短的表达式可能会替换刚刚被较长表达式解析的单词)。

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

另一种解决办法是把文字和关键字清单到数据库,并使用SQL Server全文索引这往往是非常聪明的这些事情,支持智能匹配谓词。你甚至可以将它与CLR存储过程结合起来,以处理.NET擅长的事情(如字符串解析)。

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

+0

除了如何提高搜索速度外,你不会说任何关于词干的东西。 gone->去,基准 - >标准,did->做等 – 2012-01-09 22:28:31

+0

@ L.B - 你是正确的,OP问多元化与复合词...什么更重要的是,需要一个相当复杂的解决方案。我简单地看了一下你连接的产品,并提出了你的答案。 – 2012-01-09 22:33:20