[英]Regex: C# extract questions within a text
我需要一個正則表達式來檢測文本中的問題。
輸入示例:
拜托,告訴我如何做到這一點 ......或者如何做到正確 ! 等等....
我需要輸出:
- 這個怎么做
- 如何使它正確
現在我使用它: (?<q>(how to|how match|how many).*)(\\s|\\.|;|!|\\?|( \\-)|(\\- )|‾|:|…|_|\\||@|~|…|–|—|¯|»|•|●|{|}|\\(|\\)|\\\\|\\]|\\[|>|<|→|'|""|`|$)
但不起作用
我只需要怎樣的問題
您嘗試完成的任務屬於與正則表達式有關的不同類別。
要解決從文本中提取任意問題的問題,您需要的不僅僅是一些好的正則表達式。 您應該開始尋找一個好的自然語言處理工具包。 也許首先要做一些詞性標注。 然后,從那里你需要做一些語法和句子解析,然后繼續嘗試回答這個問題:“這句話是一個問題嗎?” 通過檢查您的NLP管道將識別的每個句子。
有了這些知識,至少你應該明白,你想要完成的任務是相當困難的,雖然並非不可能,但需要進行大量的微調以獲得良好的性能(通常用精度和精度度量來衡量 )。 你很可能不會接近100%,但你應該能夠通過一個好的PoS標記器和一個好的句子解析器獲得不錯的結果。
編輯
根據您最近編輯的問題,您可以通過RegExs和手寫規則獲得一些基本的報道,但您仍然無法區分更復雜的案例。 對於更通用的解決方案,自然語言處理工具包路由仍然是首選。
不要花太多時間試圖提出一個銀彈正則表達式來匹配自然語言。 自然語言不規律 - 所以它不會起作用! 可以使用正則表達式來識別一些關鍵字,但除此之外,您最好使用簡單的手寫規則,並在良好的自然語言管道中進行標記。
UPDATE
如果你真的認真對待這個任務,請看一下sharpnlp.codeplex.com作為起點。 如果您不需要使用C#,還有其他NLP工具包, NLTK會成為流行的工具包。 作為第二步,給自己一本關於NLP的入門書。 這個主題非常廣泛而且非常酷。 我從中學到了很多很棒的書:Jurafski和Martin的語音和語言處理 。
作為最后的想法,這就是我至少要做的事情:
. , ; ? !
) 祝好運!
也許這可以幫助。 它可以檢測直接問題,即以問號結尾的句子。
@"[^\.!]*?(?!\?)"
這匹配除了點,問號和感嘆號之外的每個字符,直到找到問號(注意*量詞是貪婪的,而問號是負面的前瞻)
我無法告訴你如何解析所有問題。 這將為您提供一些可以解析的問題,但有些問題會被遺漏。 當其他句子不是問題時,可能會選擇其他非問題的句子。 這可以嗎?
([^\.?!]*(?:how|what|where|when|why)[^\.?!]*[\.?!]|[^\.?!]*\?)
在上面的文本上運行它,它返回:
我無法告訴你如何解析所有問題。 其他的句子不是可能會被選擇的問題時 ,他們沒有問題。 那可以* ? *
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.