1

如何从一段文本中找出我最常用的两个单词是什么?换句话说,是否有一个在线或离线(或代码)工具,我可以在其中复制和粘贴文本,它会输出我最常用的两个词频,例如:

从最常用到最少:

“猫” 2.9% “她说” 1.8% “去” 1.2%

谢谢

4

2 回答 2

2
  1. 将文本分成两个单词对(使用substrstrpos来帮助你)

    • 找到一个空格的第二个索引,使用strpos,然后在开始和第二个空格索引之间的子字符串得到两个单词对。
  2. 将每一对添加到地图或集合中(这对将成为键)并设置值(如果地图中已经存在,则增加值
  3. 解析完全文后,根据地图/集的大小和每对的值计算百分比。
于 2011-02-11T22:00:06.870 回答
1

这很有趣,但我有一点尝试,这应该让你开始,而不是你的答案。

这基本上是将单词分组为2,将它们索引到一个数组中并增加找到的时间,最后转换为百分比:)

$data = 'In the first centuries of typesetting, quotations were distinguished merely by indicating the speaker, and this can still be seen in some editions of the Bible. During the Renaissance, quotations were distinguished by setting in a typeface contrasting with the main body text (often Italic type with roman, or the other way round). Block quotations were set this way at full size and full measure.
Quotation marks were first cut in type during the middle of the sixteenth century, and were used copiously by some printers by the seventeenth. In Baroque and Romantic-period books, they could be repeated at the beginning of every line of a long quotation. When this practice was abandoned, the empty margin remained, leaving an indented block quotation';

//Clean The Data from un required chars!
$data = preg_replace("/[^\w]/"," ",$data);

$segments = explode(" ",$data);
$indexes = array();

for($i=0;$i<count($segments);$i++)
{
   if($i == 0)
   {
      continue;
   }

   if(trim($segments[$i - 1]) != "" && trim($segments[$i]) != "")
   {
      $key = trim($segments[$i - 1]) . " " . trim($segments[$i]);
      if(array_key_exists($key,$indexes))
      {
          $indexes[$key]["count"]++;
      }else
      {
          $indexes[$key] = array(
              'count' => 1,
              'words' => $key
          );
      }
   }
}

//Change to the percentage:
$total_double_words = count($segments);
foreach($indexes as $id => $set)
{
    $indexes[$id]['percentage'] = number_format((($set['count']/ $total_double_words) * 100),2) . "%";
}

var_dump($indexes);

你可以在这里看到它:http: //codepad.org/rcwpddW8

于 2011-02-11T22:38:45.993 回答