我有一长串文字。我想将它存储在一个数组中,每个元素包含2个句子。我认为应该通过在点+空间周围爆炸文本来完成;然而,有像'先生'这样的元素我不知道如何从爆炸功能中排除。
我也不知道如何调整它以用2个句子而不是1来分解文本。
答案 0 :(得分:0)
可能是这样的:
$min_sentence_length = 100;
$ignore_words = array('mr.','ms.');
$text = "some texing alsie urj skdkd. and siks ekka lls. lorem ipsum some.";
$parts = explode(" ", $text);
$sentences = array();
$cur_sentence = "";
foreach($parts as $part) {
// Check sentence min length and is there period
if (strlen($cur_sentence) > $min_sentence_length &&
substr($part,-1) == "." && !in_array($part, $ignore_words)) {
$sentences[] = $cur_sentence;
$cur_sentence = "";
}
$cur_sentence .= $part . " ";
}
if (strlen($cur_sentence) > 0)
$sentences[] = $cur_sentence;
答案 1 :(得分:0)
对您的问题的评论链接到使用preg_split()而不是explode()的答案,以提供有关如何以及何时分割输入的更准确描述。这可能对你有用。另一种方法是将每次出现". "
时的输入拆分为临时数组,然后循环遍历该数组,然后根据需要将其拼接回来。 e.g。
$tempArray = explode('. ', $input);
$outputArray = array();
$outputElement = '';
$sentenceCount = 0;
foreach($tempArray as $part){
$outputElement .= $part . '. ';
//put other exceptions here, not just "Mr."
if ($part != 'Mr'){
$sentenceCount++;
}
if ($senteceCount == 2){
$outputArray[] = $outputElement;
$outputElement = '';
$sentenceCount = 0;
}
}