如何将单词转换为链接
本文关键字:链接 转换 单词 | 更新日期: 2023-09-27 18:19:47
我有一个xml,它有两个属性:word和link。如何使用xml信息将文本上的单词替换为链接。示例:XML
<word>dog</word>
<link>http://www.dog.com</link>
文字:这只狗很好。
结果:这只狗很好。
结果正常。
问题:
1-如果文本中有单词dogs,则由于"s",结果不正确。
2-我已经测试过在文本上按空格拆分来修复它,但如果单词的组成类似于新年,则结果再次错误。
有人有什么建议来解决这些问题(复数和复合词)吗?
谢谢你的帮助。
您可以使用Lucene.Net的contrib包Snowball进行词尾处理(words
->word
、came
->come
、having
->have
等)。但是您仍然会遇到复合词的问题
如果您推出自己的解决方案,我在.NET的多元化功能方面取得了很好的成功:
http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice.aspx
从本质上讲,你可以传递一个复数形式的单词,并接收一个单数形式,反之亦然。
这可能相当密集,这取决于内容更改的频率,即实时搜索数千个单词不是一个好选择。
假设你可以预处理/缓存结果,或者源文件很小,你可以:
运行一次
-
识别源文件中的所有候选单词。
-
解析/拆分短语,并通过复数化库来确定其复数对应词。
-
生成(并预编译)简单的正则表达式,以定位要匹配的单词。例如,如果你想匹配"dog"而不是"dogs",你可以创建一个类似
dog[^s]
的正则表达式,然后对文本执行。
需要搜索/替换时运行
- 根据有问题的文本运行源表达式列表。我建议将表达式从最短到最长排序(否则,一个短表达式可能会用一个长表达式替换刚刚解析的单词)
同样,这将是处理器密集型的实时运行(大多数解决方案都是这样)。和往常一样,如果您正在解析HTML,您应该使用HTML解析器,而不是正则表达式。在这种情况下,您可以使用适当的解析器来定位所有文本节点,然后对它们执行搜索/替换。
另一种解决方案是将文本和关键字列表放入数据库中,并使用SQL Server全文索引,它在这些方面往往非常智能,并支持智能匹配谓词。您甚至可以将其与CLR存储过程相结合,以处理.NET擅长的事情(如字符串解析)。
无论采用何种方法,这都不是一门精确的科学。
您可能需要一本字典。创建一个包含所需单词的单数和复数形式的文本文件/XML文件。在运行时,将它们加载到Dictionary<String, String>
中。然后在字典中查找<word/>
的值并提取其奇异值。