在给出白名单和单词/短语黑名单的情况下,查找文本的相关性

时间:2013-05-11 02:43:50

标签: search filter machine-learning document-classification

这是我想要在线搜索但不知道它叫什么的情况。

我在文本文件中有一组职位描述,有些只有一两句长,大多数是一段或两段。我想写一个脚本,给定一套规则,当它找到我想要的工作描述时会通知我。

例如,假设我正在寻找PHP编程工作,但不是全职工作而不是设计职位。所以我的“规则手册”可能是:

want: PHP
want: web programming
want: telecommuting
do not want: designing
do not want: full-time position

我可以使用什么方法将这些文件分类为“传递”(符合我要查找的描述)和“失败”(描述不相关)?我正在考虑的一些想法:

  • 计算文本文件中也出现在“规则手册”中的短语的出现次数,并拒绝包含我不想要的单词的短语。但这并不总是有效,因为如果描述说“不需要网页设计”怎么办?然后我的算法会说“那里包含单词designing,所以当它确实存在时它是不相关的!”
  • 在文本中搜索我喜欢和不想要的短语时,将某个Levenshtein距离内的短语计算为相同的短语。例如,designingdesign应该以相同的方式处理,以及单词拼写错误,例如programing
  • 我手动查看了很多描述。有没有办法可以“教”程序“这些都是好的描述的例子,这些都是坏的例子”?

有谁知道这个“过滤过程”被调用了什么,和/或有任何关于如何实现这个目标的建议或方法?

1 个答案:

答案 0 :(得分:1)

您基本上有文本分类文档分类问题。这是二进制分类的特定情况,它本身就是监督学习的特定情况。这是一个研究得很好的问题,有很多工具可以做到。基本上你给学习或训练过程提供了一套好的文件和不良文件,这些过程找到与正面和负面文件强烈相关的单词,并输出一个能够将看不见的文件分类为正面或不正面的功能。朴素贝叶斯是这类任务最简单的学习算法,它会做得很好。 Logistic回归和支持向量机等有更好的算法可能会有所改善,但它们更复杂。

要确定哪些变体单词实际上彼此等同,您需要进行某种词干。 Porter stemmer是一个常见的选择。