2

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

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

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

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

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

输出应该是这样的:

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

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

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

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

谢谢

4

3 回答 3

5

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

将所有标点分隔的数据(或者可能只是括号和逗号)提取到一个新表中(没有主键,只有技能),所以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。您可以查询最热门的技能、符合特定条件的简历等。

于 2010-04-13T22:41:34.547 回答
0

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

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

于 2010-04-13T22:20:40.647 回答
0

做好这件事需要知识;否则如何告诉“组织活动”是一种“技能”而“创造性工作”不是?但是一个愚蠢的程序可以通过分析搭配的统计数据来抢先一步:请参阅如何从一系列文本条目中提取常见/重要短语和从文本中检测短语和关键字的算法的答案。

于 2010-04-19T05:30:50.207 回答