代码之家  ›  专栏  ›  技术社区  ›  tawfekov

提取两段之间的常用词?

  •  2
  • tawfekov  · 技术社区  · 16 年前

    如何提取php5中两个或多个段落之间的常用词? 然后比较它们。

    5 回复  |  直到 13 年前
        1
  •  5
  •   Pascal MARTIN    16 年前

    我想最基本的方法是:

    • 把每个段落分成一组单词 explode 或 preg_split
      • 第一个可能快一点
      • 第二种可能会提供更多的选择
    • 做一些过滤 在单词列表上:
        • 将所有内容转换为小写/大写,以帮助以后进行比较
      • 去除 太普通了
      • 去除 太短
      • array_filter
    • 然后,得到 array_intersect
        2
  •  4
  •   Kevin    16 年前

    http://php.net/manual/en/function.array-intersect.php

    理论上你应该收到一个匹配单词的数组。从那里,排名取决于你和你如何选择这样做。

        3
  •  2
  •   maček    16 年前

    <?php
      $paragraph = "hello this is some sample text. Sample text is usually used to test a program. For example, this sample text will be used to test the script below.";
      $words = array();
      preg_match_all('/\w+/', $paragraph, $matches);
      foreach($matches[0] as $w){
        $w = strtolower($w);
        if(!array_key_exists($w, $words)){
          $words[$w] = 0;
        }
        $words[$w]++;
      }
      asort($words);
      echo print_r($words, true);
    
      /* Output
      Array (
          [hello] => 1
          [will] => 1
          [example] => 1
          [a] => 1
          [program] => 1
          [usually] => 1
          [Sample] => 1
          [script] => 1
          [below] => 1
          [some] => 1
          [the] => 1
          [be] => 1
          [for] => 1
          [to] => 2
          [is] => 2
          [sample] => 2
          [test] => 2
          [used] => 2
          [this] => 2
          [text] => 3
      ) */
    
    ?>
    
        4
  •  2
  •   Luke Magill    16 年前
    <?php
    /**
     * Gets all the words as an array for a given text blob
     *
     * @param string $paragraph The pragraph in question
     * @return string[] Words found
     */
    function getWords($paragraph) {
       //only lowercase
       $paragraph = strtolower($paragraph);
       //replace all non alpha num characters with spaces (this way periods won't screw
       //with our words)
       $paragraph = preg_replace("/[^a-z]/", " ", $paragraph);
       $paragraph = explode(" ", $paragraph);
       //get rid of empty words
       $paragraph = array_flip($paragraph);
       unset($paragraph[""]);
       $paragraph = array_flip($paragraph);
       return $paragraph;
    }
    
    $paragraph1 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque sit amet ante
    nisl. Morbi tempor varius semper. Suspendisse vel nisi dui. Sed tristique consectetur imperdiet.
    Morbi nulla diam, lobortis non eleifend eget, ullamcorper nec tortor. Duis quis lectus felis.
    In vulputate varius luctus. Maecenas gravida laoreet massa quis faucibus. Duis dictum, dui sit
    amet pharetra laoreet, tortor nisi mattis tortor, et ornare purus dolor vitae ligula. Sed id
    orci ut dolor fermentum imperdiet. Nulla non justo urna, in suscipit nunc. Donec ut nibh risus,
    ut tempus mi. Proin fringilla pretium urna sed faucibus. Proin et porttitor sem. Nulla eros
    arcu, sodales et aliquam in, pharetra et mauris. Duis placerat blandit justo at tincidunt.
    Etiam eu rutrum arcu.";
    
    $paragraph2 = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam sit amet leo id
    arcu feugiat tempus quis a risus. Proin non nisi augue. Cras ultricies dignissim augue vel gravida.
    Vivamus sed orci sed leo sollicitudin aliquet non at dui. Nulla facilisi. Suspendisse nunc nibh,
    sollicitudin vitae tincidunt eget, aliquet vitae magna. Aliquam vehicula cursus ante, vitae rhoncus
    orci egestas et. Fusce condimentum metus at metus auctor pellentesque. Suspendisse potenti. Morbi
    blandit, leo sed eleifend pretium, augue dui interdum eros, vel faucibus felis dolor id elit. Nam
    condimentum, odio at mattis consequat, sem eros molestie risus, a tempus dolor arcu sit amet justo.";
    
    $common = array_intersect(getWords($paragraph1), getWords($paragraph2));
    sort($common);
    var_dump($common);
    ?>
    
        5
  •  -1
  •   Allyn    16 年前
    1. 将每个段落拆分为空格
    2. 从a段中选择令牌;如果它在B段中,则将其放入“matches”数组中。