2

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

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

谢谢

4

4 回答 4

5

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

在寻找实现或实现您自己的实现时,请避免使用 2D 数组进行琐碎的实现,因为它的内存效率不高。使用具有O(min(m,n))内存要求的修改而不是“天真” O(m*n)

于 2013-05-25T12:01:27.773 回答
1

我手头没有库来做你需要的事情,但是在网上搜索知道你想计算Levenshtein 距离可能会帮助你进行搜索。

于 2013-05-25T12:01:09.143 回答
1

也许您应该从拼写检查器开始 - 有许多可用的库可以做到这一点。

于 2013-05-25T12:01:22.943 回答
0

网上有一些 c# 代码片段可以让你大开眼界:

Levenshtein: http: //www.dotnetperls.com/levenshtein

博耶-摩尔http ://www-igm.univ-mlv.fr/~lecroq/string/node15.html#SECTION00150

基于这些,您可以轻松实现自己的 Word Matcher 模块。

于 2013-05-25T12:30:28.143 回答