2013-05-25 61 views
2

我正在创建一个读取扫描的手写文档并将其转换为文本的程序。被识别的单词必须来自我创建的约300字的字典。例如,如果手写文字被识别为“heilo”,但我的字典只包含“hello”和“world”,它应该将其转换为“hello”。但是,如果它认为它是“星球”,它就不应该与任何东西相匹配。我认为一种可能的方法是创建一个关于识别单词与字典中每个单词的匹配程度的得分。如果它没有得到最低分数,则找不到匹配。在词典中查找最匹配的单词

我正在用C#编写应用程序。是否有任何图书馆/例子可以做这样的事情,还是我必须从头开始编写所有的代码?

感谢

回答

5

标准库中没有任何内容可以计算单词之间的距离,但在Internet上可以找到大量示例:查找"edit distance""Levenshtein distance"。这个想法是根据第一个字符串的变化数量来衡量相似性,以使其成为第二个字符串。 “heil”和“hello”之间的距离为2,因为您需要用“l”(第一个编辑)替换“i”,然后附加“o”(第二个编辑)。

在寻找实现或实现自己的实现时,避免使用二维数组实现简单的实现,因为它不符合内存效率。使用修改O(min(m,n))内存要求而不是“天真”O(m*n)

1

我手头没有lib添加到你所需要的,但在网上搜索知道你要计算的Levenshtein Distance可以帮助你在你的搜索。

+1

-1:完全基于参考的答案不被认为是一个好的答案。即使链接中断,您的答案仍然有效。 –

+0

即使链接被破坏,我认为答案仍然有效。也许我应该对它做出评论......但并不是简单地告诉OP搜索有关Levenshtein距离的信息,而是将相关维基百科文章的引用作为附加价值,而不是作为答案的主要内容。 –

1

也许你应该从拼写检查开始 - 有一个number of libraries available这样做。

+0

-1:完全基于参考的答案不被视为一个好答案。即使链接中断,您的答案仍然有效。 –

+1

这个也不是你贴上这个评论的其他答案,完全是基于参考。他们给出了一个可尝试的名称,并带有一个示例链接。两个答案保持有效,没有链接 – Richard