Php 文本中出现的单词数(以及类似单词)

Php 文本中出现的单词数(以及类似单词),php,laravel,Php,Laravel,我试着做一个函数,它会发现文本中出现了多少次不同的单词。问题是,我想把相似的词(和昵称)捆绑在一起 我有一系列有趣的单词(我手动定义): 示例文本。 Number of occurances for 'test': 4 Number of occurances for 'foobar': 3 Lorem ipsum测试位于amet,Concertetur测试仪elit。塞德在turpis酒后驾车。 维尼那提斯福巴设施酒店。主旨 mollis测试,orci tellus aliquet nisl

我试着做一个函数,它会发现文本中出现了多少次不同的单词。问题是,我想把相似的词(和昵称)捆绑在一起

我有一系列有趣的单词(我手动定义):

示例文本。

Number of occurances for 'test': 4
Number of occurances for 'foobar': 3
Lorem ipsum测试位于amet,Concertetur测试仪elit。塞德在turpis酒后驾车。 维尼那提斯福巴设施酒店。主旨 mollis测试,orci tellus aliquet nisl,BAR molestie FOO augue在 美国东部时间。在测试车辆导航系统时。舌兰。 佩伦茨克奥奇乌尔德纳

所需输出。

Number of occurances for 'test': 4
Number of occurances for 'foobar': 3
有没有一种聪明的方法可以在不使用1.000.000 for循环的情况下实现这一点


如果有什么帮助的话,我正在用拉威尔做这个函数

我认为可以通过
分解
数组计数值
来实现,为了使其在下面的示例中工作,我删除了

<?php
$interesting_words = [
  'test' => [
    'number_of_occurances' => 0,
    'connected_words' => [
        'TEST',
        'TESTER',
        'TESTING'
      ]
    ],
  'foobar' => [
    'number_of_occurances' => 0,
    'connected_words' => [
        'FOO',
        'FOOBAR',
        'BAR'
      ]
    ]
];
$str = 'Lorem ipsum TEST sit amet, consectetur TESTER elit. Sed in turpis dui. Maecenas venenatis FOOBAR facilisis. Quisque dictum, diam consequat mollis TESTING, orci tellus aliquet nisl, BAR molestie FOO augue at est. In TESTING vehicula lectus. Curabitur ac varius ligula. Pellentesque orci urdna.';
$str = preg_replace('/[\.\,]/i','',$str);
$str = strtolower($str);
$str_arr = explode(" ",$str);
$str_occurance_counts = array_count_values($str_arr);
foreach($interesting_words as $k=>&$v){
  foreach($v['connected_words'] as $c=>$cVal){
    $v['number_of_occurances'] += $str_occurance_counts[strtolower($cVal)];
  }
}
print_r($interesting_words );
?>


您可以使用
str\u word\u count和&array\u count\u值,
获取所有单词的出现次数,
strtolower
在性能和仅出现次数计数时使搜索不区分大小写:

$words=array_count_values(str_word_count(strtolower($str),1));
foreach($interesting_words as $index=>&$details){
    foreach($details['connected_words'] as $key=>$similar){
        $details['number_of_occurances'] += $words[strtolower($similar)];
    }
}           
print_r($interesting_words );
输出:

Array
(
    [test] => Array
        (
            [number_of_occurances] => 4
            [connected_words] => Array
                (
                    [0] => TEST
                    [1] => TESTER
                    [2] => TESTING
                )

        )

    [foobar] => Array
        (
            [number_of_occurances] => 3
            [connected_words] => Array
                (
                    [0] => FOO
                    [1] => FOOBAR
                    [2] => BAR
                )

        )

)

分解字符串并在_array()中使用,只需要一个循环。并很好地使用数组\计数\值()。。我必须分解示例文本并遍历它们,-这是循环的一个例子。然后我必须,-对于每个单词,遍历$interest\u words-array并使用
in\u array()
(除非我弄错了),-这是两个for循环。这是非常长的文本,-因此,如果我必须多次阅读10000个单词:
count($interest\u words)
,-那么这就是计算。这真的是最好的方法吗?也许你必须通过单词数组
Array
(
    [test] => Array
        (
            [number_of_occurances] => 4
            [connected_words] => Array
                (
                    [0] => TEST
                    [1] => TESTER
                    [2] => TESTING
                )

        )

    [foobar] => Array
        (
            [number_of_occurances] => 3
            [connected_words] => Array
                (
                    [0] => FOO
                    [1] => FOOBAR
                    [2] => BAR
                )

        )

)