【问题标题】:Text mining on large database (data mining)大型数据库上的文本挖掘(数据挖掘)
【发布时间】:2011-02-07 16:22:38
【问题描述】:

我有一个大型的简历 (CV) 数据库,以及一个将所有用户技能分组的特定表 skills

在该表中,有一个字段 skill_text 以全文形式描述技能。

我正在寻找一种算法/软件/方法来从该表中提取重要的术语/短语,以便构建具有标准化技能的新表..

以下是从数据库中提取的一些示例技能:

  • 行业和竞争分析
  • 业务发展(包括在国际环境中)
  • 具体结构及道路设计软件-Microstation、澳门、AutoCAD(基础知识)
  • 创意作品(Photoshop、In-Design、Illustrator)
  • 检查并报告活动进度
  • 组织和参加活动和展览
  • 开发:Aptana Studio、PHP、HTML、CSS、JavaScript、SQL、AJAX
  • 学科:一对一营销、电子营销(SEO 和 SEA、展示、电子邮件、联属网络营销)混合营销、病毒式营销、社交网络营销。

输出应该是这样的:

  • 行业和竞争分析
  • 业务发展
  • 具体结构和道路设计软件-
  • 澳门
  • AutoCAD
  • Photoshop
  • 设计中
  • 插画家
  • 组织活动
  • 发展
  • Aptana 工作室
  • PHP
  • HTML
  • CSS
  • JavaScript
  • SQL
  • AJAX
  • 混合营销
  • 病毒式营销
  • 社交网络营销
  • 电子邮件
  • 搜索引擎优化
  • 一对一营销

如您所见,只有技能没有其他表示文本。

我知道使用文本挖掘技术可以做到这一点,但该怎么做呢? 数据库真的很大.. 这是一件好事,因为我们可以计算文本频率并确定它是真正的技能还是只是无意义的文本...... 最大的问题是..如何确定“blablabla”是一种技能?

编辑: 请不要告诉我使用文本工具或正则表达式之类的标准东西..因为用户以非常随意的方式输入技能!

谢谢

【问题讨论】:

  • "请不要告诉我使用标准的东西,比如文本 tokinzer 或正则表达式 .. 因为用户以非常随意的方式输入技能" 所以,换句话说,你正在寻找的东西,但是你不知道它是什么,但你知道有可能找到它。祝你好运。如果你需要有这种技能的人,我是无色绿色想法的专家,他们会疯狂地睡觉。
  • 你尝试过频繁项集挖掘吗?

标签: database data-mining text-mining


【解决方案1】:

如果我以编程方式执行此操作,我会:

将所有标点分隔的数据(或者可能只是括号和逗号)提取到一个新表中(没有主键,只有技能),所以Creative work (Photoshop, In-Design, Illustrator) 变为

 Skill            
 -------------
 Creative work    
 Photoshop        
 In-Design        
 Illustrator      

然后,在你完成所有简历后,查询最常用的技能(这是 MySQL)

SELECT skill, COUNT(1) cnt FROM newTable GROUP BY skill ORDER BY cnt DESC;

这可能看起来像这个人为的例子

 Skill            Cnt
 ---------------------
 Photoshop        3293
 Illustrator      2134
 Creative work     932
 In-Design         123

然后你决定,你想要捕获的前 X 个技能,哪些必须映射到其他技能(例如,IndesignIn-design 应该映射到相同的技能)以及要丢弃哪些,然后编写脚本使用数据映射的过程。

使用数据图写一个新的词频表(这次是skill_id,skill,frequency),第二次解析数据的时候也写一个查找表(cv_id,skill_id)。然后,您的数据将处于这样一种状态:每个 CV 映射到多个技能,每个技能映射到多个 CV。您可以查询最热门的技能、符合特定条件的简历等。

【讨论】:

  • 是的,以编程方式这是最佳实践。但这里有一些数据使您无法使用您的算法:“对文化差异敏感并习惯于在国际环境中工作”“西班牙语:阅读和对话” “每个国家/地区的营销工具的协调和分配”“销售策略中销售人员的指导和产品销售论证的详细说明”这些都是从 DB 中提取的技能。
  • 将这些句子映射到“国际/文化体验”、“西班牙语(阅读)”、“西班牙语(口语)”、“国际/文化营销”、“销售体验(非营销)”等. 除非您能找到“CV 技能图”或其他一些很棒的文档,否则您的异构数据很难以任何其他方式做到这一点。这是一项劳动密集型任务——一旦你定义了你的基本技能集(如上面的例子),你就可以将地图创建工作交给 MechanicalTurk 或类似工具。
【解决方案2】:

许多数据库将通过其全文搜索功能为您执行此操作。我知道 PostgreSQL 的全文搜索可以在自定义字典的帮助下轻松做到这一点。

或者,您可以使用 PHP 的 strtok 或等效的方法来索引您的文本。编入索引后,您可以与字典进行比较,或者简单地使用出现次数为自己创建工作表。词云的制作方式类似。

【讨论】:

  • 感谢您的快速回复,问题是我没有可比较的字典。
  • 有默认字典,例如 PostgreSQL 有一个可以消除诸如“the”、“a”等的东西。否则你只是通过解析的单词和它们的出现。你需要创建一个技能表来准确地解析出来。您可以通过进行上述计数来创建此表,并删除您认为您正在寻找的技能。
【解决方案3】:

做好这件事需要知识;否则如何告诉“组织活动”是一种“技能”而“创造性工作”不是?但是一个愚蠢的程序可以通过分析搭配的统计数据来抢占先机:查看How to extract common / significant phrases from a series of text entriesAlgorithms to detect phrases and keywords from text的答案。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 2013-08-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多