我需要一个正则表达式来检测文本中的问题。
示例输入:
请告诉我如何做到这一点 ......或如何做到正确!等等....
我需要输出:
- 怎么做
- 如何做对
醇>
现在我用这个:
(?<q>(how to|how match|how many).*)(\s|\.|;|!|\?|( \-)|(\- )|‾|:|…|_|\||@|~|…|–|—|¯|»|•|●|{|}|\(|\)|\\|\]|\[|>|<|→|'|""|`|$)
但不起作用
我只需如何问题
答案 0 :(得分:4)
您尝试完成的任务属于与正则表达式有关的不同类别。
要解决从文本中提取任意问题的问题,您需要的不仅仅是一些好的正则表达式。您应该开始寻找一个好的自然语言处理工具包。也许首先要做一些词性标注。然后,从那里你需要做一些语法和句子解析,然后继续尝试回答这个问题:“这句话是一个问题吗?”通过检查你的NLP管道已经确定的每个句子。
有了这些知识,至少你应该明白你想要完成的任务是相当困难的,虽然并非不可能,但需要进行大量微调以获得良好的性能(通常用Accuracy and Precision metrics来衡量) 。你很可能不会接近100%,但你应该能够通过一个好的PoS标记器和一个好的句子解析器获得不错的结果。
修改强>
根据您最近编辑的问题,您可以通过RegExs和手写规则获得一些基本的报道,但您仍然无法区分更复杂的案例。对于更通用的解决方案,自然语言处理工具包路由仍然是首选。
不要花太多时间试图提出银弹正则表达式来匹配自然语言。 自然语言不常规 - 所以它不会起作用!使用正则表达式来识别某些关键字是可以的,但除此之外,您最好通过简单的手写规则,并在一个良好的自然语言管道的标记中进行标记..
<强>更新强>
如果您真的认真对待这项任务,请以sharpnlp.codeplex.com为出发点。如果您不需要使用C#,还有其他NLP工具包,其中NLTK会成为流行的工具包。作为第二步,给自己一本关于NLP的入门书。这个主题非常广泛而且非常酷。我从很多方面学到的一本好书将是:Speech and Language Processing,由Jurafski和Martin。
作为最后的想法,这就是我至少要做的事情:
. , ; ? !
)答案 1 :(得分:0)
也许这会有所帮助。它可以检测直接问题,即以问号结尾的句子。
@"[^\.!]*?(?!\?)"
这匹配除了点,问号和感叹号之外的每个字符,直到找到问号为止(注意*量词是贪婪的,而问号是负面的前瞻)
答案 2 :(得分:0)
我不能告诉你如何解析所有问题。这将为您提供一些可以解析的问题,但有些问题会被遗漏。当其他句子不是问题时,可能会选择其他非问题的句子。那可以吗?
([^\.?!]*(?:how|what|where|when|why)[^\.?!]*[\.?!]|[^\.?!]*\?)
在上面的文本中运行它并返回:
我无法告诉你如何来解析所有问题。 其他非问题的句子可能会被选中 时它们不是问题。 是OK * ? *