1

我正在创建一个程序来过滤并检查字典中是否存在该单词。问题是如何知道单词是否有重复字符。

例如:

string string1 = "sorrrrrrry";

该字符串在字典中不存在,但如果您删除重复的 r 它将是“对不起”。

我正在使用 hunspell 检查字典中是否存在该单词。请问有什么解决办法吗?提前致谢

4

3 回答 3

2

对于您的情况,您可以做的是:

  • 替换重复的字符,但 2 => “抱歉
  • 查看字典中是否存在该单词
  • 如果没有,将 2 个重复的字符替换为 1 个字符 =>“ sory ”(如果您有例如“ caat ”)
  • 查看字典中是否存在该单词

使用正则表达式(\w)\1+(匹配重复字符)并将第一次替换为$1$1(2 个重复匹配字符)和 by$1

string input = "sorrrrrrry";
Regex regex = new Regex(@"(\w)\1+");

string replacement = "$1$1";
string res = regex.Replace(input, replacement);
Console.WriteLine(res);
//will output => sorry

replacement = "$1";
res = regex.Replace(input, replacement);
Console.WriteLine(res);
//will output => sory

警告 这可能会产生一些结果,它有一些限制并且可能会产生意想不到的结果:

  • 如果重复两个以上的字符,您需要处理所有组合:如果您有“ soooorrrry ”,它将给您 1.“ soorry ”,然后是 2.“ sory ”,因此算法将不起作用
  • “good”的情况如何处理,是“good”还是“god”?
于 2013-06-06T14:42:36.907 回答
0

您只能尝试通过几种模糊逻辑方法来猜测哪个单词是一个,它可以匹配字典中的 SOME,如果找到多个,则显示一个列表。

也许您知道,智能手机键盘如何帮助您。

这种方式或多或少是正确的方式(在打字期间)而不是之后。

但之后也是可以的,只是需要更多的努力。

于 2013-06-06T14:13:31.090 回答
0

您可能希望考虑将字典存储在 Lucene.Net 中并使用其松散匹配功能来匹配单词。

于 2013-06-06T14:48:51.633 回答