1

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

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

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

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

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

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

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

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

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

编辑为了澄清,我不是在寻找搜索或推荐引擎需要的实际语义相关性。我需要赶上错别字。所以,我正在寻找一个度量标准,它mouserodent相似度为零,但mouse相似度house很高。而且我担心像 Lucene 这样的工具使用的度量标准会使这两个示例出错(出于我的目的)。

4

1 回答 1

1

基本上,您希望根据语义相关性对术语进行聚类。

一种(硬)方法是遵循Markovitch 和 Gabrilovitch的方法。


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

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

如果您只对“视觉”相似性感兴趣(单词彼此相似),那么您可以满足 levenshtein distance,但它无法为您提供术语的语义相关性。例如,您不会能够在“秋天”和“秋天”之间建立联系。

于 2013-11-07T10:56:33.013 回答