如何快速识别 .net 中可能存在的拼写错误



我必须手动浏览用户多年来输入的一长串术语(~3500)。除此之外,我想通过查找同义词、错别字和替代拼写来减少列表。

如果我可以在开始之前将列表分组到可能的拼写错误集群中,我的工作会容易得多。我想象使用一些指标来计算与术语的相似性,例如以百分比为单位,然后将相似性高于某个阈值的所有内容聚类。无论如何,我都是手动完成的,我不介意高故障率,如果它可以保持整个事情的简单性。

理想情况下,有一些容易获得的库可以为我做到这一点,由知道自己在做什么的人实现。如果没有这样的,那么至少一个计算一对字符串的相似性指标会很棒,我可以自己管理聚类。

如果这也不可用,您知道一个易于实现的好算法吗?我最初认为汉明距离除以单词长度将是一个很好的指标,但注意到虽然它会捕获交换的字母,但它不会很好地处理删除和插入(ptgs-1会被捕获为与ptgs/1非常相似,但hematopoiesis不会被捕获为与haematopoiesis非常相似)。

至于对库/算法的要求:它必须完全依赖于拼写。我知道通常的 NLP 库不能以这种方式工作,但是

  • 没有全文可供它考虑上下文。
  • 它不能使用词典语料库,因为这些术语远远超出了任何日常语言,通常是高度专业化术语的缩写。

最后,我最熟悉C#作为一种编程语言,我已经有一个C#伪脚本可以进行一些初步清理。如果没有一步解决方案(源列表输入,分组列表输出),我将更喜欢可以从 .NET 程序中调用的库。

对于一个在信息检索方面几乎没有知识的人来说,整个事情应该相对快速地学习。这将为我节省 5-6 个小时的手动工作,而且我不想在设置自动化解决方案上花费更多的时间。好吧,如果我有机会学到一些很棒的东西,可能会延长 50% :)

问题:我应该使用什么,库还是算法?我应该考虑哪些?如果我需要一个库,我如何识别一个能够仅根据拼写提供结果的库,而不是依赖于上下文或字典的使用?

编辑 澄清一下,我并不是在寻找搜索或推荐引擎需要的实际语义相关性。我需要抓住错别字。因此,我正在寻找一个指标,通过该指标,mouserodent的相似性为零,但mousehouse具有非常高的相似性。而且我担心像Lucene这样的工具使用了一个指标,会弄错这两个例子(为了我的目的)。

基本上,

您正在寻找根据语义相关性对术语进行聚类。

一种(困难的)方法是遵循马尔科维奇和加布里洛维奇的方法。


更快的方法将包括以下步骤:

  1. 下载维基百科转储和开源信息检索库,如Lucene(或 Lucene.NET)。
  2. 为文件编制索引。
  3. 搜索索引中的每个术语 - 并获取一个向量 - 表示术语(查询)与每个文档的相关性。请注意,这将是一个大小为 |D| 的向量,其中|D|是集合中文档的总数。
  4. 在任何聚类算法中对向量进行聚类。每个向量代表初始列表中的一个项。

如果你只对"视觉"相似性感兴趣(单词彼此写得相似),那么你可以满足于levenshtein距离,但它将无法给你术语的语义相关性。例如,您将无法在"秋天"和"秋天"之间建立联系。

最新更新