php:按字符串中字符的位置获取单词坐标(句子num,word num)

时间:2013-08-30 22:58:48

标签: php arrays string function

我很好奇有关表演的问题。

有一个php字符串$text,其中包含几个句子的英文文本。为了简化问题,我们猜测每个句子都用“。”结束。总是,没有其他符号,? !等等。

$sentences = array();
$sentences = explode(". ",  $text);//we split the text into array of sentences

$words = array();
for ($i=0; $i<count($sentences); $i++){
   $words[$i] = explode(" ",  $sentences[$i]);//split each sentence into words
}

因此,$words是一个二维数组。

$words[$i][$j]是句子#i中的#j。正确?

问题是:

通过字符串中字母的位置找到单词坐标的最快方法是什么?

所以,如果我们有文字:

I go to school. And you.


$word = positionFinder(0);//I  $word == array(0,0)  - the zero word in the zero sentence
$word = positionFinder(1);//' ' $word == array(-1," ")  or something like that
$word = positionFinder(6);//to $word == array(0,2)
$word = positionFinder(9);//school $word == array(0,3)
$word = positionFinder(10);//school $word == array(0,3)
$word = positionFinder(14);//. $word == array (-1,".") or something like that
$word = positionFinder(17);//And $word == array(1,0) - the zero word in the first sentence

我相信为了获得更好的性能,可以使用附加阵列中的一些数据。 positionFinder函数的使用次数将超过文本中的单词数。所以positionFinder应尽可能快地运作。

所以它通过它的字母找到单词坐标。 有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

function positionFinder($text, $n) {
    $s=$text[$n];
    $i=0;
    $sep = array(" ", ".")
    while (!in_array($text[$n-$i],$sep)) {
        $s = $text[$n+$i].$s;
        $i++;
    }
    $i=1
    while (!in_array($text[$n+$i],$sep)) {
        $s .= $text[$n+$i];
        $i++;
    }
    return s;
}

但是如果你创建一个“positionFinder”数组会更快:

function makearray($text) {
    $sentences = explode(". ",  $text);
    $positionFinder = array();
    $slen = 0;
    for ($i=0; $i<count($sentences); $i++) {
       $words[$i] = explode(" ",  $sentences[$i]);
       for ($ii=0; $ii<count($words[$i]); $ii++) {
           $positionFinder[$slen] = $words[$i][$ii];
           $slen += strlen($words[$i])+1; //+1 because of " "
       }
       $slen+=strlen($sentences[$i])+2; //+2 because of ". "
    }
    return $positionFinder;
}

我需要一段时间来制作阵列但是检查它会非常快:

$text="I go to school. And you. ";
$positionFinder = makearray($text);
echo $positionFinder[0];
>>  I
echo $positionFinder[2];
>>  go
...