2010-09-19 26 views
0

如果我給語音合成器(節日,在這種情況下,但它適用於所有文本)下面的一段文字:分解首字母縮寫以確保合成器正確讀取它們?

「在美國的USPGA錦標賽,BBC記者去了MIA」。 它讀取 「在美國的uspga錦標賽上,BBC記者去了mia」。

換句話說,我想這是因爲它是一組輔音,它會正確地讀取「BBC」,但會使「其他」的「字」出現。

做最簡單的事情,我想,可能是通過一個PHP 腳本,找了2個或多個大寫字母來運行它,並簡單地 「爆」字爲空格,像USPG A.

我意識到這會造成奇怪的事情,比如「我告訴他 不這樣做」,但在新聞報道中往往會發生較少。

這是事情;我可以「爆炸」一個詞,問題是,我是其中一個人,儘管經過數月的努力,卻無法讓他們的腦袋圍繞REGEX的某些方面。 在這種情況下,它正在尋找:兩個或多個字母相鄰的大寫字母。

我給所有上面的前導碼的原因是萬一有更好的方法做到這一點,我沒有找到或通過 - 也許是一個詞的首字母縮略詞數據庫或別的什麼。

回答

2

使用桑德蘭與preg_replace_callback(正則表達式),使得它很容易把所識別的首字母縮寫

$input = "At the USPGA championship in the US, the BBC reporter went MIA"; 

function cb_separateCapitals($matches) { 
    return implode(' ',str_split($matches[0])); 
} 


echo $input,'<br />'; 

$output = preg_replace_callback('/\b([A-Z]{2,})\b/','cb_separateCapitals',$input); 

echo $output; 

在美國的USPGA冠軍的所有字母之間的一個空格, BBC記者去了MIA

在USPGA冠軍的 美國,BBC記者去了MIA

+0

非常漂亮的簡化代碼!我喜歡你非常有用的改編(其實現在完全回答了這個問題) – 2010-09-19 10:47:21

+0

哇 - 我敬畏。這正是我所期待的。感謝你和德蘭。 – talkingnews 2010-09-19 10:58:05

+0

沒問題,樂意幫忙;) – 2010-09-19 11:00:11

5

模式匹配縮寫:

/\b([A-Z]{2,})\b/ 

即具有兩個或更多資金匹配任何「字」。

0

"[A-Z][A-Z]"將匹配彼此相鄰的兩個大寫字母的任何實例。

4

可以大大利用lookahead assertion

$input = "At the USPGA championship in the US, the BBC reporter went MIA"; 
echo preg_replace('~[A-Z](?=[A-Z])~', '$0 ', $input); 

[A-Z](?=[A-Z])說: 「每首都跟着一個大寫」

相關問題