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