Frage

Wenn ich füttere einen Sprachsynthesizer (Festival, in diesem Fall, aber es gilt für alle) das folgende Stück Text:

"Auf der USPGA Meisterschaft in den USA ging der BBC-Reporter MIA". Es liest "Bei der USPGA Meisterschaft in der wir ging der BBC-Reporter mia".

Mit anderen Worten, ich denke, dass, weil es sich um eine Gruppe von Konsonanten ist, liest „BBC“ richtig macht aber „Worte“ aus den anderen.

Die einfachste Sache zu tun, nehme ich an, wäre es durch ein PHP laufen Skript, das für 2 oder mehr Großbuchstaben sah, und einfach "Explodiert", das Wort in die Räume, wie U S P G A.

Ich weiß, wäre es mit Dingen wie „verursachen würde Seltsamkeit sagte ich ihm, N O T zu tun“, aber in den Nachrichten, die weniger passieren tendiert.

Hier ist das Ding; Ich kann „explodieren“, ein Wort OK, das Problem ist, ich bin einer jener Menschen, die trotz Monate zu versuchen, kann einfach nicht den Kopf Runde bestimmte Aspekte von REGEX bekommen. In diesem Fall ist es sucht nach: zwei oder mehr Buchstaben nebeneinander in Großbuchstaben

.

Der Grund gab ich alle Präambel- oben in Fall ist es eine bessere Möglichkeit, dies ich tue nicht gefunden hatte, oder durch von -. Vielleicht einen db von Akronymen, um Worte oder etwas

War es hilfreich?

Lösung

Mit Delan des regulären Ausdruck mit preg_replace_callback () macht es sehr einfach zwischen allen Buchstaben der identifizierten Akronyme einem einzigen Raum zu setzen

$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;

geben

Am USPGA Meisterschaft in den USA, der BBC-Reporter ging MIA

Am U S S T A-Meisterschaft in der U S, ging die B B C Reporter M I A

Andere Tipps

Ein Muster Akronym entsprechen:

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

Das paßt zu jedem ‚Wort‘ mit zwei oder mehr Hauptstädten.

können Sie erheblich Ihren Code vereinfachen, indem ein vorwärtsgerichtete Behauptung

$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]) sagt "jedes Kapital durch eine Kapital gefolgt"

"[A-Z][A-Z]" wird jede Instanz von zwei Großbuchstaben entsprechen nebeneinander.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top