我如何以编程方式衡量文本的模糊度?
How can I programatically measure the vagueness of text?
我想提供一种服务,可以在其他网站上查找招聘信息并让用户轻松申请这些工作。
我想提供的是一种自动筛选帖子的形式;具体来说,我想添加一个选项来过滤掉含糊语言的帖子,以防用户不想要来自第 3 方招聘人员的招聘信息(因为含糊语言是此类帖子的明显标志)。
是否有一种算法可以用来衡量某些文本的模糊度或清晰度?
我在我的 Careers Stack Overflow 网站上写了类似的东西,尽管与您的要求不完全相同。
有一些短语通常表示招聘广告含糊不清:企业行话。虽然很难确定一个单词或短语是否 实际上 以行话方式使用,但很明显,许多不良帖子有很多匹配 - 他们使用了很多这样的词。
您可以在网站上测试 tool here and there's more 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();
}
哪个returns
insourcing
-centric
据我所知,您需要一个分类器将职位描述分为 2 类:“第 3 方”和 "employers themselves"。很经典text classification task, very similar to spam filtering.
与垃圾邮件过滤的主要区别如下:
- 类之间的模糊界限:即使是人类也不能经常确定职位描述的来源。
- 职位描述的作者几乎没有反对意见。
因此,我建议您使用有监督的机器学习方法来完成您的任务。创建一系列工作描述 - 收集每种类型的 100-200 个并不难,我想这就足够了。然后尝试 ML 分类器,如随机森林、逻辑回归或具有词袋等简单特征的朴素贝叶斯;上传职位描述的人的姓名;文本的长度;也尝试一些二进制特征,例如存在像@Sklivvz 推荐的特殊词。
例如看Naive Bayes spam filtering。
您的 类("vague text" 和 "clear text")似乎对于创建有效的分类器而言过于模糊。另外,你认为这个分类等同于我上面制定的分类(这是你真正需要的)的假设看起来并不可靠。
我想提供一种服务,可以在其他网站上查找招聘信息并让用户轻松申请这些工作。
我想提供的是一种自动筛选帖子的形式;具体来说,我想添加一个选项来过滤掉含糊语言的帖子,以防用户不想要来自第 3 方招聘人员的招聘信息(因为含糊语言是此类帖子的明显标志)。
是否有一种算法可以用来衡量某些文本的模糊度或清晰度?
我在我的 Careers Stack Overflow 网站上写了类似的东西,尽管与您的要求不完全相同。
有一些短语通常表示招聘广告含糊不清:企业行话。虽然很难确定一个单词或短语是否 实际上 以行话方式使用,但很明显,许多不良帖子有很多匹配 - 他们使用了很多这样的词。
您可以在网站上测试 tool here and there's more 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();
}
哪个returns
insourcing
-centric
据我所知,您需要一个分类器将职位描述分为 2 类:“第 3 方”和 "employers themselves"。很经典text classification task, very similar to spam filtering.
与垃圾邮件过滤的主要区别如下:
- 类之间的模糊界限:即使是人类也不能经常确定职位描述的来源。
- 职位描述的作者几乎没有反对意见。
因此,我建议您使用有监督的机器学习方法来完成您的任务。创建一系列工作描述 - 收集每种类型的 100-200 个并不难,我想这就足够了。然后尝试 ML 分类器,如随机森林、逻辑回归或具有词袋等简单特征的朴素贝叶斯;上传职位描述的人的姓名;文本的长度;也尝试一些二进制特征,例如存在像@Sklivvz 推荐的特殊词。
例如看Naive Bayes spam filtering。
您的 类("vague text" 和 "clear text")似乎对于创建有效的分类器而言过于模糊。另外,你认为这个分类等同于我上面制定的分类(这是你真正需要的)的假设看起来并不可靠。