这是我想在网上搜索某些内容但不知道其名称的情况。
我有一组保存在文本文件中的工作描述,有些只有一两句话,大多数是一两段。我想编写一个脚本,根据一套规则,当它找到我想要的工作描述时通知我。
例如,假设我在寻找PHP编程的工作,但不想要全职职位,也不想要设计职位。所以我的“规则手册”可能是这样的:
want: PHPwant: web programmingwant: telecommutingdo not want: designingdo not want: full-time position
我可以使用什么方法将这些文件分类为“通过”(符合我寻找的描述)和“失败”(描述不相关)?我考虑了一些想法:
- 计算文本文件中与我的“规则手册”中相同的短语的出现次数,并拒绝那些包含我不想要的词的文件。然而,这并不总是有效,因为如果一个描述说“网页设计不被要求”,那么我的算法会说“它包含了
designing
这个词,所以它不相关”,但实际上它是相关的! - 在搜索我想要和不想要的短语时,将Levenshtein距离内的短语视为相同的短语。例如,
designing
和design
应该被视为相同的方式,还有单词的拼写错误,如programing
。 - 我有一大组我已经手动查看过的描述。有什么方法可以“教”程序“这些是好的描述的例子,这些是坏的描述的例子”吗?
有人知道这个“过滤过程”被称为什么吗,和/或有任何建议或方法可以帮助我实现这个吗?
回答:
你基本上有一个文本分类或文档分类的问题。这是二元分类的一个具体案例,而二元分类本身是监督学习的一个具体案例。这是一个研究得很透彻的问题,有许多工具可以做到。你给一组好的文档和坏的文档给学习或训练过程,它会找到与正面和负面文档强烈相关的词,并输出一个能够将未见过的文档分类为正面或负面的函数。朴素贝叶斯是这种任务最简单的学习算法,它会做得相当不错。还有更复杂的算法,如逻辑回归和支持向量机,它们可能会做得更好,但它们更复杂。
为了确定哪些变体词实际上是等价的,你需要进行某种词干提取。Porter词干提取器在这里是一个常见的选择。