【问题标题】:Approximate String Matching - Machine Learning [closed]近似字符串匹配 - 机器学习 [关闭]
【发布时间】:2023-03-20 15:46:01
【问题描述】:

我有一个要求,我的源数据在 HDFS 中,并且有一个字段包含用户的技能。现在源文件具有归因于用户的各种技能,例如 - MANAGEMENT、JAVA、HADOOP、PIG、SQL、PERFORMANCE TUNING、C、业务咨询、销售等......

现在我的问题是我需要构建一个机器学习算法来检测所谓的技能中是否存在一些拼写错误。例如,如果列有销售而不是销售,或者像 hadoop 一样被拼写为 hadup。所以我想标准化这些东西。

我该怎么做呢?我不知道机器学习,但我愿意学习和编码。我在 Python 中工作很舒服。

任何建议我该怎么做?如果你们能提出想法,那就太好了!

【问题讨论】:

  • 这是一个简单的编辑距离的工作,而不是机器学习。
  • 我同意!右侧相关问题列表中的first item 甚至指出了我建议您研究的内容
  • @lejlot:编辑距离是一种可以使用的工具,但这不是全部答案。一些拼写错误不会很好地响应编辑距离。例如,考虑“礼节”的拼写“edicit”。此外,像“MGMT”而不是“MANAGEMENT”这样的常见缩写也适合编辑距离算法。
  • @Jim OP 询问“拼写错误”。缩写是不是拼写错误。我的回答只是为了简化说明,在这种基本情况下,这不是解决问题的好方法。

标签: string algorithm machine-learning string-matching


【解决方案1】:

此类问题通常有两个部分:找出哪些项目可能出错,然后修复这些问题。

如果您假设大多数项目拼写正确,那么查找可能的错误非常容易。自动修复错误要困难得多,而且在任何合理的时间内不可能 100% 正确地做到这一点。但是您可能会发现,如果您发现错误做得很好,手动修复它们没什么大不了的。

要找出错误,我建议您列出每个技能,并计算每个技能在整个数据集中被引用的次数。完成后,您将获得如下列表:

MANAGEMENT, 22
JAVA, 298
HADOOP, 12
HADUP, 1
SALES, 200
SALS, 1

等等。列出了每项技能以及拥有该技能的用户数量。

现在,按频率对它们进行排序并选择一个阈值。假设您选择更仔细地检查频率为 3 或更低的任何事物。这个想法是,相对于其他项目使用次数非常少的项目可能是拼写错误。

确定要更仔细检查的术语后,您可以确定是要自动更改还是手动更改。当我不得不这样做时,我得到了可能拼写错误的列表并手动创建了一个包含拼写错误和更正的文件。例如:

SALS,SALES
HADUP,HADOOP
PREFORMANCE,PERFORMANCE

有几百个,但手动创建文件比编写程序找出正确的拼写要快得多。

然后我加载了该文件并查看了我的用户记录,根据需要进行替换。

最大的节省时间是找到可能的替代人选。在那之后,修复它们几乎是事后的想法。

也就是说,除非您真的想在研究项目上花费数月时间。然后你就可以玩弄编辑距离算法、语音算法和其他可能认为“edicit”和“etiquette”应该是同一个词的东西。

【讨论】:

    【解决方案2】:

    在机器学习范式中对此非常有效的是String Matching kernels。由于这些是实际的核函数,如果您想将学习表述为 SVM,它们非常方便。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2015-04-14
      • 2012-08-12
      • 2010-09-08
      • 2016-03-28
      相关资源
      最近更新 更多