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