2

我需要一个正则表达式来检测文本中的问题。

示例输入:

请告诉我如何做到这一点......或如何使它正确!等等....

我需要输出:

  1. 这该怎么做
  2. 如何使它正确

现在我用这个: (?<q>(how to|how match|how many).*)(\s|\.|;|!|\?|( \-)|(\- )|‾|:|…|_|\||@|~|…|–|—|¯|»|•|●|{|}|\(|\)|\\|\]|\[|>|<|→|'|""|`|$)但不起作用

我只需要如何提问

4

3 回答 3

5

您尝试完成的任务与正则表达式的用途不同。

要解决从文本中提取任意问题的问题,您需要的不仅仅是几个好的正则表达式。您应该开始寻找一个好的自然语言处理工具包。也许首先做一些词性标记。然后,您需要从那里进行一些语法和句子解析,然后继续尝试回答以下问题:“这是一个句子吗?” 通过检查您的 NLP 管道将识别的每个句子。

有了这些知识,您至少应该明白,您想要完成的任务相当困难,虽然并非不可能,但需要大量微调才能获得良好的性能(通常使用准确度和精度指标来衡量)。你很可能不会得到接近 100% 的结果,但你应该能够通过一个好的 PoS 标注器和一个好的句子解析器获得不错的结果。

编辑

根据您最近对该问题的编辑,您可能能够使用 RegEx 和手写规则获得一些基本覆盖,但您仍然无法区分许多更复杂的情况。自然语言处理工具包路线仍然是更通用的解决方案的首选。

不要花太多时间试图想出一个银弹正则表达式来匹配自然语言。自然语言是不规则的 - 所以它不会工作!可以使用正则表达式来识别一些关键字,但除此之外,您最好使用简单的手写规则,并根据良好的自然语言管道进行标记。

更新

如果您对这项任务非常认真,请查看sharpnlp.codeplex.com作为起点。如果您不需要使用 C#,那么还有其他 NLP 工具包,其中NLTK是一种流行的工具包。第二步,为自己准备一本关于 NLP 的介绍性书籍。主题很广,很酷。我从中学到很多的好书是:Jurafski 和 Martin 的《语音和语言处理》。

作为最后的想法,这就是我至少要做的事情:

  1. 执行规范化(删除您不需要的任何符号,并重复)
  2. 尝试做基本的句子分割(在标点符号处分割. , ; ? !:)
  3. 将所有字母转换为小写
  4. 用标签替换所有数字(即)
  5. 对每个标准化句子执行词性标注
  6. 然后您可以继续尝试确定所有“如何做”问题在文本中的位置。
  7. 获得位置后,您应该能够将它们映射回原始文本并从那里提取原始的“如何做”问题

祝你好运!

于 2012-12-05T21:13:04.003 回答
0

也许这会有所帮助。它可以检测直接问题,即以问号结尾的句子。

@"[^\.!]*?(?!\?)"

这匹配除了点、问号和感叹号之外的每个字符,直到找到问号(注意 * 量词是贪婪的,并且问号的负前瞻)

于 2012-12-05T21:12:10.157 回答
0

我不能告诉你如何解析所有问题。这会给你一些可能的问题,你可以解析,但有些问题会被遗漏。其他不是问题的句子可能会在它们不是问题时被选中。那样可以么?

([^\.?!]*(?:how|what|where|when|why)[^\.?!]*[\.?!]|[^\.?!]*\?)

在上面的文本上运行它并返回:

我不能告诉你如何解析所有问题。其他不是问题的句子可能会在它们不是问题时被选中。可以吗* *

于 2012-12-05T21:34:23.093 回答