0

我想在文件中交叉引用字符串中的每个单词。

所以,如果给我字符串:Jumping jacks wake me up in the morning.

  1. 我使用一些正则表达式来删除句点。此外,整个字符串都是小写的。
  2. explode()然后我继续使用 PHP 的漂亮函数将单词分成一个数组。
  3. 现在,我剩下的是一个数组,其中包含字符串中使用的单词。

从那里我需要查找数组中的每个值并为其获取一个值并将其添加到运行总和中。for()循环它。好吧,这就是我卡住的地方......

列表 ( $wordlist) 的结构如下:

wake#4 waking#3 0.125

morning#2 -0.125

单词和数字之间有\ts。每个值可以有多个单词。

我现在需要 PHP 做的是查找数组中每个单词的数字,然后将相应的数字拉回以将其添加到运行总和中。对我来说最好的方法是什么?

答案应该很简单,只需在单词列表中找到字符串的位置,然后找到选项卡并从那里读取 int ......我只需要一些指导。

提前致谢。

编辑:澄清 - 我不想要单词列表的值的总和,而是我想查找我的个人值,因为它们对应于句子中的单词,然后在列表中查找它们并仅添加这些值;不是所有的人。

4

2 回答 2

1

根据您的评论和问题编辑编辑答案。运行总和存储在一个名为 $sum 的数组中,其中“单词”的键值将存储其运行总和的值。例如$sum['wake'] 将存储单词wake 的运行总和等等。

$sum = array();
foreach($wordlist as $word) //Loop through each word in wordlist
{
    // Getting the value for the word by matching pattern.
    //The number value for each word is stored in an array $word_values, where the key is the word and value is the value for that word.
    // The word is got by matching upto '#'. The first parenthesis matches the word - (\w+)
    //The word is followed by #, single digit(\d), multiple spaces(\s+), then the number value(\S+ matches the rest of the non-space characters)
    //The second parenthesis matches the number value for the word

    preg_match('/(\w+)#\d\s+(\S+)/', $word, $match);  
    $word_ref = $match[1];
    $word_ref_number = $match[2];
    $word_values["$word_ref"] = $word_ref_number;

}

//Assuming $sentence_array to store the array of words used in your string example {"Jumping", "jacks", "wake", "me", "up", "in", "the", "morning"}

foreach ($sentence_array as $word)
{
    if (!array_key_exists("$word", $sum)) $sum["$word"] = 0;
    $sum["$word"] += $word_values["$word"]; 
}

我假设您会注意区分大小写,因为您提到您将整个字符串设为小写,所以这里不包括在内。

于 2012-01-05T11:02:37.983 回答
0
$sentence = 'Jumping jacks wake me up in the morning';

$words=array();

foreach( explode(' ',$sentence) as $w ){

  if( !array_key_exists($w,$words) ){

   $words[$w]++;

  } else {
    $words[$w]=1;
  }

}

explodeby 空格,检查该单词是否在单词数组中作为;如果是这样,则增加它的计数(val);如果没有,请将其 val 设置为 1。为您的每个句子循环此语句而不重新声明 $words=array()

于 2012-01-05T06:00:04.837 回答