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

How to detect is a given sentence is a ques-tion or has code snippets

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

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

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

一些例句:

1:如何解决segmentation fault? #有效
2:你必须使用 BigInteger #invalid
3:一些消除运行时错误的技巧#invalid
4: :disappointed: :disappointed: 好的#invalid(包含表情符号)
5:这个问题属于哪一类?图论? #有效

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

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

以下解决方案取自this paper

A sentence is detected as a question if it fulfills any of the following: • It ends with a question mark, and is not a URL. • It contains a phrase that begins with words that fit an interrogative question pattern. This is a generalization of 5W-1H question words. For example, the second phrase of “When you are free, can you give me a call” is a strong indicator that the sentence is a question. • It fits the pattern of common questions that are not in the interrogative form. For instance, “Let me know when you will be free” is one such question.

还描述了更复杂的解决方案,您可以在谷歌搜索的论文中找到它们 "question detection algorithm"

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

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

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

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

您还可以解析这些句子以获得词性 (POS),然后轻松查找 who、which、how、when 等词来检测问题。

Stanford NLP 有一个 Ruby 库,它提供了您可以使用的词性标注器。

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