我如何以编程方式衡量文本的模糊性?

时间:2015-03-10 21:56:57

标签: algorithm text nlp

我想提供一种服务,可以在其他网站上找到招聘信息,让用户可以轻松申请这些工作。

我想提供的是一种自动筛选的形式;具体来说,我想添加一个选项来过滤掉含有模糊语言的帖子,以防用户不希望第三方招聘人员发布招聘信息(因为模糊的语言是这类帖子的标志)。

是否有一种算法可以用来衡量某些文本的模糊性或清晰度?

2 个答案:

答案 0 :(得分:3)

据我所知,你需要一个分类器来将职位描述分为两类:“第三方”和“雇主本身”。这是一项经典的text classification任务,与spam filtering非常相似。

垃圾邮件过滤的主要区别如下:

  1. 班级之间的界限模糊:甚至人类也不能经常确定工作描述的来源。
  2. 几乎没有职位描述作者的反击。
  3. 因此,我建议您使用有监督的机器学习方法来完成您的任务。创建一系列的工作描述 - 收集每种类型的100-200并不难,这就足够了,我想。然后尝试ML分类器,如随机森林,逻辑回归或朴素贝叶斯,具有简单的功能,如词袋;上传职位描述的人的姓名;文字长度;也尝试一些二进制功能,例如存在像@ Sklivvz♦。

    推荐的特殊单词

    例如,请查看Naive Bayes spam filtering

    您的课程(“模糊文字”和“明文”)似乎过于模糊,无法创建有效的分类器。另外,你假设这个分类等同于我上面提出的分类(你真的需要),看起来并不可靠。

答案 1 :(得分:2)

我在我的网站上为Careers Stack Overflow撰写了类似的内容,尽管不完全是你所要求的。

有些短语通常表示模糊的工作广告:公司术语。虽然很难确定一个单词或短语实际是否以行话方式使用,但很明显许多不良帖子有很多匹配 - 他们使用了很多这样的单词

您可以在网站上测试tool此处以及更多explanations

关于代码,它只是一系列静态编译的正则表达式。简单,适合我的需要。

void Main()
{

    string test = "developer-centric vision of insourcing";
    var matches = BadChecks.SelectMany(bad => 
        bad.Matches(test)
           .Cast<Match>()
           .Select(m => m.Value.ToLowerInvariant())
        ).ToList();

    foreach (var res in matches)
        Console.WriteLine(res);

}

private static readonly List<Regex> BadChecks = SetupBadChecks();

private static List < Regex > SetupBadChecks() {
    return new List < string > {
        "(#1|number (one|1))",
        "([a-z]+)-free",
        "(Out|in)sourcing",
        "-centric",
        "a wider net",
        "Aggregator",
        "Alignment",
        "all hands on deck",
        //  more
        "Wellness",
        "Win(-| )win",
        "World(-| )class"
    }.Select(s => new Regex(s, RegexOptions.IgnoreCase |
                               RegexOptions.CultureInvariant |
                               RegexOptions.Compiled))
     .ToList();
}

返回

  

内包
  -centric