如何检测是一个给定的句子是一个问题还是有代码片段

时间:2015-02-17 14:00:32

标签: ruby-on-rails ruby nlp sentence

我有几千个不同长度的句子。这些陈述有多种形式,从3个字符的回复到4000个字符的回复以及大量的代码片段。代码段可以是任何语言。

如何识别问题(疑问句)并且没有代码段?评论不需要问题表格或严格的结构形式。

该应用程序基于rails 3上的ruby构建

一些例句:

1:如何解决分段错误? #valid
2:您必须使用BigInteger #invalid
3:删除运行时错误的一些提示#invalid
4 ::失望:失望:好的#invalid(包含表情符号)
5:这个问题属于哪个类别?图论? #valid

2 个答案:

答案 0 :(得分:1)

这是text classification problem的一个例子,通常通过生成一些特征并将机器学习分类算法应用于它们来解决。

对于您的特定情况,问题检测是一个很好的研究领域。最简单的方法之一是使用正则表达式的启发式方法

以下解决方案取自this paper

  

如果句子满足任何一个句子,则会将其检测为问题   以下内容:•以问号结尾,而不是URL。 •它   包含一个以符合疑问词的单词开头的短语   问题模式。这是5W-1H问题词的概括。   例如,第二句“当你有空时,你可以给我   一个电话“是一个强烈的指示,该句子是一个问题。 •它   适合不在疑问中的常见问题模式   形成。例如,“让我知道你何时会自由”就是这样   问题

还介绍了一个更复杂的解决方案,你可以找到他们提到谷歌搜索“问题检测算法”的论文

对于代码片段检测,现有的解决方案可以检测编程语言,如评论中所述。一个例子是http://www.rubyinside.com/sourceclassifier-identifying-programming-languages-quickly-1431.html

它们可能适用于检测特定样本是否为代码。或者,您可以使用现有libraries

之一训练简单的朴素贝叶斯分类器

答案 1 :(得分:0)

文本分类是这样做的一种方式,但为此你需要大量的样本数据来训练你的模型,以便能够准确地检测你的模式。

您还可以解析这些句子以获得词性(POS),然后轻松查找诸如谁,哪些,如何,何时等来检测问题的词语。

Stanford NLP有一个Ruby库,提供可以使用的POS标记器。

https://github.com/tiendung/ruby-nlp