问题:
我得到了一长串信息技术行业(支持或开发)工作的各种职位头衔;我需要根据它们所代表的一般工作类型自动对它们进行分类。例如,IT支持分析师,服务台分析师.等等,都可以属于IT支持组。
当前方法:
目前,我正在手动构建regex模式以实现这一点,当我遇到应该包含在一个组中的新标题时,这个模式会发生变化。例如,我最初使用的模式是:
“(帮助服务)服务台”
为了匹配IT支持类型的作业,这最终变成了:
“(帮助-支助-服务)(服务台-分析员)”
甚至更具包容性。
问题:
我觉得应该有一种相当直观的方法,用某种算法自动构建这些正则表达式模式,但我不知道这是如何工作的…我以前读过一些关于NLP的文章,但是它对我来说非常陌生.对于如何使用或不使用NLP来实现这样的算法,有什么建议吗?
编辑:
我正在考虑使用决策树,但它有一些限制,使它无法工作(在这种情况下)“开箱即用”;例如,如果我已经构建了以下树:
(服务)->(办公桌)->(支持)或->(分析师) ...where支持和分析师都是办公桌的孩子
假设我得到了“一级服务台分析员”的字符串.这应该使用上面的决策树进行分类,但是它不会与树内在地匹配(因为没有名为"Level“或”Level-1“的根节点)。
我相信我现在正朝着正确的方向前进,但我需要更多的逻辑。例如,如果给我以下假设字符串:
我希望我的算法能够创建如下所示:
(服务或帮助)->(办公桌)->(分析师或支持) ...where服务和帮助都是根节点,分析师和支持都是办公桌的子节点
基本上,我需要以下内容:--我希望这个匹配算法能够将提供给它的字符串减少到最小数量的子字符串,从而有效地匹配给定树中的所有字符串(最好使用决策树)。
如果我说得不够清楚,就告诉我!
发布于 2014-02-09 16:11:17
好吧,设置一个赏金允许我学习很多关于这个话题的新材料,但最终我会回答我自己的问题。
我决定使用Python的模式模块,使用朴素的Bayes分类器.
当用户手动对位置进行分类时,一次生成一个csv文件一行:
“服务台分析员”、“服务台”、“服务台”、"Jr. Java开发人员“、”“...etc。
我的算法如下(取自http://www.clips.ua.ac.be/pages/pattern-vector#classification):
>>> from pattern.vector import Document, NB
>>> from pattern.db import csv
>>>
>>> nb = NB()
>>> for review, rating in csv('reviews.csv'):
>>> v = Document(review, type=int(rating), stopwords=True)
>>> nb.train(v)
>>>
>>> print nb.classes
>>> print nb.classify(Document('A good movie!'))...Where、、、评分分别为、position_text、和。分类器数据从一个搜索(和程序的执行)保存到下一个。
每次用户搜索时,都会运行该算法(考虑到所有以前的分类),程序对返回的位置进行分类,并进行最佳猜测。显然,组合的位置越多,这些猜测就越准确。
我将实现的下一个步骤是将用户分类数据上传到中央服务器,该软件的所有实例都可以自动下载。这样,每个用户(谁愿意为项目提供数据)都将有助于培训该软件的分类系统,并且随着时间的推移,它将变得非常健壮。
发布于 2014-02-01 18:32:55
您可以尝试使用决策树方法,使用单个单词作为功能。
编辑
决策树的优点是它是一种“自动”学习算法。您只需将数据提供给它,它就会自己构建树。缺点是需要有标记的数据来训练树。
如何做到这一点:标题中的单个单词是功能(不管顺序如何,我都会使用它们)。接下来,您需要手动标记数据的某些部分,如下所示:
HELP,DESK - IT-Support
SERVICE,DESK,ANALYST - IT-Support
SALES,REPRESENTATIVE - Sales
...在连字号左边有特征的地方,右边是类标签.
接下来,您需要将这些数据提供给算法,它将学习那些以最佳方式歧视类的单词。这里的决策树的独特优势在于,您将能够看到这些单词是什么。另一个优点是,这棵树可能不需要使用你所拥有的位置标签中的所有单词--只需足够可靠地进行分类。
您可能可以使用来自科学知识-学习的决策树实现。
发布于 2014-02-04 10:35:07
这听起来像是一个聚类问题,或者是一个没有监督的问题,而不是一个决策树问题(您是否预先知道所有的角色,并能够提供有标签的数据)。
如果是我的话,我很想为您的字符串构建一个包式的样式表示,并运行一个通用的聚类算法(k-means,比如说)来查看结果。然后,决定要分配一个新字符串的类别是一个相当简单的匹配操作(取决于您使用什么来执行集群)。
您还可以查看主题模型,其中最简单的是潜在的Dirichlet分配,因为它在这里具有潜在的应用。您将得到一个分配到每个单词的主题,而不是每个字符串,但如果您调整了方法,这可能会被改变。
https://stackoverflow.com/questions/21500736
复制相似问题