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