Python - 一种学习和检测文本模式的方法?

ara*_*bec 11 python regex machine-learning

问题:

我获得了很多IT行业职位(支持或开发)的职位名单; 我需要根据他们所代表的一般工作类型自动对它们进行分类.例如,IT支持分析师,服务台分析师......等等都可以属于IT支持小组.

目前的方法:

目前,我正在手动构建正则表达式模式来实现这一点,当我遇到应该包含在组中的新标题时,这会发生变化.例如,我最初使用的模式:

"(帮助|服务)办公桌"

匹配IT支持类型的工作,最终成为:

"(帮助|支持|服务)(DESK | ANALYST)"

这更具包容性.

题:

我觉得应该有一种相当直观的方式来使用某种算法自动构建这些正则表达式模式,但我不知道这可能如何工作......我过去曾简要介绍过NLP,但它非常陌生.我...有关如何使用/不使用NLP实现此类算法的任何建议?

编辑:

我正在考虑使用决策树,但它有一些限制,阻止它工作(在这种情况下)"开箱即用"; 例如,如果我构建了以下树:

(服务) - >(服务台) - >(支持)或 - >(分析师) ......支持和分析师都是服务台的孩子

假设我得到字符串"Level-1 Service Desk Analyst"...这应该使用上面的决策树进行分类,但它不会与树无法匹配(因为没有名为"Level"或"Level-1"的根节点").

我相信我现在正朝着正确的方向前进,但我需要额外的逻辑.例如,如果给出以下假设字符串:

  1. IT服务台分析师
  2. 一级服务台分析师
  3. 计算机服务台支持

我想我的算法创建如下所示:

(服务或帮助) - >(服务台) - >(分析师或支持) ...服务和帮助都是根节点,分析师和支持都是服务台的子女

基本上,我需要以下内容:我希望这个匹配算法能够将它呈现的字符串减少到最少数量的子字符串,这些子字符串有效地匹配给定组合中的所有字符串(最好使用决策树).

如果我不够清楚,请告诉我!

ara*_*bec 6

好吧,设置一个赏金让我学习了很多关于这个主题的新材料,但最终我回答了我自己的问题.

我决定使用Python的Pattern模块,使用Naive-Bayes分类器.

当用户手动对位置进行分类时,会一次生成一行csv文件:

"Help Desk Analyst","Help Desk","Service Desk","Help Desk","Jr. Java Developer","Java Development"等等.

我的算法看起来像这样(取自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!'))
Run Code Online (Sandbox Code Playgroud)

... 评论评级分别是position_textposition_group.分类器数据从一次搜索(和程序的执行)保存到下一次.

每次用户搜索时,运行算法(考虑所有先前的分类),并且程序用最佳猜测对返回的位置进行分类.显然,排名越多,这些猜测就越准确.

我将实现的下一步是将用户分类数据上传到中央服务器,该软件的所有实例都可以自动下载.这样,每个用户(愿意为项目贡献数据)将有助于培训该软件的分类系统,并且随着时间的推移,它将变得非常强大.


Vse*_*kin 1

您可以尝试使用决策树方法,将单个单词作为特征。

编辑

决策树的优点在于它是一种“自动”学习算法。您只需给它数据,它就会自行构建树。缺点是需要有标记数据来训练树。

如何做到这一点:标题中的各个单词都是功能(无论顺序如何,我都会使用它们)。接下来,您需要按照以下格式手动标记数据的某些部分:

HELP,DESK - IT-Support
SERVICE,DESK,ANALYST - IT-Support
SALES,REPRESENTATIVE - Sales
...
Run Code Online (Sandbox Code Playgroud)

连字符左边是特征,右边是类标签。

接下来,您需要将这些数据提供给算法,它会学习单词,以最好的方式区分您的类别。这里决策树的独特优势是,您将能够看到这些词是什么。另一个优点是,树可能不需要使用您拥有的位置标签中的所有单词 - 只需足以能够可靠地分类即可。

您可能可以使用scikit-learn的决策树实现 。