這是一個問題:我想確定一個字符串是否是一個問題。我如何分析「?」符號(蟒蛇)
"Where is the car?"
這不是一個問題:
"Check this out: http://domain.com/?q=test"
我怎樣寫一個函數來分析字符串,以便我們可以肯定它是一個問題而不是URL的一部分?
這是一個問題:我想確定一個字符串是否是一個問題。我如何分析「?」符號(蟒蛇)
"Where is the car?"
這不是一個問題:
"Check this out: http://domain.com/?q=test"
我怎樣寫一個函數來分析字符串,以便我們可以肯定它是一個問題而不是URL的一部分?
如果問號是永遠存在的,你可以檢查像
if question.strip().endswith("?") and "://" not in question:
# do something ?
如果你真的想解析真正句話,你可能需要NLTK,我不知道該情況。
p.s這只是一個示例,如果文本是固定的,沒有人可以用正則表達式解析真正的英語語法。
問號不會有空格兩側或斷行/一結束串後,如果是在一個URL
例如,您可以檢查問號後面緊跟着一個非空格,非換行符。但我想更安全的方法是在搜索其上的問號之前從字符串中去除任何可能的URL。
該正則表達式在單詞字符後面查找問號,後面跟着空格或字符串/行的結尾。並不完美,但應該抓住大多數情況下...
\w\?[$\s]
編輯(缺少咖啡因罷工......):
本來應該:
\w\?(\s|$)
在原有的$被解釋爲文字字符。 (Thanks Gumbo)
基本上別人說的是正確的。 ?
之前應該沒有空格。如果問題是由用戶輸入的,則事情會變得更加模糊。
在這種情況下,使用上下文無關語法的正確解析器可能會產生更好的結果。即使在最後沒有問號的問題。但它可能不承認所有問題。涵蓋所有可能的結構變化,變形和不是非常簡單的。
但是,如果你是一定的問題總是末加上問號,你可以做的
if question_text.strip().endswith("?"):
print `question_text`, "is a question"
或者簡單的東西:
import re
p = re.compile(r"\w+\?\s*")
if p.search(question_text):
print `question_text`, "contains a question"
沒有測試,但應該適用於大多數情況。
一個可能不是非常可靠的方法,你可能會得到一些牽引,將尋找以問號結束的字符串中的「問題單詞」。在英語中,大多數問句或條款(即以逗號開頭)以「誰」,「什麼」,「哪裏」,「何時」,「如何」,「爲什麼」,「可以」,「可能」,「將會」,「不會」,「 ,「不」等等。你可以用這種方式建立一個很好的啓發式方法,它可能比正則表達式更好(或者可以合併到一個或多個正則表達式中)。
我知道的語言使用一個或多個在標點符號之後的空格在視覺上將句子分開。 – Gumbo 2009-11-24 09:47:03