我正在 Excel 中编写一个简单的 OCR 检查器,它将 OCR 输出文本文件解析为单词,并使用Wiktionary检查所选的单词以查看它们是否是有效的单词。
我知道有复杂的字典查找系统可以用 Python 运行,但我试图在不接触 Python 的情况下完成这项工作。因此,我使用 Excel 和Wiktionary作为一种简单的方法。
我有一个名为的 VBA 函数vHttpRequest()
,它访问 URL 并可以返回执行此操作后返回的状态。例如,如果单词是“apple”,则我运行:
vHttpRequest("https://en.wiktionary.org/wiki/apple", , "status")
这给了我状态 200,表明“apple”是一个有效的词。
如果 OCR 省略了“three apples”中的空格,那么我运行:
vHttpRequest("https://en.wiktionary.org/wiki/threeapples", , "status")
返回 404,表明“threeapples”不是一个有效的单词。
效果很好。它正确地识别了大多数 OCR 错误。过程中有两个细节:Wiktionary的搜索区分大小写,并且不包含所有格,因此如果我得到 404,那么我会再次尝试转换为小写,并删除最后两个字母(如果它们是“'s”或“s'”)。
问题是当我得到一个在其他语言中有效的单词时。Wiktionary将其页面拆分为包含该单词的每种语言的锚点。因此,例如,如果单词是“ther”,则该单词在其他三种语言中有效,但在现代英语中无效。所以我想运行如下命令:
vHttpRequest("https://en.wiktionary.org/wiki/ther#English", , "status")
测试Wiktionary的“ther”页面是否有英语部分。问题是上面的调用返回 200,因为“ther”的页面存在。状态检查忽略了 URL 中的锚点“#English”。
有没有办法测试该锚点是否存在于该页面上?也欢迎提出更好的解决方案。
您尝试过使用他们的 API 吗?他们最近添加了一个 REST API,您可以使用它来查询单词 (链接),然后使用它来获取格式化的 JSON,然后您可以轻松地对其进行解析。
查找单词“Arbiter”(在多种语言中都有)的示例如下
结果将有多个条目,但正如您所看到的,您只需查看“en”块是否存在即可知道它是否是一个英文单词。
我接受了@Silbee 的回答,因为它提供了一个很好的解决方案——比我要求的锚点检测更好——解决了从维基词典以编程方式确定某个单词在英语中是否有效的问题。
然而,我还找到了一个更好的解决方案,可以解决更普遍的问题,即通过编程确定一个单词在英语中是否有效。
我向 ChatGPT 提交了与此处相同的问题。它没有告诉我有关Wiktionary可用的 API ,但确实提出了一些替代解决方案。其中大多数需要使用 python,但有一个不需要。那就是使用
CheckSpelling
MS Word 的方法。(“方法”是在对象上运行的函数。)它可以在 Word VBA 中直接在 MS Word 文档上运行,但也可以通过从 Excel VBA 中的子程序调用它在 Excel 中的一系列单元格上运行。巧妙的技巧。这样做而不是 Wiktionary查找的优势在于它在我的计算机上本地运行,因此我不需要为每个单词执行 http 请求。当查找多个单词时,这可能会产生很大的不同。(我正在运行 Office 2021 的本地安装,而不是在线版本。)如果您要尝试此操作,请注意一件事:
CheckSpelling
MS Word 和 Excel 中至少有五种方法,Word 中有三种,Excel 中有两种。在这五种方法中,其中三种是范围或文档的方法,它们都会打开校对对话框,因此不适合以编程方式使用。适合编程的两种方法是我上面链接到的 Word 应用程序的方法和Excel 应用程序的方法。乍一看,在 Excel 中工作时,使用 Excel 方法似乎更好,但 ChatGPT 告诉我它的功能不如 Word 版本。ChatGPT 详细说明了这两种方法之间的差异。我问它是如何知道的,因为 MS 文档中没有提到差异。它说:“详细差异……通常不会记录在一个特定的来源中。相反,它们是从各种来源、文档和实践经验中推断出来的。您可以采取以下步骤来查找有关此主题的更多信息:”然后它给了我五种来源的列表,包括官方文档、支持论坛、书籍、博客和文章。我想我可以把这个答案解释为“祝你好运,你这个虚弱的人,试着消化我以前告诉你的关于这些差异的大量信息。”