Skip to main content
 首页 » 编程设计

c#之正则表达式:C# 在文本中提取问题

2024年02月20日32JeffreyZhao

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

示例输入:

please, tell me how to do this... or how to make it right! and so on....

我需要输出:

  1. how to do this
  2. how to make it right

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

我只需要如何问题

请您参考如下方法:

您尝试完成的任务属于与正则表达式擅长的任务不同的类别。

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

有了这些知识,您至少应该了解您想要完成的任务相当困难,虽然并非不可能,但需要进行大量微调才能获得良好的性能(通常用 Accuracy and Precision metrics 衡量)。您很可能不会在任何一个方面都接近 100%,但您应该能够通过良好的 PoS 标记器和良好的句子解析器获得不错的结果。

编辑

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

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

更新

如果您真的认真对待这项任务,请查看 sharpnlp.codeplex.com作为起点。 NLTK 还有其他 NLP 工具包如果您不需要使用 C#,那么您会想到它是一种流行的语言。第二步,给自己买一本 NLP 的介绍性书籍。这个主题很大而且很酷。我从中学到了很多东西的一本好书是:Speech and Language Processing由 Jurafski 和 Martin 撰写。

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

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

祝你好运!