在字典中找到最匹配的单词
本文关键字:单词 字典 | 更新日期: 2023-09-27 18:15:33
我正在创建一个程序,读取扫描的手写文档并将其转换为文本。可识别的单词必须来自我创建的大约300个单词的字典。例如,如果手写的单词被识别为"heilo",但我的字典只包含"hello"answers"world",它应该将其转换为"hello"。然而,如果它把它识别为"行星",它就不应该把它与任何东西相匹配。我认为一种可能的方法是创建一个分数来衡量被识别的单词与字典中每个单词的匹配程度。如果没有得到最小分数,则没有找到匹配项。
我正在用c#编写应用程序。是否有任何可用的库/示例,他做这样的事情,或者我必须从头开始编写一切?
谢谢
在标准库中没有计算单词之间的距离,但是你可以在互联网上找到很多例子:查找"编辑距离"或"Levenshtein距离"。其思想是根据对第一个字符串的更改次数来衡量相似性,以便使其成为第二个字符串。"heil"answers"hello"之间的距离是2,因为您需要将"i"替换为"l"(第一次编辑),然后添加一个"o"(第二次编辑)。
在寻找实现或实现您自己的实现时,避免使用2D数组的琐碎实现,因为它不节省内存。使用修改后的O(min(m,n))
内存需求,而不是"幼稚的"O(m*n)
。
我手头没有lib来做你需要的,但搜索网络知道你想计算Levenshtein距离可能会帮助你在你的搜索。
也许您应该从拼写检查器开始-有许多可用的库可以做到这一点。
网上有一些c#代码片段可以帮助你:
Levenshtein :http://www.dotnetperls.com/levenshtein
Boyer-Moore :http://www-igm.univ-mlv.fr/lecroq/字符串/node15.html # SECTION00150
基于这些,您可以轻松实现自己的Word Matcher模块。