Php 我怎样才能找出文本块中最常用的两个单词组合?

Php 我怎样才能找出文本块中最常用的两个单词组合?,php,n-gram,word-frequency,Php,N Gram,Word Frequency,我怎样才能从一段文字中找出紧跟其后的两个最常用的词是什么?换句话说,是否有在线或离线(或代码)工具,我可以复制和粘贴文本,并输出我最常用的两个单词频率,如: 从最常用到最不常用: “猫”2.9% 她说:“1.8% “转到”1.2% 谢谢 将文本分成两个单词对(使用和帮助您) 使用strpos查找空间的第二个索引,然后在开头和第二个空间索引之间使用子字符串来获得两个单词对 将每个对添加到映射或集合(该对将是键)并设置值(如果映射中已存在该值,则增加该值) 解析完全文后,根据映射/集的大小和每对

我怎样才能从一段文字中找出紧跟其后的两个最常用的词是什么?换句话说,是否有在线或离线(或代码)工具,我可以复制和粘贴文本,并输出我最常用的两个单词频率,如:

从最常用到最不常用:

“猫”2.9% 她说:“1.8% “转到”1.2%

谢谢

  • 将文本分成两个单词对(使用和帮助您)

    • 使用strpos查找空间的第二个索引,然后在开头和第二个空间索引之间使用子字符串来获得两个单词对
  • 将每个对添加到映射或集合(该对将是键)并设置值(如果映射中已存在该值,则增加该值)
  • 解析完全文后,根据映射/集的大小和每对的值计算百分比

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

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

    $data=”在排版的最初几个世纪,引文的区别仅仅是指说话人,这在一些版本的《圣经》中仍然可以看到。文艺复兴时期,引文的特点是字体与正文形成对比(通常是斜体加罗马体,或相反)。以这种方式设置了全尺寸和全尺寸的区块报价。
    16世纪中叶,引号首次被刻印,到17世纪,一些印刷商大量使用引号。在巴洛克和浪漫主义时期的书籍中,它们可以在每一行引文的开头重复。当这种做法被放弃时,空白的空白页保留下来,留下一个缩进的整体报价';
    //清除不需要的字符中的数据!
    $data=preg_replace(“/[^\w]/”,“”,$data);
    $segments=分解(“,$data”);
    $index=array();
    对于($i=0;$i=1),
    'words'=>$key
    );
    }
    }
    }
    //更改为百分比:
    $total_double_words=计数($segments);
    foreach($id=>$set的索引)
    {
    $indexes[$id]['percentage']=number_格式(($set['count']/$total_double_words)*100),2)。“%”;
    }
    var_dump(指数);
    

    您可以在这里看到它:

    感谢快速回复代码MWNCI,但请提供一些php示例代码。或者如果你不太忙,我可以付钱给你创建这个简单的脚本。Thanks@Codemwnci:在第1阶段使用
    preg_split()
    来分解单词可能更容易。然后从第二个单词开始,使用上一个和当前两个单词。@Mark:这是一个问答网站,不是一个自由职业者招聘网站。@Mark:问题是,这看起来像是家庭作业-现在这本身并不坏。但是人们通常不会“为你做”,但是如果你证明你已经考虑过了,并且陷入了困境,他们会为你指出正确的方向。嗨,奥普林,我不知道你说的家庭作业是什么意思。我现在正在做的一个项目需要它。不幸的是,我不知道如何做的步骤Codemwnci。我很想为这个简单的品尝付给某人一小笔钱,但这听起来似乎违反了网站规则。但我感谢你的帮助。不,这不是家庭作业。这是我目前正在做的一个项目。罗伯特皮特我真的很感谢你抽出时间来写这篇文章。这正是我想要的。愿上帝保佑你,这和我想的差不多。我唯一建议的另一件事是用单个空格替换多个空格(
    $data=preg_replace('/[^\w]+/','''$data);
    )。在循环中,如果键$i或$i-1为空,您只需跳过该对,可能会因为为每个标点添加一个空格而丢失很多单词对(例如,“foo,bar”将变为“foo bar”,中间有两个空格)。preg_replace最好在循环之外,因为它会对整个上下文执行一次操作,而
    $key=trim(…)
    从每个单词的左+右移除不可见的字符,这意味着没有单词后面跟着空格,我的代码并不完美,只是作为一个例子。
    $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);