【问题标题】:machine learning algorithm for spelling check用于拼写检查的机器学习算法
【发布时间】:2013-08-22 07:59:53
【问题描述】:

我有一个药物名称列表(regular_list)和一个新名称列表(new_list)。我想检查 new_list 中的名称是否已经存在于 regular_list 中。问题是名称 new_list 可以有一些拼写错误,我希望这些名称被视为与常规列表匹配。我知道使用 stringdist 可以解决问题,但我需要机器学习算法

【问题讨论】:

标签: text machine-learning stringdist


【解决方案1】:

正如这里machine learning to overcome typo errors 已经提到的那样,机器学习工具对于此类任务来说太多了,但最简单的可能性是合并这些方法。

一方面,您可以计算给定单词x 和每个字典单词d_i 之间的edit distance。另外,您可以训练每个单词的分类器

c(d_i, distance(x,d_i)) 

返回True(类1)如果一个给定的编辑距离已经被认为足以将x视为d_i的拼写错误版本。这可以为您提供比不使用机器学习更通用的模型,因为您可以为每个字典单词设置不同的阈值(有些单词比其他单词更容易拼错),但显然,您必须准备一个 (misspelled_word, correct_one) 形式的训练集(并添加(correct_one, correct_one)。

您可以为此类任务使用任何类型的二进制分类器,它可以处理“真实”输入数据。

【讨论】:

  • 继续上面的问题。我的数据库常规列表大约有 150,000 个单词,而新列表大约有 350,000 个单词。计算两个项目之间的距离需要(150,000 * 350,000 次搜索)。它的工作真的非常非常慢。请我找到更好的方法
  • 有很多方法可以加快速度。您可以构建各种类型的索引,它切断了距离太大而无法考虑的数据库部分(这可以通过例如散列 3 个字母前缀和 3 个字母后缀并仅查找那些前缀或后缀完全匹配)。对于大型搜索,您应该考虑使用现有的搜索引擎,例如。 lucene lucene.apache.org/core
  • 任何数据库都可以用来解决这个问题。假设我把这两个表作为regular_list 和new _list。然后通过查询我可以比较上面提到的距离并让数据库相应地返回解决方案????
猜你喜欢
  • 2012-09-04
  • 2012-06-20
  • 1970-01-01
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 2023-04-08
  • 2012-03-04
相关资源
最近更新 更多