我正在尝试制作一个函数,它会发现文本中出现了多少次不同的词。问题是,我想将相似的词(和昵称)捆绑在一起。
我有一组有趣的词(我手动定义的):
$interesting_words = [
'test' => [
'number_of_occurances' => 0,
'connected_words' => [
'TEST',
'TESTER',
'TESTING'
]
],
'foobar' => [
'number_of_occurances' => 0,
'connected_words' => [
'FOO',
'FOOBAR',
'BAR'
]
]
]
示例文本。
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.
期望的输出。
Number of occurances for 'test': 4
Number of occurances for 'foobar': 3
有没有 1.000.000 个 for 循环的聪明方法?
我正在 Laravel 中制作函数,如果有帮助的话。
最佳答案
您可以使用 str_word_count && array_count_values,
来获取所有单词的出现次数,并使用 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
)
)
)
关于php - 文本中单词的出现次数(以及相似词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52233864/