我需要一个正则表达式来检测文本中的问题。
示例输入:
please, tell me how to do this... or how to make it right! and so on....
我需要输出:
- how to do this
- 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 撰写。
作为最后的想法,这是我至少会做的事情:
- 执行规范化(删除任何不需要的符号和重复项)
- 尝试进行基本的句子分割(在标点符号处拆分:
. , ; ? !) - 将所有字母转为小写
- 用标签替换所有数字(即 )
- 对每个规范化的句子进行词性标注
- 然后您可以继续尝试确定所有“操作方法”问题在文本中的位置。
- 获得位置后,您应该能够将它们映射回原始文本并从那里提取原始的“How To”问题
祝你好运!
