簡體   English   中英

正則表達式:C#在文本中提取問題

[英]Regex: C# extract questions within a text

我需要一個正則表達式來檢測文本中的問題。

輸入示例:

拜托,告訴我如何做到這一點 ......或者如何做到正確 等等....

我需要輸出:

  1. 這個怎么做
  2. 如何使它正確

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

我只需要怎樣的問題

您嘗試完成的任務屬於與正則表達式有關的不同類別。

要解決從文本中提取任意問題的問題,您需要的不僅僅是一些好的正則表達式。 您應該開始尋找一個好的自然語言處理工具包。 也許首先要做一些詞性標注。 然后,從那里你需要做一些語法和句子解析,然后繼續嘗試回答這個問題:“這句話是一個問題嗎?” 通過檢查您的NLP管道將識別的每個句子。

有了這些知識,至少你應該明白,你想要完成的任務是相當困難的,雖然並非不可能,但需要進行大量的微調以獲得良好的性能(通常用精度和精度度量來衡量 )。 你很可能不會接近100%,但你應該能夠通過一個好的PoS標記器和一個好的句子解析器獲得不錯的結果。

編輯

根據您最近編輯的問題,您可以通過RegExs和手寫規則獲得一些基本的報道,但您仍然無法區分更復雜的案例。 對於更通用的解決方案,自然語言處理工具包路由仍然是首選。

不要花太多時間試圖提出一個銀彈正則表達式來匹配自然語言。 自然語言不規律 - 所以它不會起作用! 可以使用正則表達式來識別一些關鍵字,但除此之外,您最好使用簡單的手寫規則,並在良好的自然語言管道中進行標記。

UPDATE

如果你真的認真對待這個任務,請看一下sharpnlp.codeplex.com作為起點。 如果您不需要使用C#,還有其他NLP工具包, NLTK會成為流行的工具包。 作為第二步,給自己一本關於NLP的入門書。 這個主題非常廣泛而且非常酷。 我從中學到了很多很棒的書:Jurafski和Martin的語音和語言處理

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

  1. 執行規范化(刪除任何不需要的符號,並重復)
  2. 嘗試做基本的句子分割(在標點符號中分開: . , ; ? !
  3. 將所有字母轉換為小寫
  4. 用標簽替換所有數字(即)
  5. 對每個規范化句子執行詞性標注
  6. 然后你可以繼續嘗試確定文本中所有“如何”問題的位置。
  7. 在獲得位置后,您應該能夠將它們映射回原始文本並從那里提取原始的“如何”問題

祝好運!

也許這可以幫助。 它可以檢測直接問題,即以問號結尾的句子。

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

這匹配除了點,問號和感嘆號之外的每個字符,直到找到問號(注意*量詞是貪婪的,而問號是負面的前瞻)

我無法告訴你如何解析所有問題。 這將為您提供一些可以解析的問題,但有些問題會被遺漏。 當其他句子不是問題時,可能會選擇其他非問題的句子。 這可以嗎?

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

在上面的文本上運行它,它返回:

我無法告訴你如何解析所有問題。 其他的句子不是可能會被選擇的問題 ,他們沒有問題。 那可以* *

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM