如何纠正错误或缩短的文字

时间:2018-10-29 07:45:59

标签: algorithm spell-checking

我必须解决与大量用户产生的技能有关的问题。
用户可以在个人资料上放置任何技能,我想合并相同的技能:
我有这对(还有其他):
React,React Js,React.js,reactjs
MS Office,Microsoft Office MS Word,Microsoft Word

我尝试了Levenshtein算法和其他拼写检查器,但在这种情况下它们不起作用。

有人知道解决此类问题的方法吗?

1 个答案:

答案 0 :(得分:0)

我看这个问题的方式,有两种解决方案:

  • 列出您认为相等的所有可能技能的详尽列表
  • 在两个给定技能之间定义合适的“距离”,并定义一个阈值,您认为该阈值会产生(足够)好的结果

假设您使用第一个选项,那么伪代码非常简单:

  1. 对于用户输入的任何技能列表,遍历每个技能S
  2. 如果S在“公认”技能组中,则保留S
  3. 如果S不属于“已接受”技能的集合,请检查已接受技能S2是否将S作为其变体之一。如果是这样,则返回S2

假设您要使用第二个选项:

  1. 对于用户输入的任何技能列表,遍历每个技能S
  2. 将S设置为大写
  3. 用不是[A-Z]的任何令牌分割S,将其命名为Sp
  4. 按字母顺序对Sp进行排序
  5. 按空格重新加入Sp中的标记,命名为Sc
  6. 使用Levenshtein距离将Sc与技能列表中的其他项目进行比较

例如

  

React,React Js,React.js,reactjs

反应->反应-> [反应]-> [反应]->反应
React Js-> REACT JS-> [REACT JS]-> [JS REACT]-> JS REACT //距离3
React.js-> REACT.JS-> [REACT JS]-> [JS REACT]-> JS REACT //距离为0