1

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

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

文字:这只狗很好。

结果:很好。

结果OK。

问题:

1-如果文本有这个词,结果是不正确的,因为“s”。

2-我已经测试过在文本上用空格分割来修复它,但如果这个词是像新年一样组成的,结果又是不正确的。

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

谢谢您的帮助。

4

3 回答 3

3

您可以使用 Lucene.Net 的 contrib 包 Snowball进行词干提取(words-> wordcame-> comehaving->have等)。但是你仍然会遇到复合词的麻烦

于 2012-01-09T21:24:08.570 回答
0

如果您推出自己的解决方案,我在 .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 擅长的事情(如字符串解析)。

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

于 2012-01-09T22:06:40.623 回答
-1

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

于 2012-01-09T19:51:10.367 回答