2011-09-30 61 views
2

我想從PHP正則表達式中提取專有名詞(例如Micheal Jackson),但是我的正則表達式不正確。php/regex - 從文本中提取專有名詞

文本:

我的朋友邁克爾傑克遜是流行音樂之王。遊戲專輯賣得很少。

我想要什麼:

一個正則表達式是能夠提取的多個單詞e.g邁克爾傑克遜還是遊戲專輯專有名詞。

我的正則表達式:

/(?<=\s)([A-Z][a-z]+).*(?=\s)/ 

感謝。

P.S.通過移動設備發佈。道歉,如果格式不好。

+0

正則表達式不知道正確的名稱是什麼。你如何定義/發現它們? – sln

+0

Michael。以防拼寫對你的算法很重要。 – TARKUS

回答

3

嘗試使用單詞邊界,而不是你的回顧後/超前

/\b([A-Z][a-z]+)\b/ 

我不明白你.*部分,這將在第一個字到最後空格後搭配什麼,所以我從我的正則表達式刪除了。

如果你想一次匹配多個字(也許你對自己.*實現這一目標?)試試這個:

(?:\s*\b([A-Z][a-z]+)\b)+ 

看到它here on Regexr

+2

+1(':\ s * \ b([A-Z] [a-z] +)\ b)+'正則表達式。那些在一個單詞中間有大寫字母的專有名詞(例如,像CompuServe這樣的公司名稱)呢?也許你應該考慮使用'(?:\ s * \ b([A-Z] [A-Za-z] +)\ b)+'代替。 – megaflop

+0

對於像「iPhone」這樣以小寫字母開頭,但有大寫字母的專有名詞,我使用:(?:\ s * \ b([az] * [AZ] [A-Za-z] +)\ b)+ –

+0

僅供參考:這將匹配單個大寫單詞前的空格前面的空格。 – aikramer2

1

斯坦福分析器可以幫助你在這裏。它將標記你的短語,並根據句子結構提取專有名詞和所有其他作品。

它可以作爲一個jar下載,或者你可以嘗試一下在網上瀏覽:http://nlp.stanford.edu:8080/parser/