首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串解析为各个部分,只有连续的单词,而不是电源集。

将字符串解析为各个部分,只有连续的单词,而不是电源集。
EN

Stack Overflow用户
提问于 2013-06-20 18:59:15
回答 2查看 343关注 0票数 3

我正在尝试编写一个搜索查询,以便从数据库中找到文章。我想使用用户输入的搜索字符串,并寻找一组特定的可能的搜索词。如果用户输入搜索字符串“2011年德国的平均工资列表”,我想生成一个搜索条件列表。我想我会找出整个字符串和连续单词的部分字符串。也就是说,我想找的是“平均工资清单”和“2011年德国”,而不是“2011年德国上市”。

到目前为止,我有一些代码来生成我的搜索词:

代码语言:javascript
复制
  $searchString = "listing of average salaries in germany for 2011";
  $searchTokens = explode(" ", $searchString);
  $searchTerms = array($searchString);

  $tokenCount = count($searchTokens);
  for($max=$tokenCount - 1; $max>0; $max--) {
      $termA = "";
      $termB = "";
      for ($i=0; $i < $max; $i++) {
          $termA .= $searchTokens[$i] . " ";
          $termB .= $searchTokens[($tokenCount-$max) + $i] . " ";
      }
      array_push($searchTerms, $termA);
      array_push($searchTerms, $termB);
  }

  print_r($searchTerms);

它给了我一系列的条件:

  • 2011年德国平均工资清单
  • 德国的平均工资清单
  • 2011年德国的平均工资
  • 德国平均工资清单
  • 2011年德国的平均工资
  • 平均薪金表
  • 2011年德国的薪金
  • 平均工资清单
  • 2011年在德国
  • 平均清单
  • 2011年德国
  • 罗列
  • 2011年
  • 上市
  • 2011年

我不知道该如何得到缺少的条件:

  • 德国的平均工资
  • 德国的平均工资
  • 德国的平均工资
  • 的平均工资
  • 德国的平均工资
  • 在德国的工资
  • 等等。

更新

我不是在寻找“电源集”,所以像thisthis这样的答案是无效的。例如,我不希望这些内容出现在我的术语列表中:

  • 平均德国
  • 列出2011年薪金
  • 德国代表

我只想找连续的单词。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 17:12:24

您想要找到已爆炸字符串的所有顺序子集,只需从offset=0开始,然后用length=1将数组拆分到count-offset

代码语言:javascript
复制
$search_string = 'listing of average salaries in germany for 2011';
$search_array = explode(' ',$search_string);
$count = count($search_array);

$s = array();
$min_length = 1;

for ($offset=0;$offset<$count;$offset++) {
    for ($length=$min_length;$length<=$count-$offset;$length++) {
        $match = array_slice($search_array,$offset,$length);
        $search_matches []= join(' ',$match);
    }
}

print_r($search_array);
print_r($search_matches);
票数 0
EN

Stack Overflow用户

发布于 2013-06-20 19:07:19

首先,我只想让您知道,如果要在SQL数据库上运行所有这些以进行搜索,这是非常低效率的,因此建议您使用LIKE选项。http://www.techonthenet.com/sql/like.php

现在,要获得所有可能的组合,只需将这些单词分解成一个数组(就像您已经做过的那样),并遵循@ulvund关于这个问题的建议:PHP: How to get all possible combinations of 1D array?

也就是说

代码语言:javascript
复制
<?php

$array = explode(" ", "listing of average salaries in germany for 2011");

function depth_picker($arr, $temp_string, &$collect) {
    if ($temp_string != "") 
        $collect []= $temp_string;

    for ($i=0; $i<sizeof($arr);$i++) {
        $arrcopy = $arr;
        $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
        if (sizeof($arrcopy) > 0) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
        } else {
            $collect []= $temp_string. " " . $elem[0];
        }   
    }   
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17221648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档